Разложение временных рядов

У меня есть временной ряд, который я хочу разложить. Пример набора данных (поезд - фрейм данных) (цена акций):

        Date    Close
7389    2014-12-24  104.589996
7390    2014-12-26  105.059998
7391    2014-12-29  105.330002
7392    2014-12-30  105.360001
7393    2014-12-31  104.5700

Вот мой код:

train_dec = copy.deepcopy(train)
train_dec.index = pd.to_datetime(train_dec['Date'])
train_dec.index.freq = 'D'

# Transform DataFrame into a Series
train_series = train_dec['Close']

train_decomposition = seasonal_decompose(train_series, model='additive')

train_trend = train_decomposition.trend
train_seasonal = train_decomposition.seasonal
train_residual = train_decomposition.resid

Пробовал без конвертации в Серии и с ней. Попробовал установить частоту «D».

Я продолжаю получать такие ошибки, как:

ValueError: предполагаемая частота. Ни одно из переданных значений не соответствует переданной частоте D.

или

ValueError: вы должны указать период или x должен быть объектом pandas с PeriodIndex или DatetimeIndex с частотой, для которой не установлено значение None.

когда я не устанавливаю частоту.

Возможно, это связано с тем, что в данных есть пробелы (выходные), когда нет точки данных (цены акций). Должен ли я преобразовать его в еженедельный формат? Но как мне это сделать, если есть пробелы (например, если я удалил выбросы)?

Это должно быть что-то тривиальное, но я не вижу решения.

Ваша помощь очень ценится!

Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
111
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При выполнении сезонной декомпозиции необходимо указать период:

import pandas as pd
import numpy as np
from statsmodels.tsa.seasonal import seasonal_decompose
import matplotlib.pyplot as plt
import copy

data = {
    'Date': ['2014-12-24', '2014-12-26', '2014-12-29', '2014-12-30', '2014-12-31'],
    'Close': [104.589996, 105.059998, 105.330002, 105.360001, 104.5700]
}
train = pd.DataFrame(data)

train['Date'] = pd.to_datetime(train['Date'])
train.set_index('Date', inplace=True)

idx = pd.date_range(start=train.index.min(), end=train.index.max(), freq='D')
train = train.reindex(idx)

train['Close'] = train['Close'].ffill()

decomposition = seasonal_decompose(train['Close'], model='additive', period=3)  
fig = decomposition.plot()
plt.show()

поэтому параметр «период» равен 1 (ежегодно), 4 (ежеквартально)… Я предполагаю, что 12 — ежемесячно, 52 — еженедельно и 365 — ежедневно. Правильный? Тогда что делать с ежедневными данными с пробелами? Использовать значение 52 для еженедельно?

Toly 21.04.2024 01:32

Да, тогда вам нужно использовать 52 еженедельно.

Serge de Gosson de Varennes 21.04.2024 09:05

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