我已经开始使用pandas
按日期进行一些聚合。我的目标是计算在特定日期发生的所有测量实例,然后将其表示为D3
. 为了说明我的工作流程,我有一个Django
如下所示的查询集(来自 ):
queryset = [{'created':"05-16-13", 'counter':1, 'id':13}, {'created':"05-16-13", 'counter':1, 'id':34}, {'created':"05-17-13", 'counter':1, 'id':12}, {'created':"05-16-13", 'counter':1, 'id':7}, {'created':"05-18-13", 'counter':1, 'id':6}]
我在pandas
创建日期之前创建了一个数据框并汇总了度量“计数器”:
import pandas as pd
queryset_df = pd.DataFrame.from_records(queryset).set_index('id')
aggregated_df = queryset_df.groupby('created').sum()
这给了我一个像这样的数据框:
counter
created
05-16-13 3
05-17-13 1
05-18-13 1
当我使用D3
时,我认为一个JSON
对象将是最有用的。使用Pandas
to_json()
函数我转换我的数据框是这样的:
aggregated_df.to_json()
给我以下JSON
对象
{"counter":{"05-16-13":3,"05-17-13":1,"05-18-13":1}}
这不完全是我想要的,因为我希望能够同时访问日期和测量值。有没有办法可以导出数据,最终得到这样的结果?
data = {"c1":{"date":"05-16-13", "counter":3},"c2":{"date":"05-17-13", "counter":1}, "c3":{"date":"05-18-13", "counter":1}}
我认为,如果我可以在Python
侧面采用不同的结构,它将减少我需要在JS
侧面进行的数据格式化量,因为我计划通过以下方式加载数据:
x.domain(d3.extent(data, function(d) { return d.date; }));
y.domain(d3.extent(data, function(d) { return d.counter; }));
我对整体上更好的工作流程的建议持开放态度,因为这是我需要经常做的事情,但我不确定处理 和 之间连接的最佳D3
方式pandas
。(我查看了几个直接结合两者的包python
,D3
但这不是我要寻找的东西,因为它们似乎专注于静态图表生成而不是制作 svg)