(数据集)2017年所有活跃的足球运动员
发布时间:
让我们开始我们的示例学习路径吧~ 1.了解数据集
以下是和静社区对数据集的描述,主要包括:数据集的主要内容以及数据中每个标签的中文标注。
(一)数据内容:
2017年所有现役足球运动员。
(2) 数据说明(标签名称):
姓名 姓名
公民权国家
国家队位置
国家队号码
俱乐部所在俱乐部
俱乐部位置
俱乐部号码
加入俱乐部时间
合同到期时间
分数
高度
重量
擅长左(右)脚
出生日期
年龄 年龄
位置好
工作效率
非惯用脚的使用频率
技术等级
控球技巧
运球(运球)能力
打标能力
处理
压制能力
攻击能力
反击
进攻运动
偷
想象
冷静的
从底部开始交叉
近路
长传
加速度
速度
体力
强的
平衡
敏捷
跳
沥青
射门力量
射击
远射
曲线圆弧
任意球精准度
罚球
截击能力
守门员位置感
储蓄能力
守门员的踢球能力
丢球的机会
守门员反应
(3) 导入数据:
import numpy as np
import pandas as pd
df = pd.read_csv(r'C:\Users\Administrator\Desktop\zuqiu8543\football.csv')
(4)查看数据基本信息:
df.head()
df.shape
检查是否有缺失数据:
df.isnull().sum()
从运行结果可以看到,共有六列数据缺失,其中主要缺失两列,分别是:国家队位置、国家队编号。 缺席的原因可能是部分球员不在国家队。 他在球队任职,所以没有对应的号码和位置。 同时,‘俱乐部’、‘俱乐部地点’、‘俱乐部号码’、‘加入俱乐部时间’、‘合同到期时间’这五个指标也不在我们的研究范围之内。
因此,我们不对上述缺失值进行处理。 (不会影响我们后续的数据分析和可视化~)
2. 进行简单的数据分析
(1)查看玩家身高、体重的具体信息
首先我们使用 head() 来检查:
df[['Weight','Height']].head()
可以看到,我们的数据有‘kg’、‘cm’等单位,所以我们先把这些单位去掉,并修改数据类型,方便后续操作。
(忘记做什么的同学可以看这里)
df['Height']=df['Height'].apply(lambda x:x[0:-3])
df['Weight']=df['Weight'].apply(lambda x:x[0:-3])
df[['Height','Weight']]=df[['Height','Weight']].astype('int')
我们可以查看修改后的数据:
df[['Weight','Height']].head()
使用 agg() 查看所有玩家身高和体重的平均值和最大值:
df[['Height','Weight']].agg(['mean','max','min'])
可以看到,数据集中球员的平均身高达到了181cm,平均体重为75kg。
以上操作的主要目的是暖大家的手。 下面才是我们对这个玩家数据集分析的真正开始。
作为非职业球员(呵呵,球迷或者足球爱好者),我们当然还是想看看数据能否体现球员的个人实力。 那么下面我们就来进行深入的分析。
3.通过球员数据识别球员能力
在我们的玩家数据集中,一共有两个数据:评分和技术水平。 这两个数据是我们的主要研究目标。 我们将围绕这两个数据确定研究需求。
研究需求:
高分和低分的依据是什么()? 如何构建评分依据?
技术水平()的评价标准是什么? 如何构建评价标准?
研究需求初步解读:
首先我们加深一下对我们的目标栏目的理解:
(1) 得分():
df['Rating'].unique()
df['Rating'].nunique()
可以看到,score()的目标值是连续的中超球员数据统计,一共有49个不同的值。
(二)技术水平():
df['Skill_Moves'].unique()
df['Skill_Moves'].nunique()
可以看到,技术级别()更像是分类型的,从1到5一共有五个级别。
进行玩家分析之前需要了解的事项:
众所周知,足球场上一共有11名球员,大致可以分为两类:1守门员,和非守门员(前锋、中场、后卫)。 守门员和非守门员的能力肯定是不同的。 存在差异,所以我们在通过球员数据来识别球员能力时,不能遵循同一套标准。
对于门将来说,我们更关注他的护框能力,这与其他非门将球员完全不同。
我们可以通过查看数据来进一步观察守门员和非守门员能力的差异:
我们提取了7列特征:
姓名 位置 速度 速度 射门 任意球准确度 射门节能能力 守门员反射能力
接下来,我们看看前五名球员之间的数值差异:
df[['Name','Preffered_Position','Speed','Finishing','Shot_Power','GK_Diving','GK_Reflexes']].head()
上述五名球员中,前四名是非守门员,第五名是守门员。
从数字上可以清楚地看出差异。 (忘记各个特征中文名的同学可以去看上面的,我就不改数据表了)
下面开始正式分析球员能力值的评分标准~1.守门员评分标准
数据集中,GK的意思是守门员(守门员)。 同时,用来衡量守门员能力的主要特征有五个,分别是:
守门员的定位能力、守门员的踢球能力、守门员丢球的机会、守门员的反应
因此,我们可以提取这些列特征,连同球员得分和技能水平,将它们绘制成一个新的数据表——守门员数据表。
df_GK = df[['Name','Rating','Skill_Moves','GK_Positioning','GK_Diving'
,'GK_Kicking','GK_Handling','GK_Reflexes']][df['Preffered_Position']=='GK']
检查表状态:
df_GK.head()
查看技能等级的分级():
df_GK['Skill_Moves'].unique()
可以看到,所有守门员中,技术级别只有1和2两个。
让我们进一步检查级别数:
df_GK['Skill_Moves'].value_counts()
可以看到,技能等级1的玩家有2002人,等级2的玩家只有1人,差距太大了。 其实L这里已经考虑了数据平衡,但是效果不是很好。
综合考虑后决定,在考虑守门员能力时,只考虑得分(),不考虑技术水平()。
(由于在数据表中,球员的单一特征得分越高,证明该球员的能力越突出。也就是说中超球员数据统计,这里的特征都是数值类型,而不是类别特征。因此,这里我们不需要独热编码。)
正如您所看到的,特征列都是数字。
下面,我们将结合这五个特点,利用机器学习的方法和技术进行分析。 (这分为几个部分。由于篇幅原因,所有内容可能会分为几篇文章。)
1.回归树
首先,我们使用决策树中的r(回归树)进行分析。
1. 将数据集拆分为训练集和测试集
导入制作决策树所需的包:
from sklearn import tree
from sklearn.model_selection import train_test_split
首先,按特征和目标拆分原始数据集:
df_x=df_GK.drop(labels=['Name','Rating','Skill_Moves'],axis=1)
df_y1=df_GK.loc[:,'Rating']
然后,使用将数据分成训练集和测试集。
注意~这里我们指定了分割系数为0.3,这意味着7/10的数据将作为训练集,剩下的3/10的数据将作为测试集。
#指定评分为目标时:
X_train, X_test, Y_train, Y_test = train_test_split(df_x,df_y,test_size=0.3)
让我们开始建模并进行数据训练:
reg = tree.DecisionTreeRegressor(random_state=0)
reg = reg.fit(X_train, Y_train)
检查测试集上的准确性(将在训练集上训练的模型应用于测试集并检查拟合得分)
score = reg.score(X_test, Y_test)
score
可以看到拟合度比较高,这意味着这里我们可以使用回归树来预测玩家评分。
2.同时,我们还可以画出决策树。 (但如果考虑到实际问题中超球员数据统计,这里其实并不推荐这样做)
import graphviz
reg = tree.DecisionTreeRegressor(random_state=0)
reg = reg.fit(X_train, Y_train)
dot_data = tree.export_graphviz(reg
,out_file = None
,class_names=["球员评分"]
,filled=True
,rounded=True
)
graph = graphviz.Source(dot_data)
graph
此外,我们还可以利用随机森林回归、线性回归、逻辑回归,包括支持向量机等方法来进行模型拟合和预测。 当然,每种方法使用时的步骤和注意事项略有不同。 下次我会向你解释的。
以上就是内容。 感谢您的仔细阅读。 同时欢迎感兴趣的朋友一起讨论学习。 如果想了解更多可以阅读我的其他文章,也可以持续关注我的更新~
标签: 中超球员数据统计