目录
加载数据及数据集介绍
17589条数据
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')
player
显示几行数据
#head() 显示前几行 默认五行
player.head() # head(8) 显示8行
#tail()后几行
player.tail() # tail(8) 显示8行
#sample 随机采样一行
player.sample() # sample(5) 随机5行
#设置显示的列
pd.set_option('display.max_columns',4)
player.head()
处理缺失值
# 查看列名
player.info()
# 查看缺失值
player[player['Club_Position'].isnull()] # 或 isna()
# 处理缺值
player = player[player['Club_Position'].notnull()] # 或 notna() 或~取反想·
异常值处理
#获取描述统计信息
player.describe() # 或player.plot.box()
# 筛选
player[(player['Rating']<0) & (player['Rating']>100)]
重复值处理
#查看是否有重复值
player.duplicated().any()
#获取重复值
player[player.duplicated()]
player[player.duplicated(keep='first')] # 获取不包括第一条重复值 keep='last'获取不包括最后一条重复值 keep=False获取所有重复数据
#删除重复数据
player.drop_duplicates(keep='first',inplace=True) #last False
player[~player.duplicated()]
身高体重数据处理
# 删除单位并转换类型
# 普通方式
player['Height'] = player['Height'].str.replace('cm','')
player['Weight'] = player['Weight'].str.replace('kg','')
player['Height'] = player['Height'].astype(int)
player['Weight'] = player['Weight'].astype(int)
#使用apply()函数
def handle(m:str) ->int:
return int(m.replace('cm',''))
player['Height'] = player['Height'].apply(handle)
#匿名函数
player['Weight'] = player['Weight'].apply(lambda m :int(m.replace('kg','')))
身高体重评分数据分布
#调用describe()查看
player['Height'].describe()
player['Weight'].describe()
#绘制直方图
plt.hist(player['Height']) #1.使用matplotlib进行绘制
player['Height'].plot(kind='hist',bins=10) #2.pandas绘制 hist直方图 bins分组数
足球运动员左脚右脚使用分析
#对Preffered_Foot进行分组并统计
group_foot = player.groupby('Preffered_Foot')
result = group_foot['Preffered_Foot'].count()
#或者 用value_counts()
result = player['Preffered_Foot'].value_counts() # 结果默认降序
#去掉左侧名称
result.name=' '
#绘制饼图
result.plot(kind='pie',autopct='%.2f',fontsize=20,figsize=(10,8))
俱乐部球员评分分析
#按俱乐部分组
group = player.groupby('Club')
#俱乐部平均评分前10 且俱乐部人数大于30
result = group['Rating'].agg(['mean','count']) # 平均值、总人数
.sort_values('mean',ascending=False) # 按平均评分排序 默认升序
result[result['count']>30].head(10).plot(kind='bar')
足球运动员数是否与出生日期相关
#评分大于等于80的球员数据
result = player[player['Rating']>80]
# 获取出生日期并分割
data = result ['Birth_Date'].str.split('/',expand=True) # expand返回df
#月份并绘制条形图
data[0].value_counts().plot(kind='bar')
相关性分析
#绘制散点图 分析身高和体重
player.plot(kind='scatter',x='Height',y='Weight')
#计算身高和体重相关系数 越接近1越相关
player['Height'].corr(player['Weight'])
#DataFrame对象 corr()生成相关系数矩阵
与评分相关性强的指标有哪些
#DataFrame对象 corr()生成相关系数矩阵
player.corr()
# 获取评分列
player.corr()['Rating'].sort_values(ascending=False)
年龄与评分相关性分析
#新增一列,对年龄进行分组并设置标签
player['Age2'] = pd.cut(player['Age'],bins=4,labels=['少年队','青年队','中年队','老年队']) # bins参数指定分成4组 默认平分 自定义分组:bins=[10,30,40,50]
#绘制图形
player.groupby('Age2')['Rating'].mean().plot(kind='line',marker='o') # marker 圆点标记