【发布时间】:2021-12-11 19:49:32
【问题描述】:
我正在尝试对财务数据执行时间序列数据分析,并且我想执行季节性分解
from statsmodels.tsa.seasonal import seasonal_decompose
import pandas as pd
import datetime
import pandas_datareader as data
df = data.get_data_yahoo('UGA', start=everSince, end=today)
df_close = df[['Close']]
result = seasonal_decompose(df_close, model='multiplicative')
我这样得到的错误
您必须指定一个句点,或者 x 必须是带有 PeriodIndex 或 DatetimeIndex 且频率未设置为 None 的 pandas 对象
我知道我可以将频率指定为df.asfreq(),但财务数据没有每日频率(即我没有每一天的条目),因为它们是从周一到周五,有时还有节假日。
如何将seasonal_decompose 应用于此类数据?我也试过df_close.index = df_close.index.to_period('B'),但没用。
df 的一个例子是:
Close
Date
2008-02-28 49.790001
2008-02-29 49.610001
2008-03-03 49.810001
2008-03-04 47.450001
2008-03-05 49.049999
2008-03-06 49.369999
2008-03-07 50.230000
2008-03-10 50.610001
2008-03-11 50.700001
2008-03-12 50.919998
2008-03-13 49.939999
2008-03-14 50.049999
2008-03-17 46.869999
2008-03-18 48.980000
2008-03-19 47.540001
2008-03-20 48.070000
2008-03-24 48.459999
2008-03-25 49.490002
2008-03-26 50.320000
2008-03-27 50.110001
2008-03-28 50.009998
2008-03-31 48.509998
2008-04-01 48.840000
2008-04-02 51.130001
2008-04-03 50.419998
2008-04-04 50.900002
2008-04-07 51.430000
2008-04-08 50.959999
2008-04-09 51.290001
2008-04-10 51.540001
其中索引的类型为pandas.core.indexes.datetimes.DatetimeIndex。
【问题讨论】:
-
你能提供示例输入数据吗?
-
@luigigi 我做了:它们是用
data.get_data_yahoo('UGA', start=everSince, end=today)作为熊猫数据框下载的。 -
@luigigi 还是您要的是硬编码的 df?
-
我看到了问题,但我认为您必须操纵数据,使其符合seasonal_decompose 的要求。例如,您可以重新采样数据并通过插值替换 nan 值:
result = seasonal_decompose(df_close.resample('1D').asfreq().interpolate(), model='multiplicative') -
我想保留每天的时间范围。我希望有一些方法可以管理此类财务数据,但到目前为止,您的方法是最好的方法。
标签: python time-series statsmodels