djq*_*djq 11 javascript python json pandas d3.js
我已经开始使用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}]
Run Code Online (Sandbox Code Playgroud)
我创建了一个数据框,pandas并在创建的那一天汇总了度量'counter':
import pandas as pd
queryset_df = pd.DataFrame.from_records(queryset).set_index('id')
aggregated_df = queryset_df.groupby('created').sum()
Run Code Online (Sandbox Code Playgroud)
这给了我一个像这样的数据帧:
counter
created
05-16-13 3
05-17-13 1
05-18-13 1
Run Code Online (Sandbox Code Playgroud)
在我使用时,D3我认为JSON对象将是最有用的.使用Pandas to_json()函数我转换我的数据帧如下:
aggregated_df.to_json()
Run Code Online (Sandbox Code Playgroud)
给我以下的JSON对象
{"counter":{"05-16-13":3,"05-17-13":1,"05-18-13":1}}
Run Code Online (Sandbox Code Playgroud)
这不是我想要的,因为我希望能够访问日期和测量.有没有办法可以导出数据,以便我最终得到这样的东西?
data = {"c1":{"date":"05-16-13", "counter":3},"c2":{"date":"05-17-13", "counter":1}, "c3":{"date":"05-18-13", "counter":1}}
Run Code Online (Sandbox Code Playgroud)
我认为如果我可以在Python侧面进行不同的结构,它会减少我需要做的数据格式化,JS因为我计划加载数据做这样的事情:
x.domain(d3.extent(data, function(d) { return d.date; }));
y.domain(d3.extent(data, function(d) { return d.counter; }));
Run Code Online (Sandbox Code Playgroud)
我更好地工作流程的建议非常开放的整体,因为这是我需要做的频繁,但我不能确定的处理之间的连接的最佳方式D3和pandas.(我看着那个结合了几个包python和D3直接,但他们似乎把重点放在静态图表生成,而不是做一个SVG是不是我要找的东西)
Bou*_*oud 23
使用,将您的日期索引转换回一个简单的数据列reset_index,然后使用orient='index'属性生成您的json对象:
In [11]: aggregated_df.reset_index().to_json(orient='index')
Out[11]: '{"0":{"created":"05-16-13","counter":3},"1":{"created":"05-17-13","counter":1},"2":{"created":"05-18-13","counter":1}}'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13254 次 |
| 最近记录: |