清理异常数据:
中位数绝对偏差(MAD):用来描述单变量样本在定量数据中可变的一种标准
在统计学中,绝对中位差是刻画一元数据样本变化的一个鲁棒度量。由公式可以看出,其求解还算简单,给定一个数据样本集,首先求其中位数,然后求原始数据减去中位数的绝对值从而形成一个新的数据样本,再求新的数据样本的中位数即为绝对中位差。比如说有一个数据样本集X={2 3 8 7 9 6 4},这时候数据的中位数是6,原始数据减去中位数求绝对值形成新的数据样本为{4 3 2 1 3 0 2},新的数据样本的中位数是2,所以原始数据样本集合的绝对中位差是2。
绝对中位差这个度量有什么用呢?
绝对中位差较标准差而言对“野”点(outlier)更加的鲁棒。在标准差的计算中,数据点到其均值的距离要求平方,因此对偏离较为严重的点偏离的影响得以加重,也就是说“野”点严重影响着标准差的求解,而少量的“野”点对绝对中位差的影响不大。
https://blog.csdn.net/lanchunhui/article/details/80381516 参考文章
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm
x=np.random.random(100)
number=50
x=np.r_[x,-60,80,40,100,-100]#在后面添上,相当于padans中merge
plt.figure()
plt.subplot(211)
plt.hist(x,number)
plt.xlabel('raw') #没消除异常的时候
# plt.show()
def c_except(x,thresh=3.5):
'''
使用绝对中位差消除异常
:return:
'''
if len(x)<=1:
return
me=np.median(x)
abs=np.absolute(x-me)
abs_me=np.median(abs)
score=norm.ppf(0.75)*abs/abs_me
return score<thresh
#异常消除后
x_late=x[c_except(x)]
plt.subplot(212)
plt.hist(x_late,number)
plt.show()