数据分析案例-足球运动员分析

简介: 数据分析案例-足球运动员分析

加载数据

#加载足球运动员数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#支持中文
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['KaiTi'] #
指定默认字体
plt.rcParams['axes.unicode_minus'] = False #
解决保存图像是负号'-'显示为方块的问题
player = pd.read_csv('FullData.csv')

查看数据

#head() 显示前几行
player.head()

#tail()后几行
player.tail(6)
#sample 随机采样
player.sample()
#设置显示的列
pd.set_option('display.max_columns',10)
player.head()


数据详细


缺值处理

查看数据的数据类型

player.info()


从上述示例可以看到总共17588行,但National_Position(国家队 位置) 是1075行,Club_Position (俱乐部位置)17587行。我们 知道有的足球运动员是没有进入国家队的,所以National_Position 缺值是正常情况。但Club_Position缺值需要处理。


删除Club_Position的缺失值

#查看缺失值
player['Club_Position'].isnull().any()
#获取缺失值数据
player[player['Club_Position'].isnull()]
#获取非缺失值数据
player =
player[player['Club_Position'].notnull()]
player.info()


异常值处理

describe方法得到数据的描述性统计信息,比如max min, mean,std进行异常值分析

数据的描述性统计信息


player.describe()


使用箱线图辅助查看异常值

player.plot(kind='box')
#获取评分 和盯人能力
player[['Rating','Marking']].plot(kind='box')
player['Rating'].describe()

重复值处理

查看是否有重复数据

player.duplicated().any()
# 重复值
# 没有重复值
# 如果有重复值,查看重复的数据是什么,根据
duplicated得到布尔数据,将布尔数组传递给players,
得到重复值数据
# 设置keep参数,【first last False】
players[players.duplicated()]
# 如果想查看数据集中所有重复数据
players[players.duplicated(keep=False)]
# 假设存在重复值,删除重复值,可以通过keep设置删除的
方式,【first last False】
players.drop_duplicates(inplace=True)


运动员身高和体重分布

从查看数据结果可以看到运动员身高Height、体重Weight的数据后 都添加了相应的单位。要分析运动员身高和体重的分布,首先需要 将身高Height和Weight数据的单位去掉。

# 使用矢量化字符串方式处理
player['Height'] = player['Height'].str.replace('cm','')
player['Weight'] = player['Weight'].str.replace('kg','')
players.head()
players.info()
# 替换后,身高和体重仍然是Object类型,不是数值型,需要进一步的类型转换
players['Height'] = players['Height'].astype(np.int)
players['Weight'] = players['Weight'].astype(np.int)
players.info()
# 使用map和apply
def handle(m:str) ->int:
    return int(m.replace('cm',''))
players['Height'] =players['Height'].map(lambda item:int(item.replace('cm','')))
players['Weight'] =players['Weight'].map(lambda item:int(item.replace('kg','')))
players.head()
players.info()


身高、体重、评分分布

players['Height'].describe()
# 使用直方图查看分布
plt.hist(players['Height'])
players['Height'].plot(kind='hist',bins=15)
players['Weight'].plot(kind='hist',bins=15)
players['Rating'].plot(kind='hist',bins=15)
# 使用核密度图查看数据分布
players['Height'].plot(kind='kde')
players['Weight'].plot(kind='kde')
players['Rating'].plot(kind='kde')



左脚右脚使用数量

查看足球运动员左脚右脚使用情况

player['Preffered_Foot'].head(10)


可以看到,足球运动员踢球有使用左脚也有使用右脚。要统计使用 左脚和右脚的数量,需要按Preffered_Foot进行分组,计算其 count()值。我们可以使用饼状图来显示左脚右脚选手数量的差别。

使用饼状图来显示左脚右脚选手数量的差别

g = player.groupby('Preffered_Foot')
s = g['Preffered_Foot'].count()
s.plot(kind='pie',autopct='%.2f')


使用条形图来显示左脚右脚选手数量的差别

# 上面的操作,其实就是针对Preffered_Foot分组,再统计每组的数量
player['Preffered_Foot'].value_counts().plot(kind='barh')


俱乐部球员评分分析

从球员平均分角度分析,拥有top10评分能力俱乐部。

俱乐部球员的平均评分

group = player.groupby('Club')
group['Rating'].mean()

对俱乐部平均评分进行排序取前10

top10=group['Rating'].mean().sort_values(ascending=False).head(10)
#绘制条形图
top10.plot(kind='barh')

对俱乐部人数大于30人的俱乐部,平均评分进行排序取前 10

#俱乐部人数大于20
group['Rating'].agg(['mean','count']).sort_values('mean',ascending=False).head(10).plot(kind='bar')
#俱乐部人数大于30
result =group['Rating'].agg(['mean','count']).sort_values('mean',ascending=False)
result[result['count']>30].head(10).plot(kind='bar')


