如何规范化图形的唯一日期

时间:2015-03-10 14:53:20

标签: python

我目前从应用程序获得了一个数据集,但问题是数据是在每次更改时列出的,而不是定期的。例如,我可以在一天内有20个条目,然后在两天内没有任何条目,然后是一个,然后是下个月。

我想绘制我拥有的数据,但是具有一致的时间范围 - 目前它只是为每个条目绘制一个接一个的每个日期。

我已经考虑过这个问题,我想到的一个想法是确定数据的开始和结束日期,将其除以所需的图形分辨率(例如100个条目),然后为每个条目确定最接近的数据在分辨率样本之前产生数据集。即一个用于绘图的样本是1月10日,它在1月10日之前找到第一个样本并使用它。然后使用100个样本,您可以使用一致的时间刻度进行绘图。

关于如何实现这一目标的任何想法都会很精彩!我希望在python中进行规范化,然后使用google chart api在浏览器中进行渲染。

以下是数据示例:

10/03/2015 10:55    7385498415
10/03/2015 9:15     7379639094
10/03/2015 8:55     7376777516
10/03/2015 8:35     7368304217
10/03/2015 8:12     7358015859
8/03/2015 9:22      7358015859
8/03/2015 4:27      7354221274
8/03/2015 4:07      7346810719
7/03/2015 4:25      7339695326
7/03/2015 4:25      7339698276
6/03/2015 13:08     7339701226
6/03/2015 13:04     7317905872
6/03/2015 12:44     7309771372
6/03/2015 12:24     7300851599
6/03/2015 12:04     7292557469
6/03/2015 11:39     7283439433
6/03/2015 11:00     7278056128
6/03/2015 10:41     7267320628
6/03/2015 10:35     7265158228
6/03/2015 10:21     7265158228
6/03/2015 10:01     7255260402
6/03/2015 7:06      7246047762
5/03/2015 15:39     7245760885
5/03/2015 13:41     7170760885
4/03/2015 21:21     5595760885
4/03/2015 18:59     5590496476
4/03/2015 18:59     5585251201

1 个答案:

答案 0 :(得分:0)

没有必要“规范化”数据,因为Google Charts API直接支持日期。不仅调整数据更加困难,而且还会给人一种扭曲的印象。

我们可以从他们文档的Dates and Times部分开始:

  

要创建新的Date对象,可以使用new关键字调用Date()构造函数,并使用参数指定日期的组件。这些参数采用与您日期的不同属性相对应的几个数字的形式。

     
new Date(Year, Month, Day, Hours, Minutes, Seconds, Milliseconds)

Google Chart中的一行是[x, y]列表。第一个条目将是这些Date()构造函数之一,第二个条目将是值。因此,我们需要获取您提供的数据,解析日期并将其转换为Date()构造函数。 (注意,我们可以省略第二个和毫秒的参数。)

这是一个简单的脚本,可以执行此操作,然后每次包装我们可以提供给Google Chart的行:

from datetime import datetime

# This string is a copy of the example data set. The newlines have been
# replaced with '\n' escape codes to save vertical space on Stack Overflow.
DATASET = """10/03/2015 10:55    7385498415\n10/03/2015 9:15     7379639094\n10/03/2015 8:55     7376777516\n10/03/2015 8:35     7368304217\n10/03/2015 8:12     7358015859\n8/03/2015 9:22      7358015859\n8/03/2015 4:27      7354221274\n8/03/2015 4:07      7346810719\n7/03/2015 4:25      7339695326\n7/03/2015 4:25      7339698276\n6/03/2015 13:08     7339701226\n6/03/2015 13:04     7317905872\n6/03/2015 12:44     7309771372\n6/03/2015 12:24     7300851599\n6/03/2015 12:04     7292557469\n6/03/2015 11:39     7283439433\n6/03/2015 11:00     7278056128\n6/03/2015 10:41     7267320628\n6/03/2015 10:35     7265158228\n6/03/2015 10:21     7265158228\n6/03/2015 10:01     7255260402\n6/03/2015 7:06      7246047762\n5/03/2015 15:39     7245760885\n5/03/2015 13:41     7170760885\n4/03/2015 21:21     5595760885\n4/03/2015 18:59     5590496476\n4/03/2015 18:59     5585251201"""

