Berechnen Sie EWMA über spärliche / unregelmäßige TimeSeries in Pandas

Angesichts der folgenden hochfrequenten, aber spärlichen Zeitreihen:

#Sparse Timeseries dti1 = pd.date_range(start=datetime(2015,8,1,9,0,0),periods=10,freq='ms') dti2 = pd.date_range(start=datetime(2015,8,1,9,0,10),periods=10,freq='ms') dti = dti1 + dti2 ts = pd.Series(index=dti, data=range(20)) 

Ich kann einen exponentiell gewichteten gleitenden Durchschnitt mit einer Halbwertszeit von 5ms mit einer Pandas-Funktion wie folgt berechnen:

 ema = pd.ewma(ts, halflife=5, freq='ms') 

Doch unter der Haube, die Funktion ist die Wiederholung meiner Zeiten mit einem Intervall von 1 ms (das ist die "Freq", die ich geliefert). Dadurch werden Tausende von zusätzlichen Datenpunkten in die Ausgabe aufgenommen.

 In [118]: len(ts) Out[118]: 20 In [119]: len(ema) Out[119]: 10010 

Das ist nicht skalierbar, da meine echten Timeseries Hunderte von Tausenden von Hochfrequenz-Beobachtungen enthält, die Minuten oder Stunden auseinander liegen.

Gibt es eine Pandas / numpy Art und Weise, eine EMA für eine spärliche Zeitschriften ohne Neuabtastung zu berechnen? Etwas ähnliches: http://oroboro.com/irregular-ema/

Oder muss ich mein eigenes schreiben Vielen Dank!

One Solution collect form web for “Berechnen Sie EWMA über spärliche / unregelmäßige TimeSeries in Pandas”

Sie können reindex , um das ewma Ergebnis mit Ihrer Originalreihe auszurichten.

 pd.ewma(ts, halflife=5, freq='ms').reindex(ts.index) 2015-08-01 09:00:00.000 0.0000 2015-08-01 09:00:00.001 0.5346 2015-08-01 09:00:00.002 1.0921 2015-08-01 09:00:00.003 1.6724 2015-08-01 09:00:00.004 2.2750 2015-08-01 09:00:00.005 2.8996 2015-08-01 09:00:00.006 3.5458 2015-08-01 09:00:00.007 4.2131 2015-08-01 09:00:00.008 4.9008 2015-08-01 09:00:00.009 5.6083 2015-08-01 09:00:10.000 10.0000 2015-08-01 09:00:10.001 10.5346 2015-08-01 09:00:10.002 11.0921 2015-08-01 09:00:10.003 11.6724 2015-08-01 09:00:10.004 12.2750 2015-08-01 09:00:10.005 12.8996 2015-08-01 09:00:10.006 13.5458 2015-08-01 09:00:10.007 14.2131 2015-08-01 09:00:10.008 14.9008 2015-08-01 09:00:10.009 15.6083 dtype: float64 
  • Wie man den Bandpass-Filter mit Scipy.signal.butter einsetzt
  • Digitieren eines analogen Signals
  • Scipy signal find_peaks_cwt nicht finden die Spitzen genau?
  • Lesen und schreiben Sie Stereo. WAV-Datei mit Python + Metadaten
  • Wie bekomme ich Tonhülle mit Python?
  • Schätzung kleiner Zeitverschiebung zwischen zwei Zeitreihen
  • Wie korrekt man zwei Zeitreihen mit Lücken und unterschiedlichen Zeitbasen?
  • Wie man einen Filter auf ein Signal in Python anwendet
  • Wiederherstellung von Zeitreihendaten mit FFT-Ergebnissen ohne Verwendung von ifft
  • FFT-basierte 2D-Faltung und Korrelation in Python
  • Autokorrelation mit Python abschätzen
  • Python ist die beste Programmiersprache der Welt.