百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

R语言模拟美式橄榄球比赛数据分析(2):分析和理解美式橄榄球比赛数据

bigegpt 2024-08-15 19:53 3 浏览

本文使用R语言模拟美式橄榄球比赛数据,我们将完成以下几部分工作。

  • 获取和清理美式橄榄球比赛数据

  • 分析和理解美式橄榄球比赛数据

  • 构建度量攻防能力的指标

  • 模拟单场由程序决定胜负的比赛

  • 模拟多场由计算决定胜负的比赛

现在我们已经获取并清洗完数据,接下来我们需要理解每个数据域的意义,并利用这些数据挖掘有用的信息。

准备工作

如果你已经完成了上面获取和清洗数据的步骤,就可以进入下面的流程。

处理流程

我们通过下面的步骤进行数据分析和探索。

1.首先,为了方便后续的数据探究,我们将offense和defense两个数据框合并成combined数据框。

combined <- merge(offense, defense, by.x=”Team”, by.y=”Team”)

因为offense和defense数据框中存在相同的列名称,为了避免后面操作的混淆,我们需要为重名的列进行唯一命名。同时,我们会剔除defense中和offense中重复的比赛数量列。

colnames(combined)[2] <- “Games”

colnames(combined)[3] <- “OffPPG”

colnames(combined)[4] <- “OffYPG”

colnames(combined)[5] <- “OffPassYPG”

colnames(combined)[6] <- “OffRushYPG”

combined$G.y <-

colnames(combined)[15] <- “DefPPG”

colnames(combined)[16] <- “DefYPG”

colnames(combined)[17] <- “DefRushYPG”

colnames(combined)[18] <- “DefPassYPG”

2.现在,我们可以开始探究已经预处理过的比赛数据。直方图一直是初步研究数据的最好工具之一,因为它可以通过显示每列数据的分布而分辨偏低、偏高和在正常范围内的数值。首先,我们为每个球队平均每场进攻得分(offensive points per game)创建一个直方图。

hist(combined$OffPPG, breaks=10, main=”Offensive Points Per

Game”, xlab=”Offensive PPG”,ylab=”Number of Teams”)

直方图如下所示。

如上图所示,大多数球队平均得分在18到28范围内,但存在平均得分显著高于和低于平均水平的两支球队。所有球队平均进攻得分和标准偏差为23.4和4.36。得分最高的球队得分37.9(高于平均值3.32个标准偏差),得分最低的球队得分15.4(低于平均值1.83个标准偏差)。以上结果可以通过执行下面的命令得到。

mean(combined$OffPP G)

[1] 23.41875

sd(combined$OffPPG)

[1] 4.361373

