微信号:dataminingwithR

介绍:介绍R语言的学习和使用,关注数据挖掘算法,利用R语言实现常见的数据挖掘算法,并配以有趣的NBA数据分析案例.不管您是初学还是精通R语言,本平台都致力于让您能从中获益.

描述性统计分析

2016-09-27 15:07 №→★飞刀

本文继续引用微信公众号中案例数据中的pgdat数据集,手把手教你学会使用R实现基本的描述性统计分析。

描述性统计分析

在做数据分析时,一般先会对数据进行描述性统计分析,以便于描述该数据的各种特征及其所代表的总体的特征。描述性统计分析包括对数据的集中趋势、离散程度以及分布进行分析。下面主要对集中趋势以及离散程度的一些数字特征进行介绍,数据分布的部分内容较多,下次单独写一篇文章来说明。

集中趋势度量

集中趋势,是指数据向中心靠拢的程度,它反映了一组数据中心点的位置所在。

1.均值

均值表示数据的平均特征。

假如我们想知道2015-2016常规赛季NBA顶级组织后卫数据统计的平均水平(包括得分、助攻、抢断、失误等),可以如下计算:

# 平均得分
mean(x = pgdat$pts,na.rm = F)
## [1] 21.7852
# 平均助攻
mean(x = pgdat$ast,trim=0.05)
## [1] 8.205805
# 平均抢断
mean(x = pgdat$stl)
## [1] 1.794749
# 平均失误
mean(x = pgdat$tov)
## [1] 3.159905

mean函数参数:

  • x:向量,待计算的数据

  • trim:比例值,该比例指把数据按顺序排列后删除该指定比例的数据后再重新计算均值

  • na.rm:逻辑值,表示是否允许存在缺失值

2.中位数

中位数是指把数据按照从小到大的数据排列后属于中间位置的那个数据值。

我们计算2015-2016常规赛季NBA顶级组织后卫数据统计的中位数水平(包括得分、助攻、抢断、失误等),可以如下计算:

# 得分中位数
median(x = pgdat$pts,na.rm = F)
## [1] 21
# 助攻中位数
median(x = pgdat$ast)
## [1] 8
# 抢断中位数
median(x = pgdat$stl)
## [1] 2
# 抢断中位数
median(x = pgdat$tov)
## [1] 3

median函数参数:

  • x:向量,待计算的数据

  • na.rm:逻辑值,表示是否允许存在缺失值

值得注意的是:大多时候,人们喜欢采用均值而不采用中位数,而实际上在存在异常值的时候,采用中位数来代表数据的集中程度远比均值要好得多。

我们来看一个例子:

# 生成10个均值为0方差为1的正态随机数,以及一个数值为100的异常值
dat <- c(rnorm(10,0,1),100)
# 计算其均值
mean(dat)
## [1] 8.716564
# 计算其中位数
median(dat)
## [1] -0.3546823

可以看到,采用均值计算得到的结果被100这个异常值明显的拉高了,而采用中位数计算的结果则比较符合我们期望得到的结果。

在现今的互联网上,经济数据的统计往往仅仅给出了均值,比如上海的房价均价达到了42000每平米,平均工资超过了8000人民币等等,诸如此类的数据一出,大家经常调侃自己又被“平均”了。是的,这些数据统计本身并没有错,但仅凭平均值我们无法准确的了解上海房价和工资的真实状况,可能是高端房地产拉高上海的整体房价,可能是高收入人群拉高了整体的工资水平,单纯的使用平均数太具有欺骗性,也许是时候在给出各类经济统计数据的同时,再给出一个中位数的值了。

3.众数

众数是在数据中出现次数最多的那个数据值。

在R中没有直接求众数的函数,但是也可以通过R的基本函数得到。假如我们要求解谁在常规赛中参赛场次最多,可以采用如下命令:

(dat <- table(pgdat$player))
## 保罗 康利 库里 欧文 威少 沃尔 
## 74   56   79   53   80   77
dat[which.max(dat)]
## 威少 
## 80

这里采用table函数来统计频数,采用which.max来返回最大的频数。

