tsmoothie:以向量化方式进行时序平滑和异常检测的Python库
2020-11-09
点击量:次 tsmoothie
一个用于以向量化方式进行时间序列平滑和离群值检测的python库。
总览
tsmoothie以快速有效的方式计算单个或多个时间序列的平滑度。
可用的平滑技术是:
1)指数平滑
2)具有各种窗口类型(常量,汉宁,汉明,巴特利特,布莱克曼)的卷积平滑
3)多项式平滑
4)各种样条平滑(线性,三次,自然三次)
5)高斯平滑
6)Binner平滑
7)低价
8)各种季节性分解平滑(卷积,最低,自然三次样条)
9)带有可自定义组件(水平,趋势,季节性,长期季节性)的卡尔曼平滑
tsmoothie提供了平滑处理结果的间隔计算。这对于识别时间序列中的异常值和异常可能很有用。
可用的间隔类型为:
1)sigma间隔
2)置信区间
3)预测间隔
4)卡尔曼区间
采用这种类型的间隔取决于所使用的平滑方法。
tsmoothie还可以执行滑动平滑方法。可以将时间序列分成相等大小的片段,并分别进行平滑处理。与往常一样,此功能通过WindowWrapper类以矢量化方式实现。
点安装tsmoothie
该模块仅取决于NumPy,SciPy和simdkalman。支持Python 3.6或更高版本。
用法
下面是tsmoothie如何工作的几个示例。笔记本文件夹中提供了完整的示例。
#导入库
将 numpy 导入为 np
import matplotlib。pyplot 如 PLT
从 tsmoothie。utils_func 进口 sim_randomwalk
从 tsmoothie。进口顺畅 LowessSmoother
#产生3次长度为200
np的随机游走。随机的。种子(123)
数据 = sim_randomwalk(n_series = 3,时间步长= 200,
process_noise = 10,measure_noise = 30)
#操作平滑
平滑 = LowessSmoother(smooth_fraction = 0.1,迭代= 1)
更光滑。顺利(数据)
#生成
低间隔,向上 = 更平滑。get_intervals('prediction_interval')
#绘制间隔为
plt的平滑时间序列。图(figsize =(18,5))
对于 我 在 范围(3):
PLT。副区(1,3,我+ 1)
PLT。积(平滑。smooth_data [我],线宽= 3,颜色= '蓝色')
PLT。绘制(更平滑的数据[ i ],' . k ')
plt。标题(f“时间序列{ i + 1 } ”); PLT。xlabel('时间')
PLT。fill_between(范围(len个(更平滑。数据[我])),低[我],向上[我],阿尔法= 0.3)
#导入库
将 numpy 导入为 np
import matplotlib。pyplot 如 PLT
从 tsmoothie。utils_func 进口 sim_seasonal_data
从 tsmoothie。导入更顺畅 DecomposeSmoother
#生成3个长度为300
np的周期性时间序列。随机的。种子(123)
数据 = sim_seasonal_data(n_series = 3,时间步长= 300,
频率= 24,measure_noise = 30)
#
更平滑地 进行平滑操作= DecomposeSmoother(smooth_type = 'lowess',周期= 24,
smooth_fraction = 0.3)
更平滑。顺利(数据)
#生成
低间隔,向上 = 更平滑。get_intervals('sigma_interval')
#绘制间隔为
plt的平滑时间序列。图(figsize =(18,5))
对于 我 在 范围(3):
PLT。副区(1,3,我+ 1)
PLT。积(平滑。smooth_data [我],线宽= 3,颜色= '蓝色')
PLT。绘制(更平滑的数据[ i ],' . k ')
plt。标题(f“时间序列{ i + 1 } ”); PLT。xlabel('时间')
PLT。fill_between(范围(len个(更平滑。数据[我])),低[我],向上[我],阿尔法= 0.3)