数据分析实例——足球运动员数据集(1)
又开始做实例了~在本次数据集中,包含了2017年所有活跃的足球运动员的个人数据,包括身高体重等基本数据,以及力量、速度、技巧等多个指标。C罗、梅西、内马尔,到底谁比较厉害呢?答案我们可以从数据中获得。(有意思~)
数据来源:
本次数据集的来源是kesci,提供者是Ustinian,想自己动手试试的同学可以去了解一下~
下面开始我们的实例学习之路~
一、了解数据集
下面是和鲸社区中,对数据集的描述,主要包括了:数据集的主要内容、以及数据内的各个标签的中文注释。
(1)数据内容:
2017年所有活跃的足球运动员。
(2)数据说明(标签名):
Name 姓名
Nationality 国籍
National_Position 国家队位置
National_Kit 国家队号码
Club 所在俱乐部
Club_Position 所在俱乐部位置
Club_Kit 俱乐部号码
Club_Joining 加入俱乐部时间
Contract_Expiry 合同到期时间
Rating 评分
Height 身高
Weight 体重
Preffered_Foot 擅长左(右)脚
Birth_Date 出生日期
Age 年龄
Preffered_Position 擅长位置
Work_Rate 工作效率
Weak_foot 非惯用脚使用频率
Skill_Moves 技术等级
Ball_Control 控球技术
Dribbling 盘球(带球)能力
Marking 盯人能力
Sliding_Tackle 铲球
Standing_Tackle 逼抢能力
Aggression 攻击能力
Reactions 反击
Attacking_Position 攻击性跑位
Interceptions 抢断
Vision 视野
Composure 镇静
Crossing 下底传中
Short_Pass 短传
Long_Pass 长传
Acceleration 加速度
Speed 速度
Stamina 体力
Strength 强壮
Balance 平衡
Agility 敏捷度
Jumping 跳跃
Heading 投球
Shot_Power 射门力量
Finishing 射门
Long_Shots 远射
Curve 弧线
Freekick_Accuracy 任意球精准度
Penalties 点球
Volleys 凌空能力
GK_Positioning 门将位置感
GK_Diving 扑救能力
GK_Kicking 门将踢球能力
GK_Handling 扑球脱手几率
GK_Reflexes 门将反应度(3)导入数据:
(4)查看数据基本信息:
查看数据缺失情况:
从运行结果可以看到,出现数据缺失的特征总共有六列,而主要缺失的有两列,分别是:National_Position 国家队位置、National_Kit 国家队号码,出现缺失的原因,有可能是部分球员并没有在国家队里服役,因此也就没有相应的号码和位置。同时,由于‘Club 所在俱乐部’、‘Club_Position 所在俱乐部位置’、 ‘Club_Kit 俱乐部号码’、 ‘Club_Joining 加入俱乐部时间 ’、‘Contract_Expiry 合同到期时间’这5项指标也不在我们的研究范围之内。
因此,针对以上缺失值,我们不做处理。(对我们接下去的数据分析和可视化没有影响的~)
二、进行简单数据分析
(1)查看球员的身高、体重的具体信息
首先我们使用head( )查看一下:
可以看到,我们的数据是带有‘kg’、‘cm’等单位的,因此我们先对这些单位进行移除,同时修改数据类型,以方便后面的操作。
(忘记应该怎么做的同学可以看这里)
我们可以查看修改后的数据:
使用agg()查看所有球员身高、体重的均值和最值:
可以看到,数据集中的球员平均身高达到了181cm、平均体重75kg。
上述操作的主要目的是想让大家暖一下手,下面才是我们对这个球员数据集分析的真正开始。
作为非专业球员(嘻嘻,球迷or足球爱好者),我们当然还是更想看看能不能从数据反映出球员的个人实力。所以下面我们就要进行深入分析。
三、通过球员数据,鉴定球员能力
在我们的球员数据集中,总共有这么两项数据:Rating 评分、Skill_Moves 技术等级,这两项数据就是我们的主要研究目标。我们将围绕这两项数据,建立研究需求。
研究需求:
分值(Rating)高低的评分依据是什么?如何构建评分依据?
技术等级(Skill_Moves)的评价标准是什么?如何构建评价标准?
对研究需求的初步解读:
首先我们还是先对我们的目标列加深认知:
(1)分值(Rating):
可以看到,分值(Rating)这一目标值是连续型的,总共有49个不同值。
(2)技术等级(Skill_Moves):
可以看到,技术等级(Skill_Moves)更像是分类型的,总共有1-5五个等级。
进行球员分析前的须知:
总所周知,足球场上总共有11个球员,大致可以分为两类,分别是:1个守门员,及非守门员(前锋、中场、后卫),守门员的能力与非守门员的能力肯定是有区别的,因此我们在通过球员数据鉴定球员能力时,不能按照同一套标准。
对于守门员,我们更多的考究他的护框能力,与其他非守门员球员是截然不同的。
我们可以通过查看数据,进一步观察守门员和非守门员能力的差异:
我们提取出7列特征:
Name 姓名Preffered_Position 擅长位置Speed 速度Finishing 射门Freekick_Accuracy 任意球精准度Shot_Power 射门力量GK_Diving 扑救能力GK_Reflexes 门将反应度接着,我们查看前五名球员的这些数值差距:
在上面五位球员中,前四位是非守门员,第五位是守门员。
从数值上,可以明显看出区别。(忘记各个特征中文名的同学可以去上面看哦,我就不改数据表了)
下面开始正式分析球员能力值的评分标准~
1、守门员的评分标准
在数据集中,GK是表示守门员(门将)的意思,同时,主要有5个特征用于衡量守门员的能力,分别是:
GK_Positioning 门将位置感GK_Diving 扑救能力GK_Kicking 门将踢球能力GK_Handling 扑球脱手几率GK_Reflexes 门将反应度因此,我们可以将这几列特征提取出来,连同球员得分及技能等级,绘制成一个新数据表——门将数据表。
查看表格情况:
查看一下技能等级(Skill_Moves)的分级情况:
可以看到,在所有守门员中,技术等级只有1和2两个等级。
我们进一步查看等级的个数:
可以看到,在技术等级为1的球员有2002个,等级为2的只有1个,差距太大,这里其实L考虑过做数据平衡化,但是效果不是很好。
综合考虑后,决定在考量守门员的能力时,仅考虑分值(Rating)这一项数据,不考虑技术等级(Skill_Moves)。
(由于在数据表中,球员的单项特征的得分越高,证明这名球员的这项能力更突出,也就是说,这里的特征均属于数值类型,而不是类别型特征。因此,在这里我们不需要进行one-hot独热编码。)
可以看到,特征列都是数值型的。下面,我们将结合这五项特征,使用机器学习的方法技巧进行分析。(这里总共分为几个部分,由于篇幅原因,可能会将所有内容分为几篇文章。)
一、回归树
首先,我们使用决策树中的DecisionTreeRegressor(回归树)进行分析。
1、将数据集分割成训练集和测试集
导入做决策树相应需要的包:
首先,将原数据集按特征和目标进行分割:
然后,使用train_test_split将数据分成训练集和测试集。
注意~在这里我们指定了拆分系数为0.3,也是说将7/10的数据作为训练集,剩下3/10的数据作为测试集。
下面开始建模,并进行数据训练:
查看一下在测试集上的准确度(将经过训练集训练后的模型,应用到测试集里,并查看拟合的得分情况)
可以看到,拟合度是比较高的,也就是说这里我们可以借助回归树对球员评分进行预测。
2、同时,我们也可以画出决策树.(但是如果考虑实际问题的话,这里其实并不建议这么做)
除此之外,我们也可以利用随机森林回归、线性回归、逻辑回归包括支持向量机等方法,进行模型拟合及预测,当然了,使用每种方法的步骤与注意点均有些许不同,这些我也将会在下次为大家说明。
以上便是<数据分析实例——足球运动员数据集(1)>的内容,感谢大家的细心阅读,同时欢迎感兴趣的小伙伴一起讨论、学习,想要了解更多内容的可以看我的其他文章,同时可以持续关注我的动态~