【python数据分析】足球运动员的特征分析

写在前面

本文是跟哔哩哔哩的一个教程一步一步实现做的,视频链接献上。
【一小时快速入门】python数据科学分析实战

数据集概况

数据集包含的是2017年所有活跃的足球运动员
本次数据集的来源是kesci,提供者是Ustinian


  • 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 门将反应度

加载数据集
# 导入相关的库
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

mpl.rcParams["font.family"] = "AR PL UMing CN"
mpl.rcParams["axes.unicode_minus"] = False
# 加载数据集
players = pd.read_csv("dataset/FullData.csv")
# 设置展示的最大列数
pd.set_option("max_columns",100)
players.head()

在这里插入图片描述

对数据集进行简单的处理查看
# 通过info方法查看每列的缺失信息。也可以查看每类的数据类型
players.info()

在这里插入图片描述
     通过观察可以发现,该数据集中有17588条信息,可以发现National_Position(国家队位置)和National_Kit(国家队的号码)是存在数据缺失的,其余的属性值中:Club_Position,Club_Kit,Club_Joining,Contract_Expiry也是存在缺失的
     对缺失数据的处理,往往要加入经验的判断,哪些需要忽略,哪些需要进行处理

     接来下打开原文件,通过观察可以发现缺失的后面那4个属性的值都在同一行(execl打开排序查看),因此对其进行数据补全操作

players = players[players["Club_Position"].notnull()]
players.info()

在这里插入图片描述
     通过观察输出结果,Club_Position,Club_Kit,Club_Joining,Contract_Expiry 中缺失的值已经被补全了

查看异常值
# 查看异常值
players.describe()

在这里插入图片描述
使用describe方法,可以看到对象中属性的数量count,平均值mean,标准差std,最小值min,四分之一分位点25%,中位数50%,四分之三分位点75%,最大值max。通过这种方式,可以看到数据中是否有异常点的信息。

是否包含重复值
# 是否包含重复值
players.duplicated().any() #False 无重复值
# 如果有重复值
# players = players.drop_duplicates(inplace=True)

在这里插入图片描述

检查数据集中是否有重复值
调用duplicated()是用于查看当前数据中的每一行是否有重复值,返回布尔型,但是只用该方法会返回数据集中每一行是否包含重复值,显得太啰嗦,而我们只想要知道该数据集中是否存在重复值
再使用any()方法(只要存在真,结果就返回true),查看整个数据集是否存在重复值。相当于对duplicated()结果中的每一行返回值,进行一个逻辑运算
通过结果可以发现,我们的数据集中并无重复值

将身高体重转换成数字类型
#players.head()
players["Height"] = players["Height"].map(lambda x: int(x.replace("cm","")))
players["Weight"] = players["Weight"].map(lambda x: int(x.replace("kg","")))
#############还可以这样处理###############
# players["Height"] = players["Height"].str.replace("cm","").astype(np.int)
# players["Weight"] = players["Weight"].str.replace("kg","").astype(np.int)
players.head()

在这里插入图片描述

players.info()

在这里插入图片描述

查看运动员身高、体重、评分的信息分布情况
# dataframe上调用plot   kde核密度图
players[["Height","Weight","Rating"]].plot(kind="kde")

在这里插入图片描述

左脚与右脚选手在数量上的偏差
# players["Preffered_Foot"].value_counts()
# 画图展示
players["Preffered_Foot"].value_counts().plot(kind="bar")

在这里插入图片描述

从球员平均评分角度考虑,拥有Top10评分能力的俱乐部/国家队。(超过20人)

1.俱乐部角度

# 从球员的平均评分考虑:先根据Club分组,再获取Rating,然后对分组的内容进行计算
s=players.groupby("Club")["Rating"].agg(["count","sum","mean"])

# 对结果s进行过滤,只需要前10的内容
s=s[s["count"]>10]

# 根据count将s进行降序排序,显示前十位的结果
s.sort_values("count",ascending=False).head(10)

在这里插入图片描述

# 根据平均评分mean将s进行降序排序,显示前十位的结果
s.sort_values("mean",ascending=False).head(10)

在这里插入图片描述
2.国家角度

# 从球员的平均评分考虑:先根据Nationality分组,再获取Rating,然后对分组的内容进行计算
s1=players.groupby("Nationality")["Rating"].agg(["count","sum","mean"])

# 对结果s进行过滤,只需要前10的内容
s1=s1[s1["count"]>10]

# 根据平均评分mean将s进行降序排序,显示前十位的结果
s1.sort_values("mean",ascending=False).head(10)

在这里插入图片描述

哪个俱乐部拥有更多忠心的球员(5年及其以上的球员)
# 获取年份,并转化成数值类型
year=players["Club_Joining"].map(lambda x:int(x.split("/")[-1]))
# 除了用int()转化,也可以使用np.int转化
# year=year.astype(np.int)

# 获取5年以上球员的信息
t=players[((2020-year)>=5) & (players["Club"] !="Free Agents")]

# 将结果显示出来
t["Club"].value_counts().head(10).plot(kind="bar")

在这里插入图片描述

全体足球运动员的出生月份与评分是否有关系
# 全体运动员的出生月份与评分是否有关系
y=players["Birth_Date"].str.split("/",expand=True)
y[0].value_counts().plot(kind="bar")

在这里插入图片描述

足球运动员的位置是否与位置有关
# 足球运动员的位置是否与位置有关
# 去除替补球员和后备队球员
t=players[(players["Club_Position"] != "Sub" ) & (players["Club_Position"] !="Res")]

# 为了便于观察,将对应球员俱乐部的号码和位置进行分组
x=t.groupby(["Club_Kit","Club_Position"]).size()
x[x>50].plot(kind="bar")

在这里插入图片描述
通过观察足球运动员的号码与位置的条形图,可以发现号码和位置基本上是有关系的

足球运动员的身高和体重是否有关联
players.plot.scatter(x="Height",y="Weight")

在这里插入图片描述
通过散点图可以找到,身高和体重是线性正相关的

查看相关系数,来观察哪些特征对数据集的影响程度大
players.corr()

在这里插入图片描述
通过这个相关系数表格,可以看出属性两两之间的相关度,数字越大,相关性越大。从表格可以发现,我们的反应能力Reactions与Rating的相关性是0.087811,相关性是很大的

观察年龄与评分之间的关系
# 使用pandas将年龄Age进行离散化
t["Age"]=pd.cut(players["Age"],bins=[0,20,30,40,60],labels=["小","中","大","很大"])

# 根据t的年龄进行分组,得到评分的均值
t.groupby("Age")["Rating"].mean().plot(kind="line",xticks=[0,1,2,3,4],marker="o")

在这里插入图片描述

总结
  • 这篇文章主要是关于足球运动员数据集的一个分析,所作的工作仅是对数据的一个分析,重点在于熟悉python的数据分析方法
  • 首先是对数据的预处理:缺失信息处理(过滤,补全),异常值处理,重复值处理
  • 对想要调查的数据进行数据分析,画出相关的图:条形图bar,线性图line,散点图,核密度估计图kde
  • 0
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值