时间序列分解

问题描述 投票:0回答:1

我有一个时间序列想要分解。 数据集(火车 - 数据框)示例(股票价格):

        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 必须是具有 periodIndex 或 DatetimeIndex 且频率未设置为 None 的 pandas 对象

当我没有设置频率时。

可能是因为在没有数据点(股价)的情况下,数据存在间隙(周末)。我应该将其转换为每周格式吗?但如果存在差距(例如,如果我删除了异常值),我该如何做到这一点?

这一定是一些微不足道的事情,但我看不到解决方案。

非常感谢您的帮助!

python pandas time-series decomposition
1个回答
0
投票

进行季节性分解时需要指定时段:

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()

© www.soinside.com 2019 - 2024. All rights reserved.