2017-06-22 3 views
2

Ich habe ein Pandas Datenrahmen, und ich möchte die Periodizität, Trend, usw. der Zeitreihe erkunden. Here sind die Daten.Superposing Pandas Zeitreihe aus verschiedenen Jahren in Seaborn Grundstück

Um es zu visualisieren, möchte ich die "Sub-Zeitreihe" für jedes Jahr auf der gleichen Handlung überlagern (dh haben die gleiche x-Koordinate für Daten vom 01.01.2000, 01.01.2001 und 01.01/2002).

Muss ich meine Datumsspalte so umwandeln, dass alle Daten dasselbe Jahr haben?

Hat jemand eine Idee, wie man das macht?

Antwort

2

Setup-
Dieser analysiert die Daten, die Sie

df = pd.read_csv(
    'data.csv', sep=';', decimal=',', 
    usecols=['date', 'speed', 'height', 'width'], 
    index_col=0, parse_dates=[0] 
) 

Mein Hack
ich aber das Jahr abgezogen, um das alles von T verbunden er datiert und nahm das Jahr 2012 an, weil es ein Schaltjahr ist und den 29. Februar aufnehmen wird. Ich splity das Jahr in einer anderen Ebene eines Mehr Index, unstack und plot

idx = pd.MultiIndex.from_arrays([ 
     pd.to_datetime(df.index.strftime('2012-%m-%d %H:%M:%S')), 
     df.index.year 
    ]) 

ax = df.set_index(idx).unstack().speed.plot() 
lg = ax.legend(bbox_to_anchor=(1.05, 1), loc=2, ncol=2) 

enter image description here


In dem Bemühen, ziemlich dies bis

fig, axes = plt.subplots(3, 1, figsize=(15, 9)) 

idx = pd.MultiIndex.from_arrays([ 
     pd.to_datetime(df.index.strftime('2012-%m-%d %H:%M:%S')), 
     df.index.year 
    ]) 

d1 = df.set_index(idx).unstack().resample('W').mean() 
d1.speed.plot(ax=axes[0], title='speed') 
lg = axes[0].legend(bbox_to_anchor=(1.02, 1), loc=2, ncol=1) 

d1.height.plot(ax=axes[1], title='height', legend=False) 
d1.width.plot(ax=axes[2], title='width', legend=False) 

fig.tight_layout() 

enter image description here

1

Eine Möglichkeit, es tun könnte, ist eine gemeinsame x-Achse für alle Jahre wie diese zu erstellen:

df['yeartime']=df.groupby(df.date.dt.year).cumcount() 

wo ‚yeartime‘ die Anzahl der Zeitmaßnahmen in einem Jahr darstellt. Als Nächstes erstellen Sie ein Jahr Spalte:

df['year'] = df.date.dt.year 

Jetzt wollen wir unsere Daten für den 1. JANUAR Jahren Teilmenge 2000, 2001 und 2002

subset_df = df.loc[df.date.dt.year.isin(['2000','2001',2002]) & (df.date.dt.day == 1) & (df.date.dt.month == 1)] 

Und schließlich zeichnen es.

ax = sns.pointplot('yeartime','speed',hue='year',data=subset_df, markers='None') 
_ =ax.get_xaxis().set_ticks([]) 

enter image description here