我正在尝试对金融数据执行时间序列数据分析,并且想要进行季节性分解。
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且freq未设置为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
。
result = seasonal_decompose(df_close.resample('1D').asfreq().interpolate(), model='multiplicative')
。 - luigigi