有没有基于Python的程序可以使用STL(季节性-趋势-Loess)方法分解时间序列?
我看到了一个包装程序调用R中的stl
函数的参考资料,但从环境设置角度来看,我发现这种方法不稳定且繁琐(需要同时安装Python和R)。此外,该链接已经过时了4年。
有人能指出一些更近期的方法吗?例如sklearn
、spicy
等。
有没有基于Python的程序可以使用STL(季节性-趋势-Loess)方法分解时间序列?
我看到了一个包装程序调用R中的stl
函数的参考资料,但从环境设置角度来看,我发现这种方法不稳定且繁琐(需要同时安装Python和R)。此外,该链接已经过时了4年。
有人能指出一些更近期的方法吗?例如sklearn
、spicy
等。
STLDecompose
,但我看了一眼它,我相信它使用了通用的loess平滑器。这很难做到正确,并且往往效率低下。请参阅已废弃的STL-Java repo。
pyloess
包提供了一个Python包装器,用于与原始R版本使用相同的基础Fortran交互。你绝对不需要通过桥接到R来获得相同的功能!该软件包目前没有得到积极维护,我有时在某些平台上遇到构建问题(因此在此处进行fork)。但是,一旦构建完成,它确实可以工作,并且是您可能找到的最快的软件包。我曾经想过修改它以包括一些新功能,但是无法使自己修改Fortran(这是预处理的RATFOR-类似汇编语言的Fortran),我找不到任何RATFOR预处理器。stl-decomp-4j
,可以使用pyjnius
包从Python中调用。这开始是对原始Fortran的直接移植,重构为更现代的编程风格。然后,我扩展了它以允许二次loess插值,并支持季节性分量的后分解平滑,这些功能在原始论文中被描述,但没有放入Fortran / R实现中。 (它们显然在S-plus实现中,但我们很少有机会使用它。)使其高效的关键在于,当点等距时,loess平滑简化,并且通过修改用于插值的权重来执行逐点平滑。
stl-decomp-4j
示例包括一个Jupyter笔记本演示如何从Python调用此软件包。我可能应该将其正式化为Python软件包,但没有时间。非常愿意接受pull请求。 ;-)在这里,您可以找到使用LOESS(STL)进行季节性-趋势分解的示例,它来自于statsmodels
。
基本上,它的工作原理如下:
from statsmodels.tsa.seasonal import STL
stl = STL(TimeSeries, seasonal=13)
res = stl.fit()
fig = res.plot()
stlplus
包可以处理缺失数据,前提是有足够的时间段可用。我想扩展stl-decomp-4j
以实现此功能,但目前还没有时间。我相信这种方法只是依赖于一个事实,即最初可以将数据点分配为0的权重,但我还没有详细了解过。 - sfjac