2017-05-30 2 views
2

ich habe einen jährlichen Datensatz mit Energieverbrauchswerten in 30min-Intervallen:Python Pandas - wöchentliches Liniendiagramm von Jahresdaten

     data 
2012-11-01 00:00:00 0.177 
2012-11-01 00:30:00 0.141 
2012-11-01 01:00:00 0.112 
2012-11-01 01:30:00 0.082 
2012-11-01 02:00:00 0.080 
... 

wie plotten i eine mehrzeilige Diagramm, das den Datenverbrauch für jede Woche zeigt? d. h., schließlich habe ich einen Graphen mit 52 Zeilen, wobei die x-Achse die Zeit in der Woche (Tage? Halbe Tage? Stunden?) und die y-Achse der Verbrauch ist.

dank

+0

Was haben Sie t Ried? Wir werden keinen Code für Sie schreiben, wenn Sie keine Mühe gezeigt haben. Und die Frage "(Tage? Halbe Tage? Stunden?)" Sollte von ** dir ** beantwortet werden, nicht von uns :) – blacksite

Antwort

1

Betrachten Sie den Datenrahmen df mit Index tidx

tidx = pd.date_range('2016-01-01', '2017-01-01', freq='30T') 
df = pd.DataFrame(dict(data=(np.random.randn(len(tidx)) + .01).cumsum()), tidx) 

Deltas relativ zum ersten Date

deltas = df.index - df.index[0] 

bezüglich erstellen Wochen erstellen Zeit deltas

week = deltas.days // 7 

Erstellen Sie neue pd.Series Objekt mit einem pd.MultiIndex

d1 = pd.Series(
    df.data.values, 
    [deltas - pd.to_timedelta(week, 'w'), week] 
) 

unstack

d2 = print(d1.unstack().add_prefix('Week ') 
d2.iloc[:10, :5] 

      Week 0 Week 1  Week 2 Week 3  Week 4 
00:00:00 -0.973634 -5.350765 6.918354 -3.536488 22.489763 
00:30:00 -2.320088 -5.632370 6.670572 -4.852697 24.493568 
01:00:00 -2.499885 -3.458980 8.748229 -4.059241 25.278759 
01:30:00 -3.525366 -2.286180 8.345489 -5.241154 26.086324 
02:00:00 -2.110594 -2.801211 8.626546 -6.840205 28.028737 
02:30:00 -2.811840 -2.605900 9.224140 -6.601106 28.014257 
03:00:00 -4.119560 -3.497173 9.801411 -6.431539 29.284452 
03:30:00 -4.927063 -3.406615 11.729483 -5.526467 27.834364 
04:00:00 -5.573758 -2.559643 13.653698 -3.948048 28.956422 
04:30:00 -4.878375 -4.322923 12.017081 -2.862244 28.364504 

All Together

tidx = pd.date_range('2016-01-01', '2017-01-01', freq='30T') 
df = pd.DataFrame(dict(data=(np.random.randn(len(tidx)) + .01).cumsum()), tidx) 

deltas = df.index - df.index[0] 

week = deltas.days // 7 

d1 = pd.Series(
    df.data.values, 
    [deltas - pd.to_timedelta(week, 'w'), week] 
) 

d2 = d1.unstack().add_prefix('Week ') 

ax = d2.plot(rot=30, colormap='jet') 
lg = ax.legend(ncol=4, loc=2, bbox_to_anchor=(1.05, 1)) 

enter image description here

+0

perfekt danke. –

0

Angenommen, Sie matplotlib und Pandas verwenden sonst nur installieren, wenn nicht und importieren:

import matplotlib.pyplot as plt 

bis Sie d'ont verwenden plt.show() es wird auf der Figur standardmäßig

plotten so konvertieren Sie Ihre erste Spalte als Datetime mit pandas wird pyplot mit einer datumsachse plotten.

pandas.to_datetime(..) 

dann, wenn Sie wirklich wollen, 52 Zeilen: genannt 52 mal plt.Grundstück (Woche, Daten)

zeigt es dann mit:

plt.show() 

aber ich werde dir tu Verwendung empfehlen:

plt.scatter(df['date'],df['data']) 
plt.show() 

Dies Sie haben Ihr ganzes Jahr mit 52 Punkten auf dem gleiche grafische Darstellung wie schnell gezeigte Beispiel gibt es so etwas wie das:

plt.scatter() example with a bit of your data

Verwandte Themen