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)。
让我们假设我们有以下代码:
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)。