异常值分析是检验数据是否有录入错误数据和不合常理的数据。不加剔除的把异常值代入数据分析过程中,会对结果产生不良影响,而对异常值的分析其原因,常常成为为发现问题的而改进决策的契机。
异常值是指样本中的个别值,其数值明显偏离其余的数据。异常值通常也称为离群点,所以异常值分析也叫做离群点分析。
异常值分析通常有以下几种:
(1)简单统计量分析
最常用的统计量是最大值和最小值,用来判断这个变量的取值是否超出了合理的范围。
(2)3原则
如果数据服从正态分布,在3原则下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。在正态分布的假设下,距离平均值3
之外的值出现的概率为,属于极个别的小概率事件
(3)箱型图分析
箱型图提供了识别异常值的一个标准:异常值通常被定义为小于 或大于
的值。
称为下四分位数,表示全部观察值中有四分之一的数据取值比它下;
称为上四分位数,表示全部观察值中有四分之一的数据取值比它大;
称为四分位数间距,是上四分位数和下四分位数之差,期间包含了全部观察值的一般。
如果数据记录和属性比较多,使用人工分辨的方法就不切实际,所以这里需要编写程序来检测出含有缺失值的记录和属性以及缺失率个数和缺失率等
以下就是箱型图利用 python进行生成分析一下:
#-*- coding: utf-8 -*-
import pandas as pd
catering_sale = 'path' #餐饮数据
data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列
import matplotlib.pyplot as plt #导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
plt.figure() #建立图像
p = data.boxplot(return_type='dict') #画箱线图,直接使用DataFrame的方法
x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签
y = p['fliers'][0].get_ydata()
y.sort() #从小到大排序,该方法直接改变原对象
#用annotate添加注释
#其中有些相近的点,注解会出现重叠,难以看清,需要一些技巧来控制。
#以下参数都是经过调试的,需要具体问题具体调试。
for i in range(len(x)):
if i>0:
plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i]))
else:
plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i]))
plt.show() #展示箱线图

另外提供的参数还有平均值、标准差、最小值、最大值等。
网友评论