11

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。(両方pythonD3直接組み合わせたいくつかのパッケージを見てきましたが、静的チャートの生成に焦点を当てており、svg を作成していないように見えるため、探しているものではありません)

4

1 に答える 1

23

を使用して日付インデックスを単純なデータ列に変換し、プロパティreset_indexを使用して json オブジェクトを生成します。orient='index'

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}}'
于 2013-10-06T22:27:43.080 に答える