Python中时间序列的季节性趋势-黄土方法

时间:2018-06-26 17:53:02

标签: python time-series loess stl-decomposition

有人知道是否存在基于Python的过程来利用STL(季节性趋势黄土)方法分解时间序列?

我看到了对包装程序的引用,以调用stl函数 在R中,但从环境设置的角度来看(Python和R在一起),我发现它不稳定且麻烦。此外,link已有4岁了。

有人可以指出一些较新的内容(例如sklearnspicy等)吗?

4 个答案:

答案 0 :(得分:3)

我还没有尝试过STLDecompose,但是我对此进行了窥视,我相信它使用的是通用的黄土平滑剂。这很难做到正确,而且效率低下。请参见已失效的STL-Java repo

pyloess package为原始R版本使用的相同基础Fortran提供python包装。您绝对不需要通过与R的桥接即可获得相同的功能!这个软件包没有得到积极的维护,我有时很难在某些平台上构建它(因此这里是fork)。但是,一旦构建完成,它确实可以工作,并且是您可能会找到的最快的一种。我很想修改它以使其包含一些新功能,但是无法带我去修改Fortran(它是经过预处理的RATFOR-非常类似于Fortran的汇编语言,在任何地方都找不到RATFOR预处理器)。

我写了一个本机Java实现stl-decomp-4j,可以使用pyjnius package从python调用它。它最初是原始Fortran的直接移植,然后重构为更现代的编程风格。然后,我对其进行了扩展,以允许二次黄土插值并支持季节性分量的分解后平滑,这些功能在原始论文中已有描述,但并未纳入Fortran / R实现中。 (它们显然是在S-plus实现中,但我们很少有人可以使用它。)使其有效的关键在于,当点等距且完成逐点平滑时,黄土平滑化得以简化只需修改用于进行插值的权重即可。

stl-decomp-4j示例包括一个Jupyter笔记本,演示了如何从python调用此程序包。我可能应该将其正式化为python包,但还没有时间。非常愿意接受拉取请求。 ;-)

我很想看到这种方法直接连接到python / numpy。我的“如果我有空的话”清单上的另一件事。

答案 1 :(得分:2)

确实有:

https://github.com/jrmontag/STLDecompose

在回购中,您会找到一个用于包装使用的jupyter笔记本。

答案 2 :(得分:1)

RSTL是R的STL的Python端口:https://github.com/ericist/rstl。根据作者的说法,它工作得很好,只是它比R的STL慢3到5倍。

如果只想获得最低趋势线,则可以使用Statsmodels的最低函数 https://www.statsmodels.org/dev/generated/statsmodels.nonparametric.smoothers_lowess.lowess.html

答案 3 :(得分:0)

Here,您可以从statsmodels中找到使用LOESS(STL)进行季节性趋势分解的示例。

基本上,它是这样工作的:

from statsmodels.tsa.seasonal import STL
stl = STL(TimeSeries, seasonal=13)
res = stl.fit()
fig = res.plot()

STLDecomposition