# 3.1数据质量分析
# 数据质量分析主要任务是检查原始数据中是否存在脏数据(缺失值,异常值,不一致的值,重复数据及含有特殊符号的数据)
# 缺失值:使用简单的统计分析可以得到含有缺失值的属性的个数,以及每个属性的未缺失数,缺失数与缺失率等。对于缺失值处理分为删除存在缺失值的记录,对可能的值进行插补和不处理。
# 异常值也称为离群点。简单的描述性统计,查看哪些数据是不合理的,常用的统计量是最大值和最小值;如果数据服从正态分布,可以按3西格玛原则,测定值中与平均值的偏差超过3倍标准差;
# 箱型图分析,异常值定义为小于Q下-1.5IQR或者大于Q上+1.5IQR
import pandas as pd
catering_sale='E:/WTTfiles/自我学习/机器学习/python数据分析与挖掘实战/chapter3/demo/data/catering_sale.xls'
data=pd.read_excel(catering_sale,index_col=u'日期')#读取数据,指定日期列为索引列,pandas读取excle数据时需要先下载安装xlrd模块
print(data.describe())#describe可以查看数据的基本情况
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']#matplotlib默认英文字体,要想显示中文标签,手动指定默认字体为中文
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号
plt.figure()
p=data.boxplot(return_type='dict')#画箱线图
x=p['fliers'][0].get_xdata()#异常值的标签为fliers
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()
#运行程序,得到count=200,len(data)可得数据有201个,所以缺失值为1
#得到箱线图有7个异常值,结合具体业务,规定过滤原则为日销量在400以下5000以上为异常值,所以异常值有5个。
销量
count 200.000000
mean 2755.214700
std 751.029772
min 22.000000
25% 2451.975000
50% 2655.850000
75% 3026.125000
max 9106.440000