数据质量分析
数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础。
脏数据
- 缺失值
- 异常值
- 不一致的值
- 重复数据及含有特殊符号(如#、¥,*)的数据。
缺失值分析
缺失值产生的原因
(1)有些信息暂时无法获取,或者获取信息的数据量代价太大。
(2)有些信息是被遗漏的。
(3)属性值不存在。
缺失值的影响
(1)数据挖掘建模将丢失大量有用的信息。
(2)数据挖掘模型所表现出的不确定性更加显著、模型中蕴藏的规律更加难把握。
(3)包含空值的数据会使建模过程陷入混乱,导致不可靠的输出。
缺失值的分析
简单的统计分析,可得到含有缺失值的属性的个数,以及每个属性的未缺失数、确实数与缺失率等。
import pandas as pd
catering_sale = '../data/catering_sale.xls'# 餐饮数据
data = pd.read_excel(catering_sale,index_col=u'日期')#读取数据,指定“日期”列为索引列
data.head()
data.describe()
- count 非空数值 len(data) 201条
- mean 平均值
- std 标准差
- min 最小值
- max 最大值
- 1/4,1/2,3/4 分位数(25%,50%,75%)
异常值分析
简单统计量分析
通常用的统计量是最大值和最小值,用来判断这个变量的取值是否超出了合理范围。
3δ原则
- 如果数据服从正态分布,在3δ原则下,异常值被定义为一组测定值中平均值的偏差超过3倍标准差的值。
在正态分布的假设下,距离平均值3δ之外的值出现的概率为 ,属于极个别的小概率事件。 - 如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。
箱型图分析法
箱型图提供了识别异常值的一个标准:异常值通常定义为小于 或大于的值。
- :称为下四分位数,表示全部观察值中有四分之一的数据取值比它小
- :称为上四分位数,表示全部观察值中有四分之一的数值取值比它大
- :称为四分位数间距,是上四分位数 与下四分位数 之差,其间包含了全部观察值的一半。
import matplotlib.pyplot as plt # 导入图像库
import pandas as pd
data = pd.read_excel(catering_sale, index_col=u'日期') # 读取数据,指定“日期”列为索引列
%matplotlib inline
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() # 展示箱线图
餐饮销额数据异常值检测代码
缺失值个数为:1
箱型图的超过上下界的7个销售额数据可能为异常值
结合具体业务可以把:865,4060.3归为正常值,将22,51,6607.4、9106.44归为异常值。
最后确定过滤规则为:日销售量在400以下5000以上则属于异常数据、编写过滤程序,进行后续处理。
一致性分析
数据的不一致性是指数据的矛盾性,不相溶性。 在数据挖掘的过程中,这可能是由于被挖掘的数据是来自于从不同的数据源,对于重复存放的数据未能进行一致性更新造成的。
网友评论