2010-01-14 29 views
7

Estoy buscando ajustar estacionalmente los datos mensuales, usando Python. Como puede ver en estas series: www.emconfidential.com, hay un alto componente estacional en los datos. Me gustaría ajustar esto para poder evaluar mejor si la tendencia de la serie está subiendo o bajando. ¿Alguien sabe cómo hacer esto fácilmente usando Scipy u otra biblioteca de Python?Ajuste estacional en Python y Scipy

Respuesta

3

No hay una biblioteca mágica de Python que le haga ajustes estacionales. Las aplicaciones que hacen este tipo de cosas tienden a ser rather large.

Tendrá que calcular las matemáticas yourself y luego usar scipy para calcular el resto para usted.

+0

Gracias, creo que tienes razón de que solo lo programaré yo mismo. Tu PDF es una buena fuente. Sin embargo, no es del todo cierto que no haya bibliotecas de Python que hagan esto: http://hydroclimpy.sourceforge.net/generated/scikits.hydroclimpy.core.ts_addons.deseasonalize.html#scikits.hydroclimpy.core.ts_addons.deseasonalize Problema está arriba no es el algoritmo que quiero. Estoy buscando una implementación X12 Arima. –

+2

Desafortunadamente, el enlace de PDF parece estar roto, o el archivo ha sido eliminado. ¿Cómo obtener una copia de todos modos? – FaCoffee

0

No estoy seguro del aspecto de programación de esto, pero consideraría seriamente mover promedios para resolver esto.

+2

que trabaja para una media móvil de 12 periodo, el único problema es que lo que si quiero extrapolar a partir de la últimos 3 o 6 meses de datos, para comenzar a tener una idea de la tendencia en desarrollo? Entonces necesito un ajuste estacional apropiado. –

3

Statsmodels puede hacer esto. Tienen una descomposición estacional básica y también una envoltura para el ajuste del Censo X13. También podría usar rpy2 para acceder a algunas de las excelentes bibliotecas SA de R. Aquí es statsmodels descomposición estacional:

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

Ahora hay un paquete que parece ser exactamente lo que usted está buscando! Consulte el paquete seasonal, aquí está el link. Personalmente, me pareció muy útil, preguntándome qué piensan los demás.

1

Sugeriría Prophet desarrollado por el equipo de ciencia de datos en Facebook. Tiene Python + R API y se usa para la predicción de series de tiempo, aunque puedes usarlo solo para descomponer tus series en sus componentes (tendencia frente a estacionalidad). Usted puede ajustar fácilmente y visualizar la descomposición:

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

Cuestiones relacionadas