day8 足球运动员分析

足球运动员分析

背景信息

当前,足球运动是最受欢迎的运动之一(也可以说没有之一)。

任务说明

我们的任务,就是在众多的足球运动员中,发现统计一些关于足球运动员的共性,或某些潜在的规律。

数据集描述

数据集包含的是2017年所有活跃的足球运动员。

  • 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"] = "SimHei"
mpl.rcParams["axes.unicode_minus"] = False

加载相关的数据集

  • 加载相关的数据集(注意原数据集中是否存在标题),并查看数据的大致情况。
  • 可以使用head / tail,也可以使用sample。
  • 列没有显式完整,我们需要进行设置。(pd.set_option)
data = pd.read_csv("FullData.csv")
display(data.head(5))
# display(data.sample())
# 当列数较多时,默认情况下列不会显示完整。我们可以通过set_option方法来进行设置。
pd.set_option("display.max_columns", 100)  # 100>53,所以全部显示
display(data.head(5))

在这里插入图片描述

数据探索与清洗

缺失值处理

  • 通过inof查看缺失值信息(以及每列的类型信息)。
  • 可以通过isnull, any, dropna,fillna等方法结合使用,对缺失值进行处理。
# 查看缺失值信息,发现国家队的位置和国家队的号码缺失比较多
# 究其原因:运动员很多,但是能进国家队的就比较少了
display(data.info())

在这里插入图片描述

# 俱乐部不缺失,但是俱乐部中的位置和编号缺失,就不正常了
display(data[data["Club_Position"].isnull()])
# 发现俱乐部位置和编号的缺失都在这里,所以直接将这一条记录过滤掉
data=data[data["Club_Position"].notnull()] # 过滤掉后的数据
# 查看俱乐部位置是否还有缺失值
print(data["Club_Position"].isnull().any()) 

在这里插入图片描述

异常值处理

  • 通过describe查看数值信息。
  • 可配合箱线图辅助。
display(data.describe())

在这里插入图片描述

data[["Age", "Rating"]].plot(kind="box")

在这里插入图片描述

重复值处理

  • 使用duplicate检查重复值。可配合keep参数进行调整。
  • 使用drop_duplicate删除重复值。
# 没有重复值。
display(data.duplicated().any())   # False没有重复值
# 如果存在重复值,则删除重复值。
data.drop_duplicates(inplace=True)

在这里插入图片描述

将身高与体重处理成数值类型,便于分析。

方法1:

# 观察一下身高和体重的信息
display(data.sample())
display(data.info())
# 注意:身高与体重是字符串类型,替换掉cm或kg之后,依然还是字符串类型,不会自动变成数值类型。
# 将cm和kg去掉,并转换成int型
t = data.copy()
t["Height"] = t["Height"].apply(lambda x: x.replace("cm", "")).astype(np.int32)
t["Weight"] = t["Weight"].apply(lambda x: x.replace("kg", "")).astype(np.int32)
display(t.head())
display(t.info())

在这里插入图片描述
在这里插入图片描述
方法2:

# 也可以使用字符串矢量化运算来解决。
data["Height"] = data["Height"].str.replace("cm", "").astype(np.int32)
data["Weight"] = data["Weight"].str.replace("kg", "").astype(np.int32)
data.info()

在这里插入图片描述

运动员的身高,体重,评分信息分布。

# 直方图是离散的统计,核密度图是连续的统计。身高,体重,与评分服从正态分布。
display(data[["Height", "Weight", "Rating"]].plot(kind="hist"))
display(data[["Height", "Weight", "Rating"]].plot(kind="kde"))

在这里插入图片描述

左脚与右脚选手在数量上是否存在偏差?

# 解决方法不止一种。
# 1 通过分组,然后聚合统计。
g = data.groupby("Preffered_Foot")
display(g["Preffered_Foot"].count())
display(g["Preffered_Foot"].count().plot(kind='bar'))

在这里插入图片描述