可以看到,常规赛参赛场次最多的是威少,他参加了80场,仅仅缺席了2场比赛,堪称铁人。

离散程度度量

离散程度是指数据之间的差异程度。一般用方差和标准差来衡量离散程度,而如果要衡量不同量纲的数据之间的差异程度,单纯用方差和标准差不能达到目的,这时可以采用变异系数。

1.方差和标准差

方差和标准差是衡量数据离散程度的度量,在统计上具体指各个数据与其均值之差的平方和。


library(dplyr)
# 得分方差
pgdat %>% group_by(player) %>% summarise(var(pts))
##   player var(pts)
##    (chr)    (dbl)
## 1   保罗 46.05998
## 2   康利 37.16071
## 3   库里 95.34210
## 4   欧文 71.38824
## 5   威少 62.10063
## 6   沃尔 48.70984
# 得分均值和标准差
pgdat %>% group_by(player) %>% summarise(pts.m=mean(pts),pts.sd=sd(pts))
##   player    pts.m   pts.sd
##    (chr)    (dbl)    (dbl)
## 1   保罗 19.54054 6.786750
## 2   康利 15.30357 6.095959
## 3   库里 30.06329 9.764328
## 4   欧文 19.64151 8.449156
## 5   威少 23.47500 7.880395
## 6   沃尔 19.88312 6.979244

sd以及var函数参数:

  • x:向量,待计算的数据

  • na.rm:逻辑值,表示是否允许存在缺失值

我们来试图解释一下上面计算的结果,得分标准差是用来说明得分的波动程度的,也是得分稳定性程度的体现,从结果可以看到保罗和康利的得分稳定性最高,场均得分相对较低,这是因为球队不以他们为主要得分点,他们的主要任务是通过传球串联球队,这是传统组织后卫的体现;那么是不是得分标准差高就不好呢?不见得。我们可以看到这里库里的得分标准差较高,但是他的场均得分比其他人高出一个数量级,这时标准差大反而从侧面体现了其得分爆发力的强大。所以如何结合实际业务去正确地解读数据非常重要。

2.变异系数

变异系数是数据的标准差及其均值之比,是当比较两组数据离散程度的大小时通常采用的一个统计量。

# 得分和助攻标准差
pgdat %>% summarise(pts.sd=sd(pts),ast.sd=sd(ast))
##     pts.sd   ast.sd
## 1 9.025836 3.634924
# 得分和助攻变异系数
pgdat %>% summarise(pts.cv=sd(pts)/mean(pts)*100,ast.cv=sd(ast)/mean(ast)*100)
##     pts.cv   ast.cv
## 1 41.43104 43.76532

可以看到,单纯看标准差,你发现得分的离散程度比助攻的要大得多;而实际上当我们用变异系数来解释离散程度的时候,你会发现得分的离散程度反而变得更小了。

这个从实际比赛的角度上也很容易理解,因为得分比助攻更容易获得,每一次得分的增加可以是罚球罚进加1分或者投篮成功加2-3分,而每一次助攻成功仅记1次。所以单纯从标准差来看,得分的更高。而变异系数消除了这两种不同数据统计之间量纲的影响,使其波动程度的可比性成为了现实。

小结

描述性统计分析的各类统计量除了上述介绍的以外还有很多,比如顺序统计量、四分位数、偏度、峰度等等,这些也可以采用R快速实现,具体的理论可以参考入门级统计学的书籍。

描述性统计分析是后续推断统计分析的基础。当你能很好地理解这些统计量时,说明你在数据分析之路上又精进了一步。


 本文来自№→★飞刀的微信公共帐号“数据挖掘与R语言”,用微信添加数据挖掘与R语言公众号,即可订阅。

长按识别图中二维码 


 
数据挖掘与R语言 更多文章 数据可视化之——REmap 数据挖掘十大算法 数据处理之——data.table 数据处理之——dplyr xgboost:速度快效果好的Boosting模型
猜您喜欢 微服务在实际项目中的应用 传说中贼靠谱的金融级数据库是怎样的? 【六一福利】5 月份你可能错过的好项目 如何隐藏自己的程序猿气息 用开源软件搭建自己的物联网