2012-10-04 10 views
16

Ich arbeite an Zeitreihen in Python. Die Bibliotheken, die ich nützlich und vielversprechend fand, sindPaket für Zeitreihenanalyse in Python

  • Pandas;
  • statsmodel (für ARIMA);
  • einfache exponentielle Glättung wird von Pandas zur Verfügung gestellt.

auch für die Visualisierung: matplotlib

Kennt jemand eine Bibliothek für die exponentielle Glättung?

+1

bezogen werden: [berechnen exponentiell gleitenden Durchschnitt in Python] (http://stackoverflow.com/questions/488670/calculate-exponential-gleitenden Durchschnitt-in-Python) – jfs

Antwort

22

Pandas Moment exponentiell gewichtet hat bewegliche Funktionen

http://pandas.pydata.org/pandas-docs/dev/computation.html?highlight=exponential#exponentially-weighted-moment-functions

By the way, sollte es keine Funktionalität Überbleibsel sein im scikits.timeseries-Paket, das nicht auch in Pandas ist.

bearbeiten: Da dies immer noch eine beliebte Frage ist, gibt es jetzt eine unfertige Pull-Anforderung mehr hinzuzufügen vollständig exponentielle Glättung vorge here

+1

vielen Dank für das Update und für die gute Arbeit. – foc

8

Irgendwie sind einige Fragen zusammengeführt oder gelöscht worden, also werde ich meine Antwort hier posten.

Exp-Glättung in Python nativ.

''' 
simple exponential smoothing 
go back to last N values 
y_t = a * y_t + a * (1-a)^1 * y_t-1 + a * (1-a)^2 * y_t-2 + ... + a*(1-a)^n * y_t-n 
''' 
from random import random,randint 

def gen_weights(a,N): 
    ws = list() 
    for i in range(N): 
     w = a * ((1-a)**i) 
     ws.append(w) 
    return ws 

def weighted(data,ws): 
    wt = list() 
    for i,x in enumerate(data): 
     wt.append(x*ws[i]) 
    return wt 

N = 10 
a = 0.5 
ws = gen_weights(a,N) 
data = [randint(0,100) for r in xrange(N)] 
weighted_data = weighted(data,ws) 
print 'data: ',data 
print 'weights: ',ws 
print 'weighted data: ',weighted_data 
print 'weighted avg: ',sum(weighted_data)