1. 前言
数据质量分析是数据挖掘中数据预处理的前提,主要任务是检查脏数据。
脏数据包括:
缺失值
异常值
不一致的值
重复数据或者含有特殊符号(#、*、¥)的数据
2. 缺失值
缺失值的处理分为删除存在缺失值的记录、对可能值的插补和不处理。
3. 异常值(离群点)
3.1 简单统计量分析
可以先对变量做一个描述性的统计,进而查看哪些数据是不合理的。
最常用的统计量是最大值和最小值:eg:客户年龄一般在0-150岁
3.2 正态分布分析
如果数据服从正态分布,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。
回忆一下初中的知识点,正态分布图,当时老师告诉我们,99.7%的数据都会落在平均值的偏差超过3倍标准差范围之间。
其他的0.3%就作为异常值了。
3.3 箱型图分析
箱线图(Box-plot)又称盒须图、盒式图或箱形图,是一种用作显示一组数据分散情况资料的统计图,在数据分析中经常被使用到,可以被用于异常值的检测。
3.3.1下四分位数Q1确定四分位数的位置。Qi所在位置=i(n+1)/4,其中i=1,2,3。n表示序列中包含的项数。
根据位置,计算相应的四分位数。
3.3.2 中位数(第二个四分位数)Q2
中位数,即一组数由小到大排列处于中间位置的数。若序列数为偶数个,该组的中位数为中间两个数的平均数。
3.3.3 上四分位数Q3
计算方法同下四分位数。
3.3.4 上限
上限是非异常范围内的最大值。
首先要知道什么是四分位距如何计算的?
四分位距IQR=Q3-Q1,那么上限=Q3+1.5IQR
3.3.5 下限
下限是非异常范围内的最小值。
下限=Q1-1.5IQR
4. 一致性
不一致数据主要发生在数据集成的过程中,可能是由于被挖掘数据是来自于从不同的数据源、对于重复存放的数据未能进行一致性更新造成的。
例如两张存储用户电话的表只有一张更新。
5. 实例
数据
餐饮日销额数据
时间
2015/2/10
2015/2/11
2015/2/12
2015/2/13
2015/2/14
销售额(元)
2742.8
2014.3
865
3036.8
首先,我们用describe来查看数据的基本情况
importpandasaspd
dinnersale='dinnersale.xlsx'#数据文件地址
data=pd.read_excel(dinnersale,index_col=u'时间')#读取数据,指定索引列
describe=data.describe()#查看数据的基本情况
print(describe)
结果如下
其中count是非空值数,通过len(data)可以知道数据记录为多少条,这样就得到了缺省值数。
此外,提供的基本参数还有平均值(mean),标准差(std),最小值(min),1/4位数(25%),1/2位数(50%),3/4位数(75%)及最大值(max)。这样其实方便了大家使用箱型图排除异常值。
importpandasaspd
importmatplotlib.pyplotasplt
dinnersale='dinnersale.xlsx'
data=pd.read_excel(dinnersale,index_col=u'时间')
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号
plt.figure()#建立图像
p=data.boxplot(return_type='dict')#画箱线图,直接使用DataFrame的方法
#要指定返回类型否则下面下标获取不到
#'fliers'即为异常值的标签
x=p['fliers'][0].get_xdata()
y=p['fliers'][0].get_ydata()
y.sort()#从小到大排序,该方法直接改变原对象
#annotate添加注释
# 第一个参数是注释的内容
# xy设置箭头尖的坐标
# xytext设置注释内容显示的起始位置
foriinrange(len(x)):
ifi>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()#展示箱线图
图片如下,异常值就是上下限外的(还需要结合实际情况)
Tips:
安装matplotlib包
python -m pip install -U matplotlib
数据质量分析很重要,记得老师说过数据70%在于前期的处理