本文使用R语言模拟美式橄榄球比赛数据,我们将完成以下几部分工作。
- 获取和清理美式橄榄球比赛数据
- 分析和理解美式橄榄球比赛数据
- 构建度量攻防能力的指标
- 模拟单场由程序决定胜负的比赛
- 模拟多场由计算决定胜负的比赛
经过上面的数据清洗和简单的可视化工作,我们对于比赛数据已经有了初步的了解。本节中,我们基于比赛的统计数据建立度量球队攻防能力的指数。指数作为一种描述性统计指标,融合了多个数据域信息。例如,在职业美式橄榄球比赛中,四分卫一般可以通过传球绩效指数来衡量和比较他的传球表现,而不需要依次分析他的传球成功率、每次平均传球总码数、达阵次数等单个指标。
本节中,我们将基于球队的比赛统计数据为每支球队的攻防能力建立指数。球队的进攻能力依赖于它的传球和冲球能力,防守能力决定于球队截断对手传球和拦截冲球的表现。通过所建立的攻防指数,我们可以从不同角度分析和比较球队间在赛场上的表现,并且最终指导我们来确定模拟比赛的获胜者和失败方。
准备工作
如果你已经完成了上面小节的各个流程,那么你可以继续进行下面的分析建模工作。
处理流程
我们按照下面的流程来构造攻防指数。
1.首先,我们计算球队的进攻传球能力分值。combined变量中最能体现传球能力的是PassYds/G(average passing yards per game),即平均每场传球码数。PassYds/G的值越高,说明球队拥有更强的传球能力。为了更方便地比较各个球队之间的相对传球能力,我们需要计算各个球队和拥有最佳传球能力球队之间的差值。
offense$OPassStrength <- max(offense[,5])-offense[,5]
offense$OPassStrength <- (1-
(offense$OPassStrength/max(offense$OPassStrength)))*100
首先,我们计算每个球队的PassYds/G和最大值之间的差值,然后除以最大值。1减去比值的用意是为了使分值的大小和传球能力的大小成正比,最后我们将分值归一到0和100之间。
如果仅仅将每个球队的PassYds/G除以最大值,不能完美地体现各个球队在传球能力上的差别。经过上面的数据处理之后,具有最佳传球能力队伍的OPassStrength总是为100,相对应地,最差球队的OPassStrength总是为0。 |
2.为了计算球队的进攻冲击能力,我们可以对数据域RushYds(average rushing yards per game)采取相同的变换。
offense$ORushStrength <- max(offense[,6])-offense[,6]
offense$ORushStrength <- (1-
(offense$ORushStrength/max(offense$ORushStrength)))*100
3.我们现在对每场进攻得分和进攻码数进行上面相同的变化,然后将四个变换之后的变量综合成用户的攻击能力指标。
offense$OPPGStrength <- max(offense[,3])-offense[,3]
offense$OPPGStrength <- (1-
(offense$OPPGStrength/max(offense$OPPGStrength)))*100
offense$OYPGStrength <- max(offense[,4])-offense[,4]
offense$OYPGStrength <- (1-
(offense$OYPGStrength/max(offense$OYPGStrength)))*100
offense$OffStrength <-
(offense$OPassStrength+offense$ORushStrength+offense$OPPGStren
gth+offense$OYPGStrength)/4
在最后一行代码中,我们简单地对变换过的四个单独攻击指标取平均数得到球队最终的攻击指数。
4.我们现在可以选择反映球队防守能力的指标,通过遵循上面的步骤得到球队防守能力指数。首先,我们通过平均每场丢掉的传球码数计算球队截断对手传球能力指标。
defense$DPassStrength <- max(defense[,6])-defense[,6]
defense$DPassStrength <-
defense$DPassStrength/max(defense$DPassStrength)*100
5.其次,我们计算球队防守对手冲球能力。
defense$DRushStrength <- max(defense[,5])-defense[,5]
defense$DRushStrength <-
defense$DRushStrength/max(defense$DRushStrength)*100
6.最后,类似于计算球队总体的攻击能力指标,我们需要对每场球赛失防分值和总失防码数进行相同的变换,然后将四者进行简单的合并。
defense$DPPGStrength <- max(defense[,3])-defense[,3]
defense$DPPGStrength <-
defense$DPPGStrength/max(defense$DPPGStrength)*100
defense$DYPGStrength <- max(defense[,4])-defense[,4]
defense$DYPGStrength <-
defense$DYPGStrength/max(defense$DYPGStrength)*100
defense$DefStrength <-
(defense$DPassStrength+defense$DRushStrength+defense$DPPGStren
gth+defense$DYPGStrength)/4
请注意,在计算球队防守能力指标步中,我们并没有用1减去各个球队和最大值之间的比值。因为就防守而言,比较小的数值表明球队拥有较强的防守能力,而并不是如攻击能力计算中分值较大代表了球队强大的进攻能力。 |
工作原理
正如前面所述,构建指数的目的是为了简单和标准化原有的多个统计量,从而使球队之间的比较更加方便和直观。在上面的步骤中,通过整合多个进攻和防守统计量,我们为每支球队计算了唯一的攻防指标值。
在上面的例子中,为了阐述指数构建的方法,我们选择了少量的变量。读者也可以尝试包括更多的变量。同样,聚合变量的方法(简单平均)也可以被其他更复杂的方法代替。如果你认为不同的变量在指数的构建过程中起到的作用不尽相同,可以为变量加上相应的权重。举例说明,如果你认为在构建进攻指数中,进攻得分、传球能力、进攻码数、冲击能力的重要性依次递减,那么你可以选择为每个统计变量赋予不同的权重,而不是简单的平均。
offense$OffStrength <- (offense$OPPGStrength * 0.4) +
(offense$OPassStrength * 0.25) + (offense$OYPGStrength * 0.2) +
(offense$ORushStrength * 0.15)
如上面的命令所示,通过赋予变量不同的权重,重要的变量可以起到比其他变量更大的作用。
参考资料
- 关于指数的更多资料,可以访问http://mathworld.wolfram.com/IndexNumber.html。
- 关于传球手评分的更多资料,可以访问http://en.wikipedia.org/wiki/Passer_rating。
未完待续~~~
本文摘自《数据科学实战手册(R+Python)》,由人民邮电出版社授权数据分析网发布。
本文由 人民邮电出版社 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/22360.html 。