2010-01-14 17 views
7

Sto cercando di aggiustare stagionalmente i dati mensili, usando Python. Come puoi vedere da queste serie: www.emconfidential.com, c'è un'alta componente stagionale nei dati. Vorrei regolare per questo in modo da poter valutare meglio se la tendenza della serie è in aumento o in calo. Qualcuno sa come farlo facilmente usando scipy o altre librerie Python?Adattamento stagionale in Python e Scipy

risposta

3

Non esiste una libreria Python magica che eseguirà regolazioni stagionali per te. Le applicazioni che fanno questo genere di cose tendono ad essere rather large.

Avrai bisogno di risolvere i calcoli yourself e quindi utilizzare scipy per calcolare il resto per te.

+0

Grazie, penso che tu abbia ragione che lo programmerò da solo. Il tuo PDF è una buona fonte. Tuttavia non è del tutto vero che non ci siano librerie python che facciano questo: http://hydroclimpy.sourceforge.net/generated/scikits.hydroclimpy.core.ts_addons.deseasonalize.html#scikits.hydroclimpy.core.ts_addons.deseasonalize Problema è sopra non è l'algoritmo che voglio. Sto cercando un'implementazione Arima X12. –

+2

Sfortunatamente, il link pdf sembra essere rotto, o il file è stato rimosso. Come ottenerne una copia comunque? – FaCoffee

0

Non sono sicuro sull'aspetto della programmazione, ma prenderei seriamente in considerazione le medie mobili per risolvere questo problema.

+2

che funziona per una media mobile 12 periodo, l'unico problema è che quello che se voglio estrapolare dal ultimi 3 o 6 mesi di dati, per iniziare a farsi un'idea della tendenza in via di sviluppo? Quindi ho bisogno di un adeguato aggiustamento stagionale. –

3

Statsmodels può fare questo. Hanno una scomposizione stagionale di base e anche un involucro per la regolazione del Census X13. Puoi anche usare rpy2 per accedere ad alcune delle eccellenti librerie di R di SA. Ecco statsmodels decomposizione stagionale:

import pandas as pd 
import statsmodels.api as sm 
import matplotlib.pyplot as plt 
pd.options.display.mpl_style = 'default' 
%matplotlib inline 

dta = sm.datasets.co2.load_pandas().data.resample("M").fillna(method="ffill") 

res = sm.tsa.seasonal_decompose(dta) 

fig = res.plot() 
fig.set_size_inches(10, 5) 
plt.tight_layout() 

http://statsmodels.sourceforge.net/0.6.0/release/version0.6.html

1

V'è ora un pacchetto che sembra essere esattamente quello che stai cercando! Controlla il pacchetto seasonal, ecco lo link. L'ho trovato personalmente molto utile, chiedendomi cosa pensano gli altri.

1

Vorrei suggerire Prophet sviluppato dal team di scienza dei dati su Facebook. Ha API Python + R e viene utilizzato per la previsione delle serie temporali, sebbene sia possibile utilizzarlo solo per scomporre la serie nei suoi componenti (tendenza vs stagionalità). È possibile regolare facilmente e visualizzare la decomposizione:

from fbprophet import Prophet 
import numpy as np 
import pandas as pd 

# Create series 
np.random.seed(0) 
x = np.arange(0, 10, .285) 
y_periodic = np.sin(x*np.pi) 
y_random = np.random.normal(size=len(x)) 
y_trend = x/10. 
df = pd.DataFrame({'ds': pd.date_range('01-01-2017', periods=len(x)), 
        'y': y_periodic}) 
df.head() # has to be a DataFrame with columns "ds" and "y" 
df.set_index('ds').plot(style='-*') 

Series with noise

# Estimate the model 
m = Prophet() 
m.fit(df); 
forecast = m.predict(df) 
m.plot_components(forecast); 

Trend and seasonality decomposition

Problemi correlati