Параметр freq не представлен в функции Season_decompose

допустим, у нас есть следующий код:

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

Кажется, у вас есть два вопроса, один из них - почему вы получаете сообщение об ошибке о частоте, возможно, частота является аргументом extrapolate_trendint, а не именем аргумента. statsmodels.org/dev/generated/…

MatthewMartin 15.05.2022 22:56

я видел этот аргумент на некоторых сайтах, и поэтому мне было любопытно, был ли этот аргумент удален

dato datuashvili 15.05.2022 23:04
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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 дней

dato datuashvili 16.05.2022 00:07

Вы можете заполнить пробелы, чтобы обеспечить равномерный интервал. Принятие периода 36 означает, что вы ожидаете, что значения, отстоящие друг от друга на 36 шагов, будут несколько похожими. Может быть, попробовать 20 в месяц.

Tim 16.05.2022 00:28

Другие вопросы по теме