数据挖掘入门与实战 公众号: datadw
目录
1 描述性统计是什么?
2 使用NumPy和SciPy进行数值分析
2.1 基本概念
2.2 中心位置(均值、中位数、众数)
2.3 发散程度(极差,方差、标准差、变异系数)
2.4 偏差程度(z-分数)
2.5 相关程度(协方差,相关系数)
2.6 回顾
3 使用Matplotlib进行图分析
3.1 基本概念
3.2 频数分析
3.2.1 定性分析(柱状图、饼形图)
3.2.2 定量分析(直方图、累积曲线)
3.3 关系分析(散点图)
3.4 探索分析(箱形图)
3.5 回顾
4 总结
1 描述性统计是什么?
描述性统计是借助图表或者总结性的数值来描述数据的统计手段。数据挖掘工作的数据分析阶段,
我们可借助描述性统计来描绘或总结数据的基本情况
,一来可以梳理自己的思维,二来可以更好地向他人展示数据分析结果。数值分析的过程中,我们往往要计算出数据的统计特征,用来做科学计算的NumPy和SciPy工具可以满足我们的需求。Matpotlob工具可用来绘制图,满足图分析的需求。
2 使用NumPy和SciPy进行数值分析
2.1 基本概念
与Python中原生的List类型不同,
Numpy中用ndarray类型来描述一组数据
:
1 from numpy import array
2 from numpy.random import normal, randint
3 #使用List来创造一组数据 4 data = [1, 2, 3]
5 #使用ndarray来创造一组数据
6 data = array([1, 2, 3])
7 #创造一组服从正态分布的定量数据
8 data = normal(0, 10, size=10)
9 #创造一组服从均匀分布的定性数据
10 data = randint(0, 10, size=10)
2.2 中心位置(均值、中位数、众数)
数据的中心位置是我们最容易想到的数据特征。借由中心位置,我们可以知道数据的一个平均情况,如果要对新数据进行预测,那么平均情况是非常直观地选择。数据的中心位置可分为均值(Mean),中位数(Median),众数(Mode)。其中均值和中位数用于定量的数据,众数用于定性的数据。
对于定量数据(Data)来说,均值是总和除以总量(N),中位数是数值大小位于中间(奇偶总量处理不同)的值:
均值相对中位数来说,包含的信息量更大,但是容易受异常的影响。使用NumPy计算均值与中位数:
1 from numpy import mean, median
2 3 #计算均值4 mean(data)
5 #计算中位数
6 median(data)
对于定性数据来说,众数是出现次数最多的值,使用SciPy计算众数:
1 from scipy.stats import mode
2 3 #计算众数
4 mode(data)
2.3 发散程度(极差、方差、标准差、变异系数)
对数据的中心位置有所了解以后,一般我们会想要知道数据以中心位置为标准有多发散。如果以中心位置来预测新数据,那么发散程度决定了预测的准确性。数据的发散程度可用极差(PTP)、方差(Variance)、标准差(STD)、变异系数(CV)来衡量,它们的计算方法如下:
极差是只考虑了最大值和最小值的发散程度指标,相对来说,方差包含了更多的信息,标准差基于方差但是与原始数据同量级,变异系数基于标准差但是进行了无量纲处理。使用NumPy计算极差、方差、标准差和变异系数:
1 from numpy import mean, ptp, var, std
2 3 #极差
4 ptp(data)
5 #方差
6 var(data)
7 #标准差
8 std(data)
9 #变异系数
10 mean(data) / std(data)
2.4 偏差程度(z-分数)
之前提到均值容易受异常值影响,那么如何衡量偏差,偏差到多少算异常是两个必须要解决的问题。定义z-分数(Z-Score)为测量值距均值相差的标准差数目:
当标准差不为0且不为较接近于0的数时,z-分数是有意义的,使用NumPy计算z-分数:
1 from numpy import mean, std
2 3 #计算第一个值的z-分数
4 (data[0]-mean(data)) / std(data)
通常来说,z-分数的绝对值大于3将视为异常。
2.5 相关程度
有两组数据时,我们关心这两组数据是否相关,相关程度有多少。用协方差(COV)和相关系数(CORRCOEF)来衡量相关程度:
协方差的绝对值越大表示相关程度越大,协方差为正值表示正相关,负值为负相关,0为不相关。相关系数是基于协方差但进行了无量纲处理。使用NumPy计算协方差和相关系数:
1 from numpy import array, cov, corrcoef
2 3 data = array([data1, data2])
4 5 #计算两组数的协方差
6 #参数bias=1表示结果需要除以N,否则只计算了分子部分
7 #返回结果为矩阵,第i行第j列的数据表示第i组数与第j组数的协方差。对角线为方差
8 cov(data, bias=1)
9 10 #计算两组数的相关系数
11 #返回结果为矩阵,第i行第j列的数据表示第i组数与第j组数的相关系数。对角线为
112 corrcoef(data)
2.6 回顾
包
|
方法
|
说明
|
numpy
|
array
|
创造一组数
|
numpy.random
|
normal
|
创造一组服从正态分布的定量数
|
numpy.random
|
randint
|
创造一组服从均匀分布的定性数
|
numpy
|
mean
|
计算均值
|
numpy
|
median
|
计算中位数
|
scipy.stats
|
mode
|
计算众数
|
numpy
|
ptp
|
计算极差
|
numpy
|
var
|
计算方差
|
numpy
|
std
|
计算标准差
|
numpy
|
cov
|
计算协方差
|
numpy
|
corrcoef
|
计算相关系数
|
3 使用Matplotlib进行图分析
3.1 基本概念
使用图分析可以更加直观地展示数据的分布(频数分析)和关系(关系分析)。柱状图和饼形图是对定性数据进行频数分析的常用工具,使用前需将每一类的频数计算出来。直方图和累积曲线是对定量数据进行频数分析的常用工具,直方图对应密度函数而累积曲线对应分布函数。散点图可用来对两组数据的关系进行描述。在没有分析目标时,需要对数据进行探索性的分析,箱形图将帮助我们完成这一任务。
在此,我们使用一组容量为10000的男学生身高,体重,成绩数据来讲解如何使用Matplotlib绘制以上图形,创建数据的代码如下:
View Code
3.2 频数分析
3.2.1 定性分析(柱状图、饼形图)
柱状图是以柱的高度来指代某种类型的频数,使用Matplotlib对成绩这一定性变量绘制柱状图的代码如下:
1 from matplotlib import pyplot
2
3
#
绘制柱状图
4
def
drawBar(grades):
5
xticks = [
'
A
'
,
'
B
'
,
'
C
'
,
'
D
'
,
'
E
'
]
6
gradeGroup =
{}
7
#
对每一类成绩进行频数统计
8
for
grade
in
grades:
9
gradeGroup[grade] = gradeGroup.get(grade, 0) + 1
10
#创建
柱状图
11
#
第一个参数为柱的横坐标
12
#
第二个参数为柱的高度
13
#
参数align为柱的对齐方式,以第一个参数为参考标准
14
pyplot.bar(range(5), [gradeGroup.get(xtick, 0)
for
xtick
in
xticks], align=
'
center
'
)
15
16
#
设置柱的文字说明
17
#
第一个参数为文字说明的横坐标
18
#
第二个参数为文字说明的内容
19
pyplot.xticks(range(5
), xticks)
20
21
#
设置横坐标的文字说明
22
pyplot.xlabel(
'
Grade
'
)
23
#
设置纵坐标的文字说明
24
pyplot.ylabel(
'
Frequency
'
)
25
#
设置标题
26
pyplot.title(
'
Grades Of Male Students
'
)
27
#
绘图
28
pyplot.show()
29
30
drawBar(grades)
绘制出来的柱状图的效果如下:
而饼形图是以扇形的面积来指代某种类型的频率,使用Matplotlib对成绩这一定性变量绘制饼形图的代码如下: