python时序数据异常值检测与插补

文章讲述了在处理时序数据中的异常低值问题时,使用Savitzky-Golay滤波进行平滑处理的方法,但指出该方法可能导致负值且缺乏自动异常检测功能。作者建议结合偏差比率阈值来识别异常值。
摘要由CSDN通过智能技术生成

前言
最近在对时序数据进行数据分析时,发现原始数据中存在异常低值,表现为在一段较平稳序列中突然出现一个数值较小的异常值,且该异常值明显低于附近值(相差十几倍)。由于数据量较多,人工识别此类异常值费时费力,因此通过查阅相关文献、博客对其进行检测与插补处理,以提高后期预测模型的精度。
原始数据:数据
链接:https://pan.baidu.com/s/1XXTfPuKlB55z0S8yQJJ0Nw
提取码:wing
表格:
如图中的数字3
画图显示
在这里插入图片描述
一、 savgol_filter滤波
基本知识: 参考网址savgol_filter滤波简介

  • Savitzky-Golay滤波器最初由Savitzky和Golay于1964年提出。广泛地运用于数据流平滑除噪,是一种在时域内基于局域多项式最小二乘法拟合的滤波方法。这种滤波器最大的特点在于在滤除噪声的同时可以确保信号的形状、宽度不变。
  • 它对信号的操作是在时域内对window_length内的数据进行多项式拟合。而从频域上看,这种拟合实际就是通过了低频数据,而滤掉了高频数据。
  • 这种滤波其实是一种移动窗口的加权平均算法,但是其加权系数不是简单的常数窗口,而是通过在滑动窗口内对给定高阶多项式的最小二乘拟合得出。

代码:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy.signal import savgol_filter

data_wsxg = pd.read_csv('Wanshouxigong_IDW_Linear.csv')
print(data_wsxg.head())
data_wsxg.insert(5, 'PM2.5_SG', np.nan)

"""1. savgol_filter滤波: 会出现负值, 且没有异常低值检测(人为识别)"""
# savgol_filter(data, window_length, polyorder)  window_length(取奇数整数): 越大曲线越平滑; polyorder: 多项式拟合的阶数, 越大越更贴近原始曲线
data_wsxg['PM2.5_SG'] = savgol_filter(data_wsxg['PM2.5'], 7, 3)
print(data_wsxg.head())
data_wsxg.to_csv('Wanshouxigong_savgol_filter.csv', index=None)

plt.plot(data_wsxg['PM2.5'][200:400], color='black', label='PM2.5_true')
plt.plot(data_wsxg['PM2.5_SG'][200:400], color='red', linestyle='--', label='PM2.5_SG')
plt.legend()
plt.show()

注意: window_length的值必须为正奇整数,不然程序会报错。
结果:
在这里插入图片描述
计算原始序列与趋势序列在各个时刻的偏差比率
d ratio  ( t ) = ∣ x t −  tend  t ∣ x t d_{\text {ratio }(t)}=\frac{\mid x_{t}-\text { tend }_{t} \mid}{x_{t}} dratio (t)=xtxt tend t

设置偏差比率的阈值,将偏差比率大于阈值的时刻判定为异常低值。根据数据分析情况,将偏差阈值设置为5。可得经过滤波校正后的数据:

滤波后的结果:
在这里插入图片描述

总结:方法较简单,运行效率快;缺点是滤波结果会出现负值, 这明显与PM2.5监测数据矛盾,且异常低值检测(只能通过自定义去判断)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wing_._

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值