现在有这样一组数据,希望去除掉里面的异常数据。其中,异常数据可能比正常数据大也可能比正常数据小,可能是正的也可能是负的。

Python去除异常数据——利用numpy求箱线图特征值_python

数据为deg=[]

import numpy as np

if(True):
#new_nums = list(set(deg)) #剔除重复元素
mean = np.mean(deg)
var = np.var(deg)
print("原始数据共",len(deg),"个\n",deg)
'''
for i in range(len(deg)):
print(deg[i],'→',(deg[i] - mean)/var)
#另一个思路,先归一化,即标准正态化,再利用3σ原则剔除异常数据,反归一化即可还原数据
'''
#print("中位数:",np.median(deg))
percentile = np.percentile(deg, (25, 50, 75), interpolation='midpoint')
print("分位数:",percentile)
#以下为箱线图的五个特征值
Q1 = percentile[0]#上四分位数
Q3 = percentile[2]#下四分位数
IQR = Q3 - Q1#四分位距
ulim = Q3 + 1.5*IQR#上限 非异常范围内的最大值
llim = Q1 - 1.5*IQR#下限 非异常范围内的最小值

new_deg = []
for i in range(len(deg)):
if(llim<deg[i] and deg[i]<ulim):
new_deg.append(deg[i])
print("清洗后数据共",len(new_deg),"个\n",new_deg)

运行效果如下,由于数据是从摄像头采集的,每次会有点不一样

Python去除异常数据——利用numpy求箱线图特征值_最小值_02

Python去除异常数据——利用numpy求箱线图特征值_python_03