下面是关于Python库Tsmoothie模块数据平滑化异常点抓取的完整攻略。
什么是Tsmoothie
Tsmoothie是一个Python库,它提供了多种数据平滑化方法,以及异常点抓取的功能。它可以处理时间序列数据,使用的方法和参数可以通过调整来适应不同的数据集和算法需求。
安装Tsmoothie
你可以在终端中输入以下代码来安装Tsmoothie:
pip install tsmoothie
Tsmoothie中的平滑化方法
Tsmoothie提供了三种常用的平滑化方法:
-
Smoother: 该方法使用了三角滑动平均值,适用于平滑化具有按周或按月周期性的数据。
-
Lowess: 该方法使用了局部加权回归线性模型,适用于平滑化具有非周期性的数据。
-
Kalman Smoother: 该方法适用于能够建立状态空间模型的数据集,即数据可以被分解为状态和观测值。
Tsmoothie中异常点抓取的功能
在进行数据分析时,异常点通常会干扰我们的分析结果。Tsmoothie提供了异常点抓取的功能,它包含两大部分:
-
ESD Test: 它是Tsmoothie中用于检测异常点的一种方法,即将异常点定义为离群值,并使用一些统计测试来检测哪些值是异常点。其中,ESD是Extreme Studentized Deviation的缩写,即极端标准化偏差。
-
One-Class SVM: 它是另一种检测异常点的方法,它使用了SVM(Support Vector Machine)算法来划分数据,从而能够识别出数据中的异常点。
Tsmoothie的具体使用
下面向您展示两个使用Tsmoothie实现平滑化和异常点抓取的示例。
示例一
使用Smoother方法对一组具有按周周期性的数据进行平滑化,并在平滑化后使用ESD Test方法检测出其中的异常点。
from tsmoothie.smoother import *
# 创建Smoother对象
smoother = ConvolutionSmoother(window_len=5, window_type='gaussian')
# 创建具有按周周期性的数据集
import numpy as np
dates = pd.date_range(start='1/1/2019', end='31/12/2020')
values = [np.sin(d.dayofyear/30*np.pi)+np.random.rand()*0.5+4.5 for _, d in enumerate(dates)]
values[100] = 7 # 添加一个人工造成的异常点
# 对数据进行平滑化
smoother.smooth(values)
# 获取平滑化后的结果和异常点数据
smooth_data = smoother.smooth_data
Anomalies_idx = smoother.max_window_residuals(n=1)
anomalies = [values[i] for i in Anomalies_idx[0]]
# 打印平滑化后的结果和异常点数据
print('Smooth Data: ',smooth_data)
print('\nAnomalies: ', anomalies)
示例二
使用One-Class SVM对一组具有非周期性的数据进行异常点抓取,并将异常点在图表中进行可视化。
from tsmoothie.svm import *
# 创建OneClassSVM对象
detector = OneClassSVM()
# 创建具有非周期性的数据集
dates = pd.date_range(start='1/1/2019', end='31/12/2020')
values = [np.random.normal(loc=5, scale=0.5, size=1)[0] if d.dayofyear <= 240 or d.dayofyear >= 270
else np.random.normal(loc=6.5, scale=0.5, size=1)[0] for _, d in enumerate(dates)]
values[100] = 8 # 添加一个人工造成的异常点
values[200] = 3 # 添加另一个人工造成的异常点
# 对数据进行异常点检测
labels = detector.fit_predict(values)
# 将异常点在图表中进行可视化
import matplotlib.pyplot as plt
plt.figure(figsize=(12,6))
plt.plot(dates, values, label='Values')
plt.fill_between(dates, [i for i in detector.offsets_lower_], [i for i in detector.offsets_upper_], alpha=0.5, color='red')
plt.plot(dates[labels==-1], values[labels==-1], 'rx', label='Anomalies')
plt.legend(loc='upper left')
plt.show()
以上就是本次Tsmoothie模块数据平滑化和异常点抓取的完整攻略了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python库Tsmoothie模块数据平滑化异常点抓取 - Python技术站