Ich habe zwei numpy Arrays light_points und time_points und möchte einige Zeitreihenanalyse-Methoden für diese Daten verwenden.Zeitreihenanalyse - ungleichmäßige Messungen - pandas + statsmodels
Ich versuchte dann das:
import statsmodels.api as sm
import pandas as pd
tdf = pd.DataFrame({'time':time_points[:]})
rdf = pd.DataFrame({'light':light_points[:]})
rdf.index = pd.DatetimeIndex(freq='w',start=0,periods=len(rdf.light))
#rdf.index = pd.DatetimeIndex(tdf['time'])
Das funktioniert aber ist die richtige Sache nicht zu tun. Tatsächlich sind die Messungen nicht gleichmäßig zeitbeabstandeten und wenn ich nur die time_points Pandas Dataframe als Index meines Rahmen erklären, ich erhalte eine Fehlermeldung:
rdf.index = pd.DatetimeIndex(tdf['time'])
decomp = sm.tsa.seasonal_decompose(rdf)
elif freq is None:
raise ValueError("You must specify a freq or x must be a pandas object with a timeseries index")
ValueError: You must specify a freq or x must be a pandas object with a timeseries index
Ich weiß nicht, wie dies zu korrigieren. Es scheint auch, dass Pandas TimeSeries
veraltet sind.
Ich versuchte dies:
rdf = pd.Series({'light':light_points[:]})
rdf.index = pd.DatetimeIndex(tdf['time'])
Aber es gibt mir eine Länge Mismatch:
ValueError: Length mismatch: Expected axis has 1 elements, new values have 122 elements
Trotzdem verstehe ich nicht, wo es aus, als rdf kommt [ 'Licht'] und TDF [ ‚Zeit‘] sind gleich lang ...
Schließlich versuchte ich durch meine rdf als Pandas Serie definieren:
rdf = pd.Series(light_points[:],index=pd.DatetimeIndex(time_points[:]))
Und ich bekomme diese:
ValueError: You must specify a freq or x must be a pandas object with a timeseries index
Dann habe ich versucht, den Index stattdessen ersetzt durch
pd.TimeSeries(time_points[:])
Und es gibt mir einen Fehler auf der seasonal_decompose Methode Linie:
AttributeError: 'Float64Index' object has no attribute 'inferred_freq'
Wie kann ich mit ungleichmäßigen Daten arbeiten? Ich habe überlegt, ein ungefähr gleichmäßiges Zeit-Array zu erstellen, indem ich viele unbekannte Werte zwischen den vorhandenen Werten hinzufüge und diese Punkte durch Interpolation "evaluiere", aber ich denke, es könnte eine sauberere und einfachere Lösung geben.
Sie die Änderung erhöhen, um eine gute Antwort zu erhalten, wenn Du postest ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve). –