数据质量分析
为数据预处理的前提,主要是检查脏数据 :
缺失值
异常值
不一致的值
重复数据及含有特殊符号的数据
缺失值分析
两种情况:①记录缺失 ②记录中的某些字段缺失
缺失分析:缺失值的属性个数,每个属性的未缺失数、缺失数和缺失率。
异常值分析
简单统计量分析
一般设定统计量的最大值、最小值,看是否不在区间内。
3 σ 3\sigma 3 σ 原则
数据符合正态分布 ,异常值为与平均值的偏差超过3倍标准差 的值。(P ( ∣ x − μ ∣ > 3 σ ) ≤ 0.003 P(|x-\mu|>3\sigma)\le0.003 P ( ∣ x − μ ∣ > 3 σ ) ≤ 0 . 0 0 3 )。
盒图分析
Q L : 下四分位数 Q_L: 下四分位数 Q L : 下 四 分 位 数
Q U : 上四分位数 Q_U: 上四分位数 Q U : 上 四 分 位 数
I Q R : 四分位数间距 IQR: 四分位数间距 I Q R : 四 分 位 数 间 距
异常值: < Q L − 1.5 I Q R ∣ ∣ > Q L + 1.5 I Q R 异常值: <Q_L-1.5IQR || >Q_L+1.5IQR 异 常 值 : < Q L − 1 . 5 I Q R ∣ ∣ > Q L + 1 . 5 I Q R
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 """ Created on Sun May 3 11:31:50 2020 @author: SANG """ import pandas as pdimport matplotlib.pyplot as pltcatering_sale='data/catering_sale.xls' data=pd.read_excel(catering_sale,index_col=u'日期' ) plt.rcParams['font.sans-serif' ]=['SimHei' ] plt.rcParams['axes.unicode_minus' ]=False plt.figure(dpi=256 ) p=data.boxplot(return_type='dict' ) x=p['fliers' ][0 ].get_xdata() y=p['fliers' ][0 ].get_ydata() y.sort() 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()
一致性分析
一般是数据更新不一致,导致数据之间的矛盾。
数据特征分析
分布分析
频率分布分析
求极差(最大值-最小值)
决定组距和组数(组数=极差/组距)
决定分点(把数据划分成若干区间的点)
绘制频率分布直方图
对比分析
+ 绝对数比较
+ 相对数比较
统计量分析
集中趋势度量
均值
中位数
众数
离散趋势度量
极差
标准差s = ∑ ( x i − x ˉ ) 2 n s=\sqrt{\frac{\sum(x_i-\bar{x})^2}{n}} s = n ∑ ( x i − x ˉ ) 2
变异系数C V = s x ˉ CV=\frac{s}{\bar{x}} C V = x ˉ s
四分位数间距=上四分位数Q U Q_U Q U -下四分位数Q L Q_L Q L
还是分析上面的餐饮数据,这次分析其统计量 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 """ Created on Sun May 3 15:33:04 2020 @author: SANG """ import pandas as pdcatering_sale='data/catering_sale.xls' data=pd.read_excel(catering_sale,index_col=u'日期' ) data=data[(data[u'销量' ]>400 )&(data[u'销量' ]<5000 )] statistics=data.describe() statistics.loc['range' ]=statistics.loc['max' ]-statistics.loc['min' ] statistics.loc['var' ]=statistics.loc['std' ]/statistics.loc['mean' ] statistics.loc['dis' ]=statistics.loc['75%' ]-statistics.loc['25%' ] print (statistics)
1 2 3 4 5 6 7 8 9 10 11 12 销量 count 195.000000 mean 2744.595385 std 424.739407 min 865.000000 25 % 2460.600000 50 % 2655.900000 75 % 3023.200000 max 4065.200000 range 3200.200000 var 0.154755 dis 562.600000
贡献度分析
即帕累托分析 。大概类似于看哪20%数据(或者更多更少)贡献了80%。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 """ Created on Sun May 3 15:50:30 2020 @author: SANG """ import pandas as pdimport matplotlib.pyplot as pltdish_profit='data/catering_dish_profit.xls' data=pd.read_excel(dish_profit,index_col=u'菜品名' ) data=data[u'盈利' ].copy() data.sort_values(ascending=False ) plt.rcParams['font.sans-serif' ]=['SimHei' ] plt.rcParams['axes.unicode_minus' ]=False plt.figure(dpi=256 ) data.plot(kind='bar' ) plt.ylabel(u'盈利(元)' ) p=1.0 *data.cumsum()/data.sum () p.plot(color='r' ,secondary_y=True ,style='-o' ,linewidth=2 ) plt.annotate(format (p[6 ],'.4%' ), xy=(6 ,p[6 ]), xytext=(6 *0.9 ,p[6 ]*0.9 ), arrowprops=dict (arrowstyle='->' ,connectionstyle='arc3,rad=.2' )) plt.ylabel(u'盈利(比例)' ) plt.show()
相关性分析
两个变量,绘制散点图
多个变量,绘制散点图矩阵
计算相关系数
Pearson相关系数(数据服从正态分布)
Spearman相关系数
判定系数(相关系数的平方)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 """ Created on Wed May 6 09:42:25 2020 @author: SANG """ import pandas as pdcatering_sale='data/catering_sale_all.xls' data=pd.read_excel(catering_sale, index_col=u'日期' ) print (data.corr())print (data.corr()[u'百合酱蒸凤爪' ])print (data[u'百合酱蒸凤爪' ].corr(data[u'翡翠蒸香茜饺' ]))