R来分析林书豪

数字显微镜下的林书豪

 
 
现在网络上最为炙手可热的人物恐怕就是NBA新星 林书豪(Jeremy Lin)了,但是俗话说:不怕不识货,就怕货比货。这位初生牛犊与其它NBA巨星相比,到底有多么优秀?还有多少差距?还是让数字来说话吧。首先从 这里下载2011-2012NBA赛季的球员数据,该数据中共有四百位球员,取得分最多的前一百位球员,将其数据拷贝到Excel中,并将林同学的数据添加在最后,删除了所属球队和排名之后我们得到了一个 CSV数据文件。数据中的变量说明附后。

第一步:我们先画出这些变量的 相关系数图,以剔除一些冗余的变量,从下图可看到深兰色方块即表示两组数据间有较强正相关,那么我们只需取其中一组数据即可,例如TRB(篮板总数)就可以代替ORB/DRB/BUK。由此我们提取MP/FGA/FGP/X3PP/FT/FTP/TRB/AST/STL/PF/TOV/PTS这12个变量作进一步处理。
 
第二步:分别绘制这些变量的 箱线图,并观察林同学在一百位NBA球员中的位置。但需要注意的是,林同学作为崭露头角的新星,上场时间较少。为了公平的比较在单位时间内的各项指标,需要将一些指标按上场时间进行平均化处理。例如将总得分数除以出场时间,但其它一些指标如进球率则保留不变。
 
上面的箱线图中红色的点即代表林书豪,可观察到他在助攻(AST.MP)和得分能力(PTS.MP)方面表现优秀,在得球机会(FGA>MP)和命中率(FTP)方面亦属上佳,三分球命中率(X3PP)和罚球命中率(FGP)则属下乘,而且失误(TOV.MP)数字也相当的多。那么蓝色的点,你知道是代表哪一位球员吗?那就是目前的得分王科比。仔细比较一下吧。

第三步:上面对各指标分别进行了一维的比较,下面用 多维标度分析方法,将多维空间的对象简化到低维空间进行定位和分析。提取前两维绘制成散点图如下。其中红色点表示是林同学的位置,而蓝色点则是总得分排名前十位的球员。从图上似乎可以得到令人吃惊的结论,那就是林同学几乎可与这十位巨星球员归为一类了。
 
结语:对篮球和数字感兴趣的同学可以作进一步的研究。但有几点需要注意的是:1、表面的数字不一定代表球员能力,原因正如笔者在 体育数据挖掘一文中提到过的;2、林同学上场时间还不多,样本太少,不一定具有代表性;3、上面是将林同学和一百位NBA球员进行比较,合适的作法还应该将他与打同一位置的球员加以比对。但这个数据中并未包含此信息。

R代码:
#读取CSV数据文件

data <- read.csv('d:/nba.csv',sep=',')

summary(data)

#绘制变量间的相关系数图

library(corrgram)

corrgram(data[,c(-1,-2)])

#将几个指标除以上场时间,再合成为新的数据

temple.data <- sapply(data[c('FGA','FT','TRB','AST','STL','PF','TOV','PTS')],function(x) x/data['MP'])

newdata1 <- cbind(data[c('FGP','X3PP','FTP')],as.data.frame(temple.data))

#对数据进行融合以方便ggplot2绘图

library(reshape)

newdata2 <- melt(newdata1)

library(ggplot2)

#提取林书豪与科比的数据

lindata<-melt(newdata1[101,])

kobedata <-melt(newdata1[1,])

#构建ggplot图层的基本数据层

p <- ggplot(data=newdata2,aes(x=variable,y=value))

#添加箱线图和点图

p + geom_boxplot()+

  geom_point(data=lindata,colour='red',size=3)+

  geom_point(data=kobedata,colour='blue',size=3)+

  coord_flip()

#加载MASS包进行MDS分析

library(MASS)

nba.mds <- isoMDS(dist(newdata1))

#提取前两维数据

x = nba.mds$points[,1]

y = nba.mds$points[,2]

mds.data <-data.frame(x,y,player=data$Player)

lin.data <- mds.data[101,]

topten.data <- mds.data[1:10,]

#绘制散点图

g <- ggplot(data=mds.data,aes(x,y))

g + geom_point()+

  geom_point(data=lin.data,color='red',size=4)+

  geom_point(data=topten.data,color='blue',size=3)+

  geom_text(size=4,data=topten.data,aes(label=player),hjust=1,vjust=0,alpha=0.5)

变量说明:
G:出场次数
GS:先发次数
MP:上场时间
FG:投中次数
FGA:投篮次数
FGP:命中率
3P:3分命中次数
3PA:3分投篮次数
3PP:3分命中率
FT:罚球命中次数
FTA:罚球次数
FTP:罚球命中率
ORB:进攻篮板
DRB:防守篮板
TRB:总篮板
AST:助攻
STL:盗球
BLK:封盖
TOV:失误
PF:个人犯规
PTS:总得分
变量名后加.MP的表示以上场时间进行了平均处理。

你可能感兴趣的:(分析)