допустим, у нас есть следующий код:
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
также он возвращает следующую ошибку:
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'
вместо этого я знаю, что есть период ключевого слова, они одинаковы? обычно мы знаем, что период равен 1/частоте, но в этом случае как мне определить период? или как я могу создать индекс частоты? пожалуйста, помогите мне
я видел этот аргумент на некоторых сайтах, и поэтому мне было любопытно, был ли этот аргумент удален






Аргумент периода в сезонный_разложить равен периодичность, т.е. через какое время все начинает повторяться.
Например, данные временного ряда с частотой 1 час будут иметь период 24. Если частота равна 3 часам, период будет 8 = (24/3).
В вашем случае похоже периодичность рабочих дней (пн-пт), что подразумевает период 5.
Да, кажется, что и выходные, и праздничные дни были удалены. Но метод asfreq можно использовать для заполнения пробелов вперед/назад.
Указание периода 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
Я бы рекомендовал указать аргумент period непосредственно в seasonal_decompose (5 в данном случае).
тоже кажется нерегулярным период, дни не регулярно, если я беру большой период? например 36 дней
Вы можете заполнить пробелы, чтобы обеспечить равномерный интервал. Принятие периода 36 означает, что вы ожидаете, что значения, отстоящие друг от друга на 36 шагов, будут несколько похожими. Может быть, попробовать 20 в месяц.
Кажется, у вас есть два вопроса, один из них - почему вы получаете сообщение об ошибке о частоте, возможно, частота является аргументом extrapolate_trendint, а не именем аргумента. statsmodels.org/dev/generated/…