seasonal_decompose 函数中未出现 freq 参数

freq parameter not presented in seasonal_decompose function

让我们假设我们有以下代码:

import yfinance as yf
import matplotlib.pyplot as plt
data =  yf.download(tickers="FB", start="2016-1-1",end="2022-05-15",progress=False)
data.drop(["Open","Low","Close","Adj Close","Volume"],axis=1,inplace=True)
data.sort_index(inplace=True)
print(data.head())
from statsmodels.tsa.seasonal import  seasonal_decompose
result =seasonal_decompose(data["High"],model='multiplicative',freq=36)
estimated_trend_add = result.trend
estimated_seasonal_add = result.seasonal
estimated_residual_add = result.resid
fig, axes = plt.subplots(4, 1)
fig.set_figheight(10)
fig.set_figwidth(15)
axes[0].plot(data['High'], label='Original')
axes[0].legend(loc='upper left')
axes[1].plot(estimated_trend_add, label='Trend')
axes[1].legend(loc='upper left')
axes[2].plot(estimated_seasonal_add, label='Cyclic')
axes[2].legend(loc='upper left')
axes[3].plot(estimated_residual_add, label='Residuals')
axes[3].legend(loc='upper left')
plt.show()

数据框的结果如下:

                 High
Date                  
2015-12-31  106.169998
2016-01-04  102.239998
2016-01-05  103.709999
2016-01-06  103.769997
2016-01-07  101.430000

也是 returns 以下错误:

Traceback (most recent call last):
  File "C:\Users\User\PycharmProjects\DataScience\facebook_real_prices.py", line 8, in <module>
    result =seasonal_decompose(data["High"],model='multiplicative',freq=36)
TypeError: seasonal_decompose() got an unexpected keyword argument 'freq'

相反,我知道有关键字period,它们是一样的吗?通常我们知道period是1/frequency,但是在这种情况下我应该如何定义period?或者我如何创建频率索引?请帮助我

seasonal_decompose 中的周期参数是周期性,即事情开始重复的时间。

例如,频率为 1 小时的时间序列数据的周期为 24。如果频率为 3 小时,则周期为 8 = (24 / 3)。

在您的情况下,频率似乎是工作日(周一至周五),这意味着周期为 5。

是啊,周末和节假日好像都去掉了。但是asfreq方法可以用来forwad-fill/back-fill空格。 指定一个周期 5 意味着您期望值,例如在星期一有点相似

如果输入数据是具有日期时间索引的 pandas.Series,您可能不需要指定时间段:

data = data.asfreq(pd.offsets.BDay(), method="pad")

但请注意,statsmodels.tsa.tsatools.freq_to_period seasonal_decompose 内部使用的函数忽略了频率的比例,即 3H 和 H 都被视为 H。您可以通过以下方式检查:

from statsmodels.tsa.tsatools import freq_to_period
assert freq_to_period("H") == freq_to_period("3H") == 24

我建议直接在 seasonal_decompose 中指定 period 参数(在本例中为 5)。