国家球员的平均分前10,且国家人数大于20

group=player.groupby('Nationality')
result =group['Rating'].agg(['mean','count']).sort_values('mean',ascending=False)
result[result['count']>20].head(10).plot(kind='bar')


足球运动员数是否与出生日期相关

获取足球运动员日期

#获取出生日期
player['Birth_Date']
#切分
t =player['Birth_Date'].str.split('/',expand=True)
# 对月份进行分析:根据月份来分组,统计每一个月对应球员数量,最后柱状图表示
t[0].value_counts(ascending=False).plot(kind='bar')
t[1].value_counts(ascending=False).plot(kind='bar')
t[2].value_counts(ascending=False).plot(kind='bar')




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


# 通过散点图查看变量之间关系:身高与体重
players.plot(kind='scatter',x='Height',y='Weight')
# # 身高和评分之间的关系
players.plot(kind='scatter',x='Height',y='Rating')
#使用相关系数描述身高和体重之间的关系
players['Height'].corr(players['Weight'])
players['Height'].corr(players['Rating'])



与评分相关性强的指标有哪些?

#相关系数矩阵
players.corr()
#相关系数矩阵类型
type(players.corr())
players.corr()
['Rating'].sort_values(ascending=False)


年龄与评分是否相关

# 散点图
players.plot(kind='scatter',x='Age',y='Rating')
# # 相关系数
players['Age'].corr(players['Rating'])
# cut将数据切分为离散区间表示,bins表示切分成几个区间
# 默认情况下,区间对应数值范围,通过labels设置区间标签内容
pd.cut(players['Age'],bins=4,labels=['少年队','青年队','成年队','老将队'])
# 根据年龄段来分组,统计每组年龄均值,用折线图描述年龄段和评分之间关系
players['Age2'] =pd.cut(players['Age'],bins=4,labels=['少年队','青年队','成年队','老队'])
players.groupby('Age2')
['Rating'].mean().plot('line',marker='o')
# bins设置区间个数,区间等分
# 还可以自定义区间范围
pd.cut(players['Age'],bins=[10,16,22,33,45],labels=['少年队','青年队','成年队','老将队'])







目录
相关文章
|
3月前
|
数据采集 存储 数据挖掘
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
本文介绍了一个基于Python的书旗网小说网站数据采集与分析系统,通过自动化爬虫收集小说数据,利用Pandas进行数据处理,并通过Matplotlib和Seaborn等库进行数据可视化,旨在揭示用户喜好和市场趋势,为图书出版行业提供决策支持。
320 6
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
|
1月前
|
数据挖掘 UED
ChatGPT数据分析——探索性分析
ChatGPT数据分析——探索性分析
|
1月前
|
数据可视化 数据挖掘 数据处理
ChatGPT数据分析应用——热力图分析
ChatGPT数据分析应用——热力图分析
|
1月前
|
数据挖掘
ChatGPT在常用的数据分析方法中的应用(分组分析)
ChatGPT在常用的数据分析方法中的应用(分组分析)
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
如何理解数据分析及数据的预处理,分析建模,可视化
如何理解数据分析及数据的预处理,分析建模,可视化
52 0
|
1月前
|
数据挖掘
ChatGPT在常用的数据分析方法中的应用(对比分析)
ChatGPT在常用的数据分析方法中的应用(对比分析)
|
2月前
|
机器学习/深度学习 人工智能 数据挖掘
数据分析师是在多个行业中专门从事数据搜集、整理和分析的专业人员
数据分析师是在多个行业中专门从事数据搜集、整理和分析的专业人员
40 3
|
3月前
|
数据采集 数据可视化 关系型数据库
【优秀python 数据分析案例】基于python的穷游网酒店数据采集与可视化分析的设计与实现
本文介绍了一个基于Python的穷游网酒店数据采集与可视化分析系统,通过爬虫技术自动抓取酒店信息,并利用数据分析算法和可视化工具,提供了全国主要城市酒店的数量、星级、价格、评分等多维度的深入洞察,旨在为旅行者和酒店经营者提供决策支持。
114 4
【优秀python 数据分析案例】基于python的穷游网酒店数据采集与可视化分析的设计与实现
|
3月前
|
JSON 数据挖掘 API
案例 | 用pdpipe搭建pandas数据分析流水线
案例 | 用pdpipe搭建pandas数据分析流水线
|
3月前
|
数据采集 数据可视化 数据挖掘
【优秀python案例】基于python爬虫的深圳房价数据分析与可视化实现
本文通过Python爬虫技术从链家网站爬取深圳二手房房价数据,并进行数据清洗、分析和可视化,提供了房价走势、区域房价比较及房屋特征等信息,旨在帮助购房者更清晰地了解市场并做出明智决策。
142 2
下一篇
无影云桌面