# 2 通过分组对象的size方法。
display(g["Preffered_Foot"].size())
display(g.size().plot(kind="bar"))

在这里插入图片描述

# 3 使用value_counts
# value_counts 默认根据值数量,按降序来进行排列。
# 我们可以通过ascending参数来控制升序还是降序。
data["Preffered_Foot"].value_counts(ascending=True).plot(kind="bar")

在这里插入图片描述

从球员平均评分上考虑,拥有top10评分能力的俱乐部 / 国家。【超过20人】

# 对俱乐部的分数的平均分统计
g = data.groupby("Club")
display(g["Rating"].mean().sort_values(ascending=False))
v = g["Rating"].agg(["mean", "count"])
v = v[v["count"] > 20]
display(v)
v.sort_values("mean", ascending=False).head(10).plot(kind="bar")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 对国家队统计
g = data.groupby("Nationality")
display(g["Rating"].mean().sort_values(ascending=False))
v = g["Rating"].agg(["mean", "count"])
v = v[v["count"] > 20]
display(v.head(10))
v.sort_values("mean", ascending=False).head(10).plot(kind="bar")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

哪个俱乐部拥有更多忠心的球员(5年及以上)?

x='07/01/2009'
a=x.split("/")
print(a)
print(a[-1])

在这里插入图片描述

# 获取球员加入俱乐部的年份。
display(data["Club_Joining"].head(2))
year = data["Club_Joining"].map(lambda x: x.split("/")[-1]).astype(np.int)
display(year.head(2))
# 用2017(获取数据的时间)-加入的时间>=5(同时,去掉自由身的球员)
t = data[(2017 - year >= 5) & (data["Club"] != "Free Agents")]
display(t.head(2))
# t.groupby("Club").size()
display(t["Club"].value_counts().head(5))  # 俱乐部超过5年球员的数量
t["Club"].value_counts().head(10).plot(kind="bar")

在这里插入图片描述
在这里插入图片描述

足球运动员是否是出生年月相关?

  1. 全体运动员
  2. 知名运动员(80分及以上)
display(data["Birth_Date"].head(2))
t = data["Birth_Date"].str.split("/", expand=True)  # 矢量化张开成dateframe格式
display(t.head(2))
# display(t[2].value_counts().plot(kind="bar"))  #年
display(t[0].value_counts().plot(kind="bar"))
# display(t[1].value_counts().plot(kind="bar"))

在这里插入图片描述

足球运动员号码是否与位置相关?

# 去掉替补球员与预备队球员。
display(data["Club_Position"].head(2))
display(data["Club_Kit"].head(2))
t = data[(data["Club_Position"] != "Sub") & (data["Club_Position"] != "Res")]
display(t.groupby(["Club_Kit", "Club_Position"]).size())
t.groupby(["Club_Kit", "Club_Position"]).size().sort_values(ascending=False).head(10).plot(kind="bar")

在这里插入图片描述
在这里插入图片描述

身高与体重是否具有相关性?

# 身高与体重息息相关。
display(data.plot(kind="scatter", x="Height", y="Weight"))  # 相关
# 身高与评分关联性不大。
display(data.plot(kind="scatter", x="Height", y="Rating"))  # 不相关

在这里插入图片描述

哪些指标对评分的影响最大?

data.corr()  # 越大越相关

在这里插入图片描述

假设我们不清楚后2列的具体含义是什么,分析该标题可能的含义。

display(data.head(2))
data.groupby("Club_Position")["GK_Handling"].mean().sort_values(ascending=False).plot(kind="bar")

在这里插入图片描述

年龄与评分具有怎样的关系?

display(data.plot(kind="scatter", x="Age", y="Rating"))  # 不明显

在这里插入图片描述

