1.数据质量分析
在做数据分析和挖掘时,在获取数据后,一般第一步就是对数据进行探索性的分析,通过计算一些统计量或者绘制图表等方法来看数据特征。数据探索有利于后期的数据建模,本文从数据质量和数据特征两部分介绍数据探索的过程。码字不易,喜欢请点赞!!!
1.1缺失值分析
缺失值主要包括记录缺失和属性值缺失,产生原因可能是:
- 信息无法获取,或获取成本太高
- 信息遗漏
- 属性值不存在
缺失值影响主要有:
- 数据建模丢失大量有用信息
- 数据建模不确定性增加,模型中规律更难把握
- 包含空值的数据导致建模过程混乱,输出的可靠性降低
缺失值处理主要包括删除缺失值存在的记录和缺失值插补以及不处理三种方法。缺失值处理的具体过程后面介绍数据预处理的时候再介绍。
1.2异常值分析
异常值也成为离群点,异常值对数据建模的影响非常大,因此需要先进行处理,一般会找到异常值后修正,无法修正的就剔除。异常值检验的三个方法:
- 简单统计量分析:通过对变量进行描述性统计,看看哪些数据不合理,比如年龄199岁这样的不合理数据。
- 3原则:如果数据服从正态分布,则根据统计学知识可以知道,数据落在3区间之内的概率为99.73%,如果数据在此之外,则是极小概率事件。若不服从正态分布,可以用远离平均值多少倍的标准差来描述。
- 箱型图分析:落在箱型图之外的数据称为离群点。箱型图分析具有更好的鲁棒性,因为多达25%的数据变异不会很大的扰动四分位数。下面代码展示了某餐饮销售数据(数据包括日期、销售额两列)绘制箱型图的一个过程:
import pandas as pd
import matplotlib.pyplot as plt
catering_sale = r"...\demo\data\catering_sale.xls"
data = pd.read_excel(catering_sale,index_col='日期')
plt.rcParams['font.sans-serif'] = ['SimHei']#用于正常显示中文,感觉没有也行
plt.rcParams['axes.unicode_minus'] = False#用于正常显示负号,感觉没有也行
plt.figure(figsize=(8,6))
p = data.boxplot(return_type='dict')
x = p['fliers'][0].get_xdata()
y = p['fliers'][0].get_ydata()
y.sort()
#使用annotate函数添加注释,其中xy为值的横纵坐标,xytext为显示文字的横纵坐标
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]))
画出来的结果,如下图:
根据显示业务,可以将865、4060.3、4065.2定为正常值,其余为异常值,因此后面进行异常值剔除时,可以设置销售额大于500,小于5000的区间。
1.3一致性分析
有时候同一个数据,在不同的数据源出现不一致的情况,需要注意。
2.数据特征分析
再数据质量分析之后,可以通过绘制图表,计算特征量的方法来进行特征分析。
2.1分布分析
- 定量数据分布:绘制直方图
- 定性数据分布:绘制饼图、条形图来看各个分类的占比
2.2对比分析
可以使用折线图,来从不同维度上进行对比分析,比如比较A、B、C三个部门最近一年销售额的趋势;或者比较A部门最近三年各个月分销售额的变化趋势。
2.3统计量分析
统计量分析包括集中趋势和离中趋势分析。
- 集中趋势:均值、中位数、众数等指标
- 离中趋势:极差、标准差、变异系数(CV = 标准差/均值)、四分位距等指标
2.4周期性分析
通过数据的时序图,看看是否存在周期性变化,下图为某公司用电的时序图,可以看出存在周期性变化,其中周末休息时,用电量较小。
2.5贡献度分析
贡献度分析又称为帕累托分析,帕累托法则即28准则,百分之二十的部分产品产生百分之八十的收入。下面代码展示了某餐饮销售的帕累托分布:
import pandas as pd
import matplotlib.pyplot as plt
dish_profit = r"...\data\catering_dish_profit.xls"
data = pd.read_excel(dish_profit,index_col='菜品名')
data = data['盈利']
data = data.sort_values(ascending=False)
plt.figure()
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data.plot(kind='bar')
p = data.cumsum()/data.sum()
#secondary_y 参数设置第二坐标轴
p.plot(secondary_y = True,color='r',style='-o')
plt.show()
2.6相关性分析
通过相关性分析,来看变量之间的相关程度。
- 绘制散点图
- 绘制散点图矩阵:同时考量多个变量之间的相关性
- 计算相关系数:Pearson相关系数(变量服从正态分布)、Spearman秩相关系数(变量不服从正态分布时使用)
3.数据探索主要工具
目前主流的数据分析与挖掘的工具是Python和R,并且Python占主导地位,Python中数据探索基本上使用pandas和matplotlib两个库就可以了,其中pandas可以查看统计特征,而matplotlib通过绘图展示数据情况。
码字不易,喜欢请点赞!!!
【参考文献】
《Python数据分析与挖掘实战》
来源:https://blog.csdn.net/Asher117/article/details/102744446