在处理数据的时候,我们经常会遇到一些不连续的散乱时间序列数据:有时候,这样散乱的数据不利于我们对数据进行聚类和预测。因此,我们需要对它们进行平滑处理,如下图所示:如果去掉散点和它们的范围区间,平滑后的效果是这样的:这个时序数据看起来是不是舒服很多?此外,使用平滑的时间序列数据进行聚类或预测可能会有惊人的结果,因为它去除了一些偏差值并细化了数据的分布范围。如果我们自己开发这样的平滑工具,会花费很多时间。因为平滑的技巧很多,需要一个一个研究,找到最合适的技巧,然后写代码,这是一个非常耗时的过程。平滑技术包括但不限于:指数平滑各种窗口类型的卷积平滑(常数、Hanning、Hamming、Bartlett、Blackman)频谱平滑傅立叶变换多项式平滑各种样条平滑(线性、三次、自然三次)高斯平滑二元平滑幸运的是,一些大佬已经为我们实现了这些时间序列的平滑技术,并在GitHub上开源了这个模块的代码——它就是Tsmoothie模块。1.在开始之前,您需要确保您的计算机上已经成功安装了Python和pip。(方案一)如果使用Python进行数据分析,可以直接安装Anaconda,Anaconda内置了Python和pip。(方案二)另外,推荐大家使用VSCode编辑器,优点很多。请选择以下方式之一输入命令安装依赖项:Windows环境打开Cmd(开始-运行-CMD)。MacOS环境打开Terminal(command+空格进入Terminal)。如果您使用的是VSCode编辑器或Pycharm,则可以直接使用界面底部的Terminal。pipinstalltsmoothie(PS)Tsmoothie仅支持Python3.6及以上版本。2.Tsmoothie的基本使用为了尝试Tsmoothie的效果,我们需要生成随机数据:importnumpyasnpiimportmatplotlib.pyplotaspltfromtsmoothie.utils_funcimportsim_randomwalkfromtsmoothie.smoothieimportLowessSmoother#生成3组随机数据长度为200np.random.seed(123)data=sim_randomwalk(n_series=3,timesteps=200,process_noise=10,measure_noise=30)然后用Tsmoothie进行平滑:#Smoothsmoother=LowessSmoother(smooth_fraction=0.1,iterations=1sm)data)通过smoother.smooth_data你就可以获取平滑后的数据:print(smoother.smooth_data)#[[5.214629283.078980760.93933646-1.19847767-3.32294934#-5.40678762-7.42425709-9.36150892-11.23591897-13.05271523#..........在范围区域,我们可以检测异常值:可以看出,蓝色范围之外的点都是异常值。我们可以很容易地标记或记录这些异常值,以供后续处理。_low,_up=smoother.get_intervals('sigma_interval',n_sigma=2)series['low']=np.hstack([series['low'],_low[:,[-1]]])series['向上']=np.hstack([series['up'],_up[:,[-1]]])is_anomaly=np.logical_or(series['original'][:,-1]>series['up'][:,-1],series['original'][:,-1]
