Ho iniziato a utilizzare pandas
per fare un po 'di aggregazione per data. Il mio obiettivo è contare tutte le istanze di una misurazione che si verificano in un particolare giorno e per rappresentarlo in D3
. Per illustrare il mio flusso di lavoro, ho un set di query (da Django
) che assomiglia a questo:Come spostarmi in modo efficiente da un dataframe di Pandas a JSON
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}]
faccio un dataframe in pandas
e aggregare il 'contatore' misura di giorno in giorno creato:
import pandas as pd
queryset_df = pd.DataFrame.from_records(queryset).set_index('id')
aggregated_df = queryset_df.groupby('created').sum()
questo mi dà una dataframe come questo:
counter
created
05-16-13 3
05-17-13 1
05-18-13 1
come sto usando D3
ho pensato che un oggetto JSON
sarebbe t lui più utile. Utilizzando la funzione Pandas
to_json()
a convertire il mio dataframe in questo modo:
aggregated_df.to_json()
dandomi il seguente JSON
oggetto
{"counter":{"05-16-13":3,"05-17-13":1,"05-18-13":1}}
Questo non è esattamente quello che voglio, come mi piacerebbe essere in grado di accedere sia la data e la misurazione. C'è un modo per esportare i dati in modo tale che finisca con qualcosa di simile?
data = {"c1":{"date":"05-16-13", "counter":3},"c2":{"date":"05-17-13", "counter":1}, "c3":{"date":"05-18-13", "counter":1}}
ho pensato che se avessi potuto strutturare in modo diverso sul lato Python
, sarebbe ridurre la quantità di formattazione dei dati avrei bisogno di fare sul lato JS
come ho programmato per caricare i dati di fare qualcosa di simile:
x.domain(d3.extent(data, function(d) { return d.date; }));
y.domain(d3.extent(data, function(d) { return d.counter; }));
sono molto aperto a suggerimenti di flussi di lavoro migliori nel complesso come questo è qualcosa che ho bisogno di fare frequentemente, ma sono sicuro del modo migliore di gestire la connessione tra D3
e pandas
. (Ho guardato diversi pacchetti che combinano sia python
e D3
direttamente, ma che non è qualcosa che sto cercando come sembrano concentrarsi sulla generazione grafico statico e non fare uno SVG)