我目前从应用程序获得了一个数据集,但问题是数据是在每次更改时列出的,而不是定期的。例如,我可以在一天内有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
答案 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,删除了上面脚本中的日期值,并更改了一些选项。这就是它的样子:
这是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;