2013-06-11 21 views
7

Sto provando a tracciare una serie temporale di istogrammi in Python. There has been a similar question about this, but in R. Quindi, fondamentalmente, ho bisogno della stessa cosa, ma sono davvero pessimo in R. Di solito nel mio set di dati sono presenti 48 valori al giorno. Dove - 9999 rappresenta i dati mancanti. Here's l'esempio dei dati.Intervalli di stampa degli istogrammi in Python

Ho iniziato con la lettura dei dati e la costruzione di un pandasDataFrame.

import pandas as pd 
df = pd.read_csv('sample.csv', parse_dates=True, index_col=0, na_values='-9999') 
print df 

<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 336 entries, 2008-07-25 14:00:00 to 2008-08-01 13:30:00 
Data columns (total 1 columns): 
159.487691046 330 non-null values 
dtypes: float64(1) 

ora posso raggruppare i dati per giorno:

daily = df.groupby(lambda x: x.date()) 

ma poi mi sono bloccato. Non so come usarlo con matplotlib per ottenere i miei tempi degli istogrammi. Qualsiasi aiuto è apprezzato, non necessariamente utilizzando pandas.

risposta

5

Creare un istogramma e utilizzare pcolor di matplotlib.

Abbiamo bisogno di raggruppare i gruppi in modo uniforme, quindi rendiamo i bin manualmente in base all'intervallo dei dati di esempio.

In [26]: bins = np.linspace(0, 360, 10) 

Applicare histogram a ciascun gruppo.

In [27]: f = lambda x: Series(np.histogram(x, bins=bins)[0], index=bins[:-1]) 

In [28]: df1 = daily.apply(f) 

In [29]: df1 
Out[29]: 
      0 40 80 120 160 200 240 280 320 
2008-07-25 0 0 0 3 18 0 0 0 0 
2008-07-26 2 0 0 0 17 6 13 1 8 
2008-07-27 4 3 10 0 0 0 0 0 31 
2008-07-28 0 7 15 0 0 0 0 6 20 
2008-07-29 0 0 0 0 0 0 20 26 0 
2008-07-30 10 1 0 0 0 0 1 25 9 
2008-07-31 30 4 1 0 0 0 0 0 12 
2008-08-01 0 0 0 0 0 0 0 14 14 

Seguendo il tuo esempio collegato in R, l'asse orizzontale dovrebbe essere date, e l'asse verticale dovrebbe essere la gamma di contenitori. I valori dell'istogramma sono una "mappa di calore".

In [30]: pcolor(df1.T) 
Out[30]: <matplotlib.collections.PolyCollection at 0xbb60e2c> 

enter image description here

Resta da etichettare gli assi. This answer dovrebbe essere di aiuto.

+3

aggiunta al ricettario! – Jeff

+0

Grazie! Questo dovrebbe farlo. Ho completamente dimenticato di menzionare che - 9999 è un numero mancante e dovrebbe essere ignorato. Lo aggiungerà alla domanda. – abudis

+0

Questo è molto bello! –

Problemi correlati