Я начал использовать 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}]
Я делаю dataframe в pandas
и агрегирую меру 'counter' с созданным днем:
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()
, я конвертирую свой dataframe следующим образом:
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)