首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分解趋势、季节和剩余时间序列元素

分解趋势、季节和剩余时间序列元素
EN

Stack Overflow用户
提问于 2015-12-24 19:45:33
回答 5查看 58.9K关注 0票数 20

我有一个带有几个时间序列的DataFrame

代码语言:javascript
复制
         divida    movav12       var  varmovav12
Date                                            
2004-01       0        NaN       NaN         NaN
2004-02       0        NaN       NaN         NaN
2004-03       0        NaN       NaN         NaN
2004-04      34        NaN       inf         NaN
2004-05      30        NaN -0.117647         NaN
2004-06      44        NaN  0.466667         NaN
2004-07      35        NaN -0.204545         NaN
2004-08      31        NaN -0.114286         NaN
2004-09      30        NaN -0.032258         NaN
2004-10      24        NaN -0.200000         NaN
2004-11      41        NaN  0.708333         NaN
2004-12      29  24.833333 -0.292683         NaN
2005-01      31  27.416667  0.068966    0.104027
2005-02      28  29.750000 -0.096774    0.085106
2005-03      27  32.000000 -0.035714    0.075630
2005-04      30  31.666667  0.111111   -0.010417
2005-05      31  31.750000  0.033333    0.002632
2005-06      39  31.333333  0.258065   -0.013123
2005-07      36  31.416667 -0.076923    0.002660

我想对第一个时间序列divida进行分解,以便将其趋势与其季节性和残余成分区分开来。

我找到了一个答案here,并尝试使用以下代码:

代码语言:javascript
复制
import statsmodels.api as sm

s=sm.tsa.seasonal_decompose(divida.divida)

然而,我一直收到这样的错误:

代码语言:javascript
复制
Traceback (most recent call last):
File "/Users/Pred_UnBR_Mod2.py", line 78, in <module> s=sm.tsa.seasonal_decompose(divida.divida)
File "/Library/Python/2.7/site-packages/statsmodels/tsa/seasonal.py", line 58, in seasonal_decompose _pandas_wrapper, pfreq = _maybe_get_pandas_wrapper_freq(x)
File "/Library/Python/2.7/site-packages/statsmodels/tsa/filters/_utils.py", line 46, in _maybe_get_pandas_wrapper_freq
freq = index.inferred_freq
AttributeError: 'Index' object has no attribute 'inferred_freq'

我该怎么做?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-12-24 21:55:37

当您将index转换为DateTimeIndex时工作正常。

代码语言:javascript
复制
df.reset_index(inplace=True)
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date')
s=sm.tsa.seasonal_decompose(df.divida)

<statsmodels.tsa.seasonal.DecomposeResult object at 0x110ec3710>

通过以下方式访问组件:

代码语言:javascript
复制
s.resid
s.seasonal
s.trend
票数 38
EN

Stack Overflow用户

发布于 2018-12-13 09:34:33

Statsmodel只在提供频率的情况下才会分解该系列。通常所有的时间序列指数都会包含频率,如:按日计算,商业天数,每周,所以它显示错误。您可以通过两种方法删除此错误:

  1. 斯特凡所做的是,他把指数列给熊猫DateTime函数。它使用内部函数infer_freq来查找频率,并随频率返回索引。
  2. 否则,可以将频率设置为索引列为df.index.asfreq(freq='m')。在这里,m表示月份。您可以设置频率,如果您有领域知识或通过d
票数 2
EN

Stack Overflow用户

发布于 2019-02-16 07:19:16

让它变得简单:

遵循三个步骤:

  1. 如果未完成,则在yyyy-mm-dddd-mm-yyyy(使用excel)中创建列。
  2. 然后使用熊猫将其转换为日期格式,如:df['Date'] = pd.to_datetime(df['Date'])
  3. 使用以下方法分解它:
代码语言:javascript
复制
from statsmodels.tsa.seasonal import seasonal_decompose
decomposition=seasonal_decompose(ts_log)

最后:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34457281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档