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

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

数据为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)

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

发布了19 篇原创文章 · 获赞 2 · 访问量 5841

猜你喜欢

转载自blog.csdn.net/dongmie1999/article/details/99846651