# For each line in the dataset, print the row which will be added to the
# Google Chart.
for line in DATASET.splitlines():
    date, value = line.split("    ")

    # First we parse the date string using strptime(), and write it back out
    # as a Date() constructor to use in JavaScript
    date_obj = datetime.strptime(date, "%d/%m/%Y %H:%M")
    js_date = date_obj.strftime("new Date(%Y, %m, %d, %H, %M, %s, %f)")

    js_value = value.strip()

    print "[%s, %s]," % (js_date, js_value)

以下是输出的几行:

[new Date(2015, 03, 10, 10, 55, 1425984900, 000000), 7385498415],
[new Date(2015, 03, 10, 09, 15, 1425978900, 000000), 7379639094],
[new Date(2015, 03, 10, 08, 55, 1425977700, 000000), 7376777516],
[new Date(2015, 03, 10, 08, 35, 1425976500, 000000), 7368304217],

然后我从Google的图表库中取出scatter plot example,删除了上面脚本中的日期值,并更改了一些选项。这就是它的样子:

enter image description here

这是HTML:



<head>
  <!--Load the AJAX API-->
  <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  <script>
    google.load("visualization", "1", {packages:["corechart"]});
    google.setOnLoadCallback(drawChart);
    function drawChart() {
      var data = google.visualization.arrayToDataTable([
        ['Date', 'Value'],
        [new Date(2015, 03, 10, 10, 55), 7385498415],
        [new Date(2015, 03, 10, 09, 15), 7379639094],
        [new Date(2015, 03, 10, 08, 55), 7376777516],
        [new Date(2015, 03, 10, 08, 35), 7368304217],
        [new Date(2015, 03, 10, 08, 12), 7358015859],
        [new Date(2015, 03, 08, 09, 22), 7358015859],
        [new Date(2015, 03, 08, 04, 27), 7354221274],
        [new Date(2015, 03, 08, 04, 07), 7346810719],
        [new Date(2015, 03, 07, 04, 25), 7339695326],
        [new Date(2015, 03, 07, 04, 25), 7339698276],
        [new Date(2015, 03, 06, 13, 08), 7339701226],
        [new Date(2015, 03, 06, 13, 04), 7317905872],
        [new Date(2015, 03, 06, 12, 44), 7309771372],
        [new Date(2015, 03, 06, 12, 24), 7300851599],
        [new Date(2015, 03, 06, 12, 04), 7292557469],
        [new Date(2015, 03, 06, 11, 39), 7283439433],
        [new Date(2015, 03, 06, 11, 00), 7278056128],
        [new Date(2015, 03, 06, 10, 41), 7267320628],
        [new Date(2015, 03, 06, 10, 35), 7265158228],
        [new Date(2015, 03, 06, 10, 21), 7265158228],
        [new Date(2015, 03, 06, 10, 01), 7255260402],
        [new Date(2015, 03, 06, 07, 06), 7246047762],
        [new Date(2015, 03, 05, 15, 39), 7245760885],
        [new Date(2015, 03, 05, 13, 41), 7170760885],
        [new Date(2015, 03, 04, 21, 21), 5595760885],
        [new Date(2015, 03, 04, 18, 59), 5590496476],
        [new Date(2015, 03, 04, 18, 59), 5585251201]
      ]);

      var options = {
        hAxis: {title: 'Date'},
        vAxis: {title: 'Variable'},
        legend: 'none',
        height: 500,
        width: 1100
      };

      var chart = new google.visualization.ScatterChart(document.getElementById('chart_div'));

      chart.draw(data, options);
    }
  </script>
</head>

<body>

<div id="chart_div"></div>

</body>
&#13;
&#13;
&#13;