max(combined$OffPPG

[1] 37.9

min(combined$OffPPG)

[1] 15.4

3.现在我们来观察每个球队对手的平均每场比赛得分(points allowed)是如何分布的。

hist(combined$DefPPG, breaks=10, main=”Defensive Points Per

Game”, xlab=”Defensive PPG”,ylab=”Number of Teams”)

其直方图如下所示。

如上图所示,各球队对手的平均得分波动不大,大多数球队分值都处在20至30之间,仅有几个球队因为卓越的防守能力而控制对手的进攻分值在20分之下。

4.我们再创建一个进攻统计量:平均每场比赛的首攻次数(number of first downs per game)。

hist(combined$”1stD/G”, breaks=10, main=”Offensive 1st Downs

Per Game”, xlab=”1st Downs/Game”,ylab=”Number of Teams”)

直方图如下所示。

如上图所示,大多数球队的首攻都在17至20之间,而丹佛野马(Denver Broncos)队不仅是球队平均每场进攻得分最高的一支球队,而且拥有非常高的首攻数。简单替换上述代码中的列名,你就可以为combined的各列创建直方图。不妨尝试几次替换,观察是否有新的发现。

5.下面将尝试通过创建条形图来理解combined数据集。条形图和前面所创建的直方图经常容易被混淆。在这里,二者的区别在于,条形图可以刻画出每支球队在不同评价指标上的差异,而直方图却是用来显示出评价指标在不同数值段上的球队数量的分布情况。下面,我们通过创建每场进攻得分(offensive poins)的条形图来详细解读。

ppg <- transform(combined,Team=reorder(Team,combined$OffPPG))

ggplot(ppg,aes(x=Team, y=OffPPG)) +

geom_bar(stat=’identity’,color=”black”,fill=”blue”) +

coord_flip + labs(x=”Team”,y=”Avg Points per Game”) +

ggtitle(“Avg Points per Game”) + theme(plot.title =

element_text(size=18, face=”bold”))

现在我们可以清楚地看到按照每场比赛得分降序排的球队排名。

6.现在让我们再看看每支球队在失守码数(defense yards allowed)上的平均表现,命令如下所示。

ypg <- transform(combined,Team=reorder(Team,-combined$DefYPG))

ggplot(ypg,aes(x=Team, y=DefYPG)) +

geom_bar(stat=’identity’,color=”black”,fill=”blue”) +

coord_flip + labs(x=”Team”,y=”Avg Yards Allowed per Game”) +

ggtitle(“Avg Yards Allowed per Game”) + theme(plot.title =

element_text(size=18, face=”bold”))

上面的条形图显示出Denver Broncos优秀的进攻能力和Seattle seahawks强大的防守能力。我们也可以大致猜到球迷们将会看到的比赛结果。最终,Seattle seahawks凭借牢固的防守能力在超级碗的比赛中完胜Denver Broncos。

读者可以为更多的变量绘制条形图,从而找到更多有助于预测最后比赛结果的线索。

7.最后我们通过散点图来观察两个变量之间的相关性。举例而言,我们可以绘制球队每场平均进攻得分(offensive points)和平均进攻码数(offensive yards)之间的散点图。

ggplot(combined, aes(x=combined$OffYPG, y=combined$OffPPG)) +

geom_point(shape=5, size=2) + geom_smooth +

labs(x=”Yards per Game”,y=”Points per Game”) +

ggtitle(“Offense Yards vs. Points per Game”) +

theme(plot.title = element_text(size=18, face=”bold”))

执行命令产生的图形如下所示。

如上图所示,这两个变量呈现正相关性。当平均进攻码数增加时,平均进攻得分也逐渐上升。我们可以通过以下命令计算二者之间的线性相关系数。

cor(combined$OffYPG,combined$OffPPG)

[1] 0.7756408

8.理论上,球队的平均失守码数(defense for yards allowed)和平均失守分值(points allowed per game)之间也应该存在很强的相关性。下面我们通过绘制二者之间的散点图来验证我们的猜想。

ggplot(combined, aes(x=combined$DefYPG, y=combined$DefPPG)) +

geom_point(shape=5, size=2) + geom_smooth +

labs(x=”Yards Allowed per Game”,y=”Points Alloed per Game”)

+ ggtitle(“Defense Yards vs. Points per Game”) +

theme(plot.title = element_text(size=18, face=”bold”))

如上图所示,二者之间确实存在一些正相关性,但是没有两个得分变量之间的相关性强烈。我们也可以计算出它们之间的相关系数。

cor(combined$DefYPG,combined$DefPPG)

[1] 0.6823588

9.我们还需要一个散点图来验证我们的猜想:平均得分是否和球队拥有控球权的时间成正向关系。

ggplot(combined, aes(x=combined$TOP, y=combined$OffPPG)) +

geom_point(shape=5, size=2) + geom_smooth +

labs(x=”Time of Possession (Seconds)”,y=”Points per Game”) +

ggtitle(“Time of Possession vs. Points per Game”) +

theme(plot.title = element_text(size=18, face=”bold”))

二者之间的散点图和我们的猜想相去甚远。很明显,从进攻效率角度分析,各个球队存在不同的水平,有的可以在短时间内迅速得分,而有些队伍却只能争取到很低的分数。而得分和控球时间之间偏低的相关系数也印证了散点图所传达的信息。

cor(combined$TOP,combined$OffPPG)

[1] 0.2530245

工作原理

在绘制直方图时,坐标间隔(break)的数量对于有效表达数据信息非常重要,设定的坐标间隔决定了直方图中柱状条的数量。如果break设置合理,那么直方图能够真正体现不同范围数据的频率间的差别,但如果设置过多,会导致分析的困扰。依据我们以往的经验,初始分析可以设置break使得图中有10列,随后可以根据数据的特性调整。

我们使用ggplot2包来绘制条形图。首先通过transform函数对数据框重新排序,然后利用ggplot2画出排序之后的数据。我们可以修改图形的任意特征,包括轮廓、填充颜色、数据轴样式、图标名称等。同样,ggplot2也可以创建散点图,且任意修改图形的元素。在上面的列子中,我们修改散点图中的点为镂空钻石(shape=5)。

更多内容

ggplot2包的创建者Hadley Wicham在http://docs.ggplot2.org/current/上详细讲解了如何使用ggplot2画出你想要的任何图形。

参考资料

  • ggplot2包可以在 http://docs.ggplot2.org/current/上下载。

  • 美式足球规则可通过http://en.wikipedia.org/wiki/American_football_rules进行查阅。

相关推荐

了解Linux目录,那你就了解了一半的Linux系统

大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...

Linux命令,这些操作要注意!(linux命令?)

刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...

Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!

在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...

linux必学的60个命令(linux必学的20个命令)

以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....

提高工作效率的--Linux常用命令,能够决解95%以上的问题

点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...

15 个实用 Linux 命令(linux命令用法及举例)

Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...

Linux 常用命令集合(linux常用命令全集)

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

Linux的常用命令就是记不住,怎么办?

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux常用文件操作命令(linux常用文件操作命令有哪些)

ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...

Linux 常用命令(linux常用命令)

日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E&#...

简单粗暴收藏版:Linux常用命令大汇总

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...

「Linux」linux常用基本命令(linux常用基本命令和用法)

Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...

Linux的常用命令就是记不住,怎么办?于是推出了这套教程

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux的30个常用命令汇总,运维大神必掌握技能!

以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...

Linux/Unix 系统中非常常用的命令

Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...