# 将连续的值切割成离散的形式。
# 注意:cut切割的桶,区间范围与直方图有些不同。cut的区间是前开后闭的形式。(]
# cut方法返回的值默认为我们桶的区间范围值,我们也可以通过labels属性来显式指定具体的标签。
display(pd.cut(data["Age"], bins=5))
display(pd.cut(data["Age"], bins=5, labels=["1区间", "2区间", "3区间", "4区间", "5区间"]).head(5))

在这里插入图片描述

t = data.copy()
# cut方法,如果bins是整数类型,则区间(桶)进行等分设置,如果区间不等分,则我们可以显式设置区间的取值范围。
# # 对bins参数传递一个数组,数组来指定区间的具体值。
t["Age2"] = pd.cut(t["Age"], bins=[1, 20, 30, 40, 100], labels=["初出茅庐", "快速成长", "当打之年", "衰老之年"])
display(t.head(5))
t.groupby("Age2")["Rating"].mean().plot(marker="o", xticks=[0, 1, 2, 3])

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/69313.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

The Most Common Habits from more than 200 English Papers written by Graduate Chinese Students

目录 定冠词/不定冠词的使用 a an the句子不要太长在段落开始直接陈述中心思想不要在段落开头直接使用时间状语从句将重要的主语放在最最开始以表示强调which/that所引导的定语从句的指代不明Respectively的使用有关in this paper/study数字‘Figure’ and ‘Table’‘such as’…

GPT系列的数据集之谜

文|Alan D. Thompson 源|OneFlow 译|杨婷、徐佳渝、贾川 半个月以来,ChatGPT这把火越烧越旺。国内很多大厂相继声称要做中文版ChatGPT,还公布了上线时间表,不少科技圈已功成名就的大佬也按捺不住&#xf…

Claude 2 解读 ChatGPT 4 的技术秘密:细节:参数数量、架构、基础设施、训练数据集、成本...

“ 解密 ChatGPT 4的模型架构、训练基础设施、推理基础设施、参数计数、训练数据集组成、令牌计数、层数、并行策略、多模态视觉适应、不同工程权衡背后的思维过程、独特的实施技术。” ‍‍‍‍ 01 — 最近偶然看到一份文档《GPT-4 Architecture, Infrastructure, Training Da…

Window的创建

Window的创建 上一篇说到了Window和WindowManager的关系并且讲述了WindowManager如何添加Window与Window内部的三个方法的实现 这篇主要讲几个常见的Window的创建比如Activity,Dialog和Toast 其中Activity属于应用Window Dialog属于子Window Toast属于系统Window z-order…

密码验证 长度八位包含字母数字特殊字符

View Code 1 #region 密码验证2 if (tbPassword.Text "")3 {4 CommonFunction.ShowMessage(this.Page, "密码不能为空");5 return;6 }7 …

smart计算机英语作文,关于科技的英语作文(精选5篇)

关于科技的英语作文(精选5篇) 在平平淡淡的日常中,大家都跟作文打过交道吧,写作文可以锻炼我们的独处习惯,让自己的心静下来,思考自己未来的方向。一篇什么样的作文才能称之为优秀作文呢?下面是小编精心整理的关于科技…

华为鸿蒙的科技话题作文800字,科技的发展作文800字4篇

科技的发展作文800字4篇 科技改变生活,可以说没有科技的高速发展就没有今天的我们。那么以下是小编为大家整理的科技的发展作文800字,欢迎大家阅读! 科技的发展作文800字(一) 随着科学技术的高度发展,科技是利是弊成了人们热议的话…

计算机未来的发展英语作文,关于科技发展英语作文(通用10篇)

关于科技发展英语作文(通用10篇) 在平平淡淡的学习、工作、生活中,大家总免不了要接触或使用作文吧,写作文可以锻炼我们的独处习惯,让自己的心静下来,思考自己未来的方向。那么一般作文是怎么写的呢?下面是小编为大家整…

计算机技术发展作文,【推荐】科技发展作文三篇

【推荐】科技发展作文三篇 在日复一日的学习、工作或生活中,大家都写过作文,肯定对各类作文都很熟悉吧,作文是经过人的思想考虑和语言组织,通过文字来表达一个主题意义的记叙方法。相信许多人会觉得作文很难写吧,下面是…

Android混合开发快速上手掌握

目录 一 混合开发简介 二 Android-Js互调 2.1 准备自己的html文件 2.2 WebView控件的准备设置 2.3 Android调用Js代码 2.4 Js调用Android方法和传参数 三 常用的几个方法和注意点 3.1 WebViewClient中的shouldOverrideUrlLoading拦截url 3.2 WebViewClient中的onPageS…

安卓开发快速集成即时通讯聊天,只需几行代码轻松实现

信贸通即时通讯系统,一款跨平台可定制的 P2P 即时通信系统,为电子商务网站及各行业门户网站和企事业单位提供“一站式”定制解决方案,打造一个稳定,安全,高效,可扩展的即时通信系统,支持在线聊天…

IM即时通讯聊天,5分钟显示一次时间。JS

想在聊天界面想做个和微信一样的时间显示 达到下图这种效果 百度了一下,发现都是有点不全的,把网上的合并了一下组成下方的js文件 记录一下 1.建议新建一个JS文件 common.js 1.第一个方法是把时间戳转成具体时间日期 /** * 对Date的扩展,将…

GPT-4 Copilot X震撼来袭!写代码效率10倍提升,码农遭降维打击

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享 点击关注#互联网架构师公众号,领取架构师全套资料 都在这里 0、2T架构师学习资料干货分 上一篇:2T架构师学习资料干货分享 大家好,我是互联网架构师&…

什么是生成器 — 一篇文章让你看懂

嗨嗨,我是小圆 ~ 今天来给大家讲讲什么是生成器 生成器是 Python 初级开发者最难理解的概念之一,虽被认为是 Python 编程中的高级技能,但在各种项目中可以随处见到生成器的身影,你得不得去理解它、使用它、甚至爱上它。 提到生成器…

怎么才能大批量生成原创文章

要大批量生成原创文章并不容易。毕竟,原创文章需要花费较多地时间和精力,才能够展现出高质量、有价值地内容。以下是一些方法可以帮助您大批量生成原创文章:1. 利用关键词通过使用关键词工具,寻找与您网站或品牌相关地长尾关键词。…

新媒体必备小技能——文章生成图片

相信公众号运营大家都不陌生了,与运营和自媒体相关的工作大多都会用到图文编辑,当然好看的排版直接影响读者的阅读体验!在日常编辑推文以及制作宣传的过程中,图片是必不可少的重要组成部分!96编辑器的一键生成图片功能…

狗屁文章生成器-批量生成原创文章自动发布网站-免费下载

狗屁文章生成器,什么是狗屁文章生成器,狗屁文章生成器从字面意思都能理解出来,就是生成的文章毫无逻辑感,胡乱生成,毫无可读性。只需要输入关键词就能实现狗屁文章生成。狗屁文章生成器。火于2020年某老板喊一员工写3000字原创检讨…

AI文章生成

文章 🧐一、我们在做什么🥱二、项目详情1.前端🙂(1)基本要求😐(2)批量操作功能🙁(3)模式选择功能 😟(4)模型选…

文章生成器-原创文章生成器

在网络营销领域,优质文章是吸引新客户和保留老客户的重要工具。然而,生成高质量且符合SEO优化的文章并不是一件容易的事情。这就是为什么网站文章生成器如今备受欢迎的原因。而在众多的文章生成工具中,147GPT批量生成文章软件是一款非常出色的…

GPT关键词挖掘,自动关键词文章生成

随着互联网的发展,内容营销已成为企业营销策略中不可或缺的一环。有效的关键词文章生成可以帮助企业吸引更多的潜在客户,提高品牌曝光度和转化率,从而实现营销目标。 关键词文章生成是指根据特定的关键词和主题,使用软件工具自动生…