python数据清洗-异常点识别与检测
利用图形检测和输出异常值的方法–箱线图法。
箱线图法
箱线图实际就是利用数据的分位数识别其中的异常点,其特征如下图所示:
下四分位数:25%分位点所对应的值(Q1)
中位数:50%分位点对应的值(Q2)
上四分位数:75%分位点所对应的值(Q3)
上须:Q3+1.5(Q3-Q1)
下须:Q1-1.5(Q3-Q1)
其中Q3-Q1表示四分位差
判断标准: 变量的数据值大于箱线图上须或者小于箱线图的下须,就可以认为这样的数据点为异常值点
在python中可使用matplotlib模块实现箱线图的制作,下面以1700-2009年太阳黑子数量为数据依据,利用箱线图法识别数据中的异常点。具体代码如下:
# -*- coding:utf-8 -*-
#异常值检测
import pandas as pd
import matplotlib.pyplot as plt
sunspots = pd.read_csv('C:\Users\\19047\Desktop\heizi.csv')
#绘制箱线图
plt.boxplot(x = sunspots.counts,
whis = 1.5,#1.5倍的四分位差
widths = 0.7,
patch_artist = True,#填充箱体颜色
showmeans= True,# 显示均值
boxprops = {'facecolor':"steelblue"},#箱体填充色
flierprops = {'markerfacecolor':'red','markeredgecolor':'red','markersize':4},#异常点填充色、边框、大小
meanprops = {'marker':'D','markerfacecolor':'black','marksize':4},#均值点标记符号、填充色、大小
medianprops = {'linestyle':'--','color':'orange'},#中位数处的标记符号、填充色、大小
labels = [''])
plt.show()
# 计算上下四分位数
Q1 = sunspots.counts.quantile(q = 0.25)
Q3 = sunspots.counts.quantile(q = 0.75)
#异常值判断标准, 1.5倍的四分位差 计算上下须对应的值
low_quantile = Q1 - 1.5*(Q3-Q1)
high_quantile = Q3 + 1.5*(Q3-Q1)
# 输出异常值
value = sunspots.counts[(sunspots.counts > high_quantile) | (sunspots.counts < low_quantile)]
print value
如上图所示,利用matplotlib子模块pyplot中的boxplot函数可以非常方便地绘制箱线图,从图中可知,数据集中至少存在5个异常点,它们均在上须之上,其中数据索引和值输出为;