Ich habe Sensordaten Zeitstempel. Aufgrund technischer Details bekomme ich Daten von den Sensoren bei ca. 1 Minute Intervallen. Die Daten können wie folgt aussehen:Pandas Zeitreihen resampling und interpolieren zusammen
tstamp val
0 2016-09-01 00:00:00 57
1 2016-09-01 00:01:00 57
2 2016-09-01 00:02:23 57
3 2016-09-01 00:03:04 57
4 2016-09-01 00:03:58 58
5 2016-09-01 00:05:00 60
Nun, im Wesentlichen, würde ich sehr glücklich sein, wenn ich auf die Minute genau alle Daten bekommen, aber ich weiß nicht. Die einzige Möglichkeit, die Verteilung zu erhalten und Daten in jeder Minute zu haben, besteht darin, zu interpolieren. Zum Beispiel gibt es zwischen den Zeilenindizes 1 und 2 83 Sekunden, und der natürliche Weg, um einen Wert in der genauen Minute zu erhalten, besteht darin, zwischen den zwei Datenzeilen zu interpolieren (in diesem Fall ist es 57, aber das ist nicht der Fall) überall).
Gerade jetzt, mein Ansatz ist folgendes zu tun:
date = pd.to_datetime(df['measurement_tstamp'].iloc[0].date())
ts_d = df['measurement_tstamp'].dt.hour * 60 * 60 +\
df['measurement_tstamp'].dt.minute * 60 +\
df['measurement_tstamp'].dt.second
ts_r = np.arange(0, 24*60*60, 60)
data = scipy.interpolate.interp1d(x=ts_d, y=df['speed'].values)(ts_r)
req = pd.Series(data, index=pd.to_timedelta(ts_r, unit='s'))
req.index = date + req.index
Aber das fühlt sich eher herausgezogen und lange zu mir. Es gibt ausgezeichnete Pandas-Methoden, die Resampling, Runden usw. durchführen. Ich habe sie den ganzen Tag gelesen, aber es stellt sich heraus, dass nichts so interpoliert, wie ich es möchte. resample
funktioniert wie ein groupby
und mittelt Zeitpunkte, die zusammen fallen. fillna
interpoliert, aber nicht nachdem resample
die Daten bereits durch Mittelung geändert hat.
Fehle ich etwas, oder ist mein Ansatz das Beste, was es gibt?
Der Einfachheit halber wird angenommen, dass I-Gruppe die Daten für Tag, und durch den Sensor, so dass nur eine 24-Stunden-Zeitraum von einem Sensor zu einem Zeitpunkt interpoliert.
Aber "resample" Mittelwerte, wenn zwei oder mehr Beobachtungen in der gleichen Gruppe auftreten, nicht wahr? – Kartik
Also folgt diese Daten tatsächlich einer Verteilung. Im Wesentlichen möchte ich eine lineare Interpolation zwischen zwei Punkten, so dass der interpolierte Punkt genau auf die Minute fällt. Mit diesen Daten wird es niemals passieren, dass mehr als 2 Beobachtungen in einer Minute vorliegen. Tatsächlich fallen die meisten Daten genau auf die Minute, aber manchmal piept der Sensor zu spät oder zu früh. Normalerweise runden meine Kollegen es auf die nächste Minute ab und füllen fehlende Zeitstempel mit dem Wert aus den vorherigen Zeitstempeln, aber das ändert die Verteilung etwas. Ich brauche genauere Einschränkungen für mein Problem. – Kartik
Schön! Kannst du das aber mit meiner Lösung in der Frage vergleichen? Ich habe einen Datensatz (nur für September), das sind ~ 114 Millionen Datensätze (2.655 Sensoren, berichtet fast 1440 Datenpunkte pro Tag). Ich denke, dass das Interpolieren bei jeder Sekunde dazu führt, dass es langsamer ist. – Kartik