python时间序列函数_Python中的时间序列分解函数

本文介绍了如何在Python中利用rpy2库调用R的STL函数,对时间序列数据进行季节性、趋势和不规则成分的分解。提供了一个名为`decompose`的函数示例,该函数接受时间序列、频率和窗口大小等参数,并返回包含各组件的数据框。此外,还展示了如何使用随机生成的时间序列数据进行操作。
摘要由CSDN通过智能技术生成

我已经回答了这个问题here,但是下面是一个关于如何使用rpy2实现这个功能的快速函数。这使您能够对黄土使用R的健壮统计分解,但是在python中!import pandas as pd

from rpy2.robjects import r, pandas2ri

import numpy as np

from rpy2.robjects.packages import importr

def decompose(series, frequency, s_window = 'periodic', log = False, **kwargs):

'''

Decompose a time series into seasonal, trend and irregular components using loess,

acronym STL.

https://www.rdocumentation.org/packages/stats/versions/3.4.3/topics/stl

params:

series: a time series

frequency: the number of observations per “cycle”

(normally a year, but sometimes a week, a day or an hour)

https://robjhyndman.com/hyndsight/seasonal-periods/

s_window: either the character string "periodic" or the span

(in lags) of the loess window for seasonal extraction,

which should be odd and at least 7, according to Cleveland

et al.

log: boolean. take log of series

**kwargs: See other params for stl at

https://www.rdocumentation.org/packages/stats/versions/3.4.3/topics/stl

'''

df = pd.DataFrame()

df['date'] = series.index

if log: series = series.pipe(np.log)

s = [x for x in series.values]

length = len(series)

s = r.ts(s, frequency=frequency)

decomposed = [x for x in r.stl(s, s_window).rx2('time.series')]

df['observed'] = series.values

df['trend'] = decomposed[length:2*length]

df['seasonal'] = decomposed[0:length]

df['residuals'] = decomposed[2*length:3*length]

return df

上面的函数假设序列具有日期时间索引。它返回一个包含各个组件的数据帧,然后您可以使用自己喜爱的图形库绘制这些组件的图形。

可以传递stl seen here的参数,但可以将任何句点更改为下划线,例如,上面函数中的位置参数是súu window,但在上面的链接中是s.window。另外,我在this repository上找到了上面的一些代码。

示例数据

希望下面的工作,老实说,没有尝试过,因为这是一个要求后,我回答了问题很久。import pandas as pd

import numpy as np

obs_per_cycle = 52

observations = obs_per_cycle * 3

data = [v+2*i for i,v in enumerate(np.random.normal(5, 1, observations))]

tidx = pd.date_range('2016-07-01', periods=observations, freq='w')

ts = pd.Series(data=data, index=tidx)

df = decompose(ts, frequency=obs_per_cycle, s_window = 'periodic')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值