Python数据挖掘003-数据特征分析
在对数据进行质量分析以后,就需要通过绘制图表,计算某些特征量等手段进行数据的特征分析。
1. 数据分布分析
可以揭示出数据的分布特征和分布类型,对于定量数据,要查看分部形式是对称还是不对称,绘制频率分布表,直方图,茎叶图进行只管分析。对于定性分类数据,可以用饼状图,条形图。
对定量数据,绘制其频率分布直方图,用plt绘制时,要指定bins,即绘制的组数。
data.hist(bins=30)
image.png
可以看出这个数据集大体上服从正态分布
对于定性数据的分布分析,主要采用饼图和条形图来判断。
image.png2. 属性之间的对比分析
对比分析是指把两个相互联系的指标进行比较,查看各种关系是否协调,比如指标间的横纵向比较,时间序列的比较分析等。
在对比分析中,选择合适的对比标准是非常关键的步骤。
这个一般用图表来看数据的变化情况。
3. 统计量分析
用统计指标进行统计分析,主要有两个方面:集中趋势,离中趋势。
集中趋势就是平均水平,其指标是对个体集中趋势的度量,常用均值和中位数。
而离中趋势指的是个体离开平均水平的度量,使用较广泛的是标准差(方差),四分位间距。
3.1 集中趋势
均值:即平均值。还有加权平均值,反应的是均值中不同成分所占的不同重要程度。为数据集中的每一个xi都赋予权重wi,就得到了加权平均值。
但均值的主要问题是对极端值很敏感,如果数据中存在极端值或者数据是偏态分布,那么均值就不能很好的度量数据的集中趋势。此时可以用截断均值或者中位数来度量
中位数:间一组观察值按小到大排列,位于中间的那个数就是中位数,所以在全部数据中,小于和大于中位数的数据个数相等。
3.2 离中趋势
极差:对数据集的极端值非常敏感,且忽略了位于最大值和最小值之间的数据分布的情况。
标准差:度量数据偏离均值的程度。
变异系数:度量的是标准差相对于均值的离中趋势。
四分位数间距:上四分位数与下四分位数之差,其间包含了全部观察值的一半,其值越大,说明数据的变异程度越大,反之,说明变异程度越小。
4. 周期性分析
探索某个变量是否随着时间变化而呈现出某种周期变化的趋势。
image.png比如上图中可以看出用电量呈现一定的周期变化。
5. 贡献度分析
贡献度分析又称为帕累托分析,原理是帕累托法则,即二八法则。如下图:
image.png菜品对盈利的影响中,盈利最高的7个菜品占据月盈利的85%,所以要增加前面7个菜品的成本投入,而减少A8-10的投入。
绘制这个佩雷托图的代码位:
import matplotlib.pyplot as plt #导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
plt.figure()
data.plot(kind='bar') # 柱状图
plt.ylabel('盈利(元)')
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"))
#添加注释,即85%处的标记。这里包括了指定箭头样式。
plt.ylabel('盈利(比例)')
plt.show()
6. 相关性分析
分析连续变量之间线性相关程度的强弱,并用适当的统计指标表示出来的过程叫做相关性分析。
6.1 直接绘制散点图
img1.PNG6.2 绘制散点图矩阵
可以利用散点图矩阵同时绘制各变量间的散点图,从而快速发现多个变量间的主要相关性,这在进行多元线性回归时显得非常重要。
6.3 计算相关系数
注意,相关性分析只能得到特征之间的线性相关性。
为了更加准确的描述变量之间的线性相关程度,可以通过计算相关系数来进行相关分析。主要有三个计算方法:Pearson相关系数,Spearman相关系数和判定系数。
image.pngPearson线性相关系数要求连续变量的取值服从正态分布,不服从正太分布的变量,分类或等级变量之间的关联性可用Spearman相关系数来描述。
在正太分布假设下,Spearman相关系数和Pearson相关系数在效率上时等级的,而对于连续测量数据,更适合用Pearson相关系数来进行分析。
判定系数R^2, 用来衡量回归方程对y的解释程度,取值为0-1之间,越接近1表明x和y之间的相关性越强,越接近0,表明两个变量之间几乎没有直线相关关系。
计算相关性在pandas中非常方便:
df.corr()会得到一个相关性df,可以直接获取数据。
参考资料:
《Python数据分析和挖掘实战》张良均等