代码之家  ›  专栏  ›  技术社区  ›  Thomas Browne

python和scipy的季节调整

  •  9
  • Thomas Browne  · 技术社区  · 15 年前

    我希望使用python来季节性地调整每月数据。从这些系列中可以看到: www.emconfidential.com ,数据中有较高的季节性成分。我想对此进行调整,以便更好地衡量系列趋势是上升还是下降。有人知道如何使用scipy或其他python库很容易做到这一点吗?

    5 回复  |  直到 7 年前
        1
  •  3
  •   DisplacedAussie    15 年前

    没有神奇的python库可以为您进行季节性调整。做这种事情的应用程序往往是 rather large .

    你需要计算出数学题 yourself 然后用scipy来计算剩下的。

        2
  •  7
  •   user2113095    10 年前

    StatsModels可以做到这一点。它们有一个基本的季节性分解,也有一个针对普查x13调整的包装器。您还可以使用RPY2访问R的一些优秀SA库。以下是StatsModels季节性分解:

    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

        3
  •  1
  •   splinter    8 年前

    现在有一个包裹,似乎正是你要找的!退房 seasonal 包裹,这是 link . 我个人觉得它非常有用,不知道别人怎么想。

        4
  •  1
  •   binjip    7 年前

    我建议由Facebook的数据科学团队开发。它有python+r API,用于时间序列预测,尽管您可以使用它将序列分解为其组件(趋势与季节性)。您可以轻松地调整和可视化分解:

    从FBProphet导入Prophet 将numpy导入为np 将熊猫作为PD导入 创建系列 np.随机种子(0) x=np.平均值(0,10,.285) y_周期=np.sin(x*np.pi) y_random=np.random.normal(尺寸=长度(x))。 y_趋势=x/10。 df=pd.dataframe('ds':pd.date_range('01-01-2017',periods=len(x)), “Y”:Y_周期) df.head()必须是具有列“ds”和“y”的数据帧 df.set撏index('ds').plot(style=-*') < /代码>

    估计模型 M=先知() M.FIT(DF); 预测=M.预测(df) M.标绘组件(预测); < /代码>

    Facebook的CE团队。它有python+r API,用于时间序列预测,尽管您可以使用它将序列分解为其组件(趋势与季节性)。您可以轻松地调整和可视化分解:

    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

        5
  •  0
  •   ridecar2    15 年前

    在编程方面不确定,但我会认真考虑移动平均值来解决这个问题。