使用季节性分解()时如何计算频率(freq)

Ana*_*t17 6 time-series python-3.x pandas time-frequency statsmodels

我试图将季节性、趋势和残差与时间序列“XYZ.csv”(收集了 2 年以上的销售数据)分开。

[XYZ.csv 包含 2 列 - 日期和销售额。日期已被设置为代码中的索引。]

import pandas as pd

import statsmodels.api as sm

df = pd.read_csv('XYZ.csv')

df.date=pd.to_datetime(df.date)

df.set_index('date',inplace=True)

res = sm.tsa.seasonal_decompose
(df.colA.interpolate(),freq=?, model='additive')

resplot= res.plot()

observed = res.observed

seasonality = res.seasonal
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常。唯一的麻烦是理解如何计算这个时间序列的频率?如果有任何预定义的方式可以做到这一点。感谢您提前提供任何帮助/建议!

dok*_*who 0

一种非常强力的方法包括通过探索所有潜在周期来搜索最小化残差的周期:

res_vs_lag = {}
for p in range(1, 250):
    res = sm.tsa.seasonal_decompose(df.colA, period=p, model='additive')
    res_vs_lag[p] = res.resid.abs().sum()
Run Code Online (Sandbox Code Playgroud)

然后您可以绘制结果序列:

pd.Series(res_vs_lag).plot()
Run Code Online (Sandbox Code Playgroud)

一种优雅的方法依赖于自相关或谱分析(https://www.statsmodels.org/dev/ generated/ statsmodels.tsa.stattools.pacf.html)。