Ich habe folgende Pandas DataFrame:
time Group blocks
0 1 A 4
1 2 A 7
2 3 A 12
3 4 A 17
4 5 A 21
5 6 A 26
6 7 A 33
7 8 A 39
8 9 A 48
9 10 A 59
.... .... ....
36 35 A 231
37 1 B 1
38 2 B 1.5
39 3 B 3
40 4 B 5
41 5 B 6
.... .... ....
911 35 Z 349
Dies ist ein Datenrahmen mit mehreren Zeitreihen-Daten, von min=1
bis max=35
. Jede Group
hat eine solche Zeitreihe.
Ich möchte jede einzelne Zeitreihe A bis Z gegen eine x-Achse von 1 bis 35 plotten. Die y-Achse wäre zu jedem Zeitpunkt blocks
.
Ich dachte daran, so etwas wie eine Andrews Curves-Plot zu verwenden, die jede Serie gegeneinander plotten würde. Jeder "Farbton" würde auf eine andere Gruppe eingestellt. (Andere Ideen sind willkommen.)
Mein Problem: Wie formatiert man diesen Datenrahmen, um mehrere Serien zu zeichnen? Sollten die Spalten GroupA
, GroupB
usw. sein?
Wie bekommt man das Datenframe im Format:
time GroupA blocksA GroupsB blocksB GroupsC blocksC....
Ist dies das richtige Format für eine Andrews-Zeichnung wie gezeigt?
BEARBEITEN
Wenn ich es versuche:
df.groupby('Group').plot(legend=False)
die X-Achse ist völlig falsch. Alle Zeitreihen sollten von 0 bis 35 in einer Serie dargestellt werden.
Wie löse ich das?
Schau dir diese Varianten an. Die erste ist Andrews 'Kurven und die zweite ist ein mehrzeiliges Diagramm, das nach einer Spalte Month
gruppiert ist. Der Datenrahmen data
enthält drei Spalten Temperature
, Day
und Month
:
import pandas as pd
import statsmodels.api as sm
import matplotlib.pylab as plt
from pandas.tools.plotting import andrews_curves
data = sm.datasets.get_rdataset('airquality').data
fig, (ax1, ax2) = plt.subplots(nrows = 2, ncols = 1)
data = data[data.columns.tolist()[3:]] # use only Temp, Month, Day
# Andrews' curves
andrews_curves(data, 'Month', ax=ax1)
# multiline plot with group by
for key, grp in data.groupby(['Month']):
ax2.plot(grp['Day'], grp['Temp'], label = "Temp in {0:02d}".format(key))
plt.legend(loc='best')
plt.show()
Wenn Sie die Kurve von Andrews zeichnen, werden Ihre Daten für eine Funktion gerettet. Das bedeutet, dass Andrews-Kurven, die durch nahe beieinander liegende Funktionen dargestellt werden, darauf schließen lassen, dass die entsprechenden Datenpunkte ebenfalls nahe beieinander liegen.
Sie können die Daten als Pivot-Tabelle umstrukturieren:
df.pivot_table(index='time',columns='Group',values='blocks',aggfunc='sum').plot()