Seaborn:NBA球员数据分析案例

一、需求

1.数据读取

        获取16-17赛季NBA球员相关数据

2.数据相关性分析

        获取球员关键数据列,对计算数据列两两之间的相关性,并通过热力图呈现。

3.球员数据分析

        3.1 基本分析

                3.1.1 获取薪资在前十的球员

                3.1.2 获取效率值在前十的球员

        3.2 数据可视化

                3.2.1 用seaborn中的distplot绘图来分别看一下球员薪水、效率值、年龄这三个信息的分布情况

                3.2.1 查看球员薪水和年龄的相关性

                3.2.2 查看球员薪水、效率值、年龄、出场时间四个方向的两个相关性

                3.2.3 根据年龄段对球员划分young、old、best三类,基于年龄对球员薪水和效率值进行分析;分析球员的RPM','POINTS','TRB','AST','STL','BLK','age_cut'两两相关性图

4.球队数据分析

        4.1 球队薪资排名

                将数据按球队分组,平均薪水降序排序,获取薪水在前十的球队信息

                将数据按球队分组,按照球队正负值降序排序,如果相当按照PLAYER大小升序排序,获取前十数据

        4.2 球队年龄结构

                4.2.1 查看球队每个年龄阶段的人数。

                4.2.2年龄段的上榜人数(PLAYER)进行降序排序,如果相同,则按平均正负值进行降序排序

        4.3 球队综合实力

                根据球队平均正负值进行降序排名

        4.4 数据可视化
                4.4.1 绘制箱线图

                        获取每个球队球员薪资分布情况

                        获取每个球队球员年龄分布情况

                        获取每个球队球员出厂时间分布情况

                4.4.2 小提琴图

                        获取每个球队球员3分命中率分布情况

                        获取每个球队球员命中率分布情况

                        获取每个球队球员得分分布情况

二、实现

1. 获取数据

data = pd.read_csv('./data/nba_2017_nba_players_with_salary.csv')

 2.数据相关性分析

# 获取球员关键数据列,对计算数据列两两之间的相关性,并通过热力图呈现。
# 获取球员关键数据列
data_cor = data.loc[:,['RPM','AGE','SALARY_MILLIONS','ORB','DRB','AST','STL','BLK','TOV','PF','POINTS','GP','MPG','ORPM','DRPM']]
# 获取数据两两之间的相关性
corr = data_cor.corr()
corr.head()

# 绘制热力图
plt.figure(figsize=(20,8),dpi=80)
sns.heatmap(corr,square=True,linewidths=0.1,annot=True)

 3.球员数据分析

3.1 基本分析
# 查看16-17赛季薪资、效率值等指标在前十的球员
# 获取相关列数据:薪资、效率值(正负值)、年龄、出场时间
data1 = data.loc[:,['PLAYER','SALARY_MILLIONS','RPM','AGE','MPG']]
# 根据薪资进行降序排序,并获取前十数据
data1_salary_Top10 = data1.sort_values(by='SALARY_MILLIONS',ascending=False).head(10)
data1_salary_Top10

# 根据效率值进行降序排序,并获取在前十的球员
data1_RPM_Top10 = data1.sort_values(by='RPM',ascending=False).head(10)
data1_RPM_Top10

3.2 数据可视化
# 利用seaborn中的distplot绘图来分别看一下球员薪水、效率值、年龄这三个信息的分布情况
# 创建画布
plt.figure(figsize=(10,10))
# 分割图,多图显示
# 第一张图,显示球员薪水
plt.subplot(3,1,1) 
sns.distplot(data.SALARY_MILLIONS)
plt.ylabel('salary')
# 第二张图,显示球员效率值
plt.subplot(3,1,2) 
sns.distplot(data.RPM)
plt.ylabel('RPM')
# 第三张图,显示球员年龄
plt.subplot(3,1,3) 
sns.distplot(data.AGE)
plt.ylabel('AGE')

 

# 查看球员薪水和年龄的相关性
# kde 核密度估计图形,二维直方图hex,默认为散点图
sns.jointplot(data.SALARY_MILLIONS,data.AGE,kind='hex',height=8)  

# 查看球员薪水、效率值、年龄、出场时间四个方向的两个相关性
sns.pairplot(data1)

 

# 根据年龄段对球员划分young、old、best三类,基于年龄对球员薪水和效率值进行分析;分析球员的RPM','POINTS','TRB','AST','STL','BLK','age_cut'两两相关性图
# 根据年龄段对球员划分young、old、best三类
# 创建分类函数
def age_cut(df):
    if df.AGE <= 24:
        return "young"
    elif df.AGE >=30:
        return "old"
    else:
        return "best"
# 调用apply对年龄进行自定义划分(lambda)
data["age_cut"] = data.apply(lambda x:age_cut(x),axis=1)
data.head()

# 该列用年龄计数
data['cut'] = 1
# 基于年龄对球员薪水和效率值进行分析
# 设置背景类型
sns.set_style('darkgrid')
# 创建画布
plt.figure(figsize=(10,10),dpi=100)
# 设置图的标题
plt.title("RPM and Salary")
## old 
# 获取“old”年龄段每个球员的薪资数据(SALARY_MILLIONS)
x1 = data.loc[data.age_cut=="old"].SALARY_MILLIONS
# 获取“old”年龄段每个球员的效率值数据(RPM)
y1 = data.loc[data.age_cut=="old"].RPM
# 绘制old年龄段球员薪资与效率值分析图图
plt.plot(x1,y1,'^')
## young
# 获取“young”年龄段每个球员的薪资数据(SALARY_MILLIONS)
x2 = data.loc[data.age_cut=="young"].SALARY_MILLIONS
# 获取“young”年龄段每个球员的效率值数据(RPM)
y2 = data.loc[data.age_cut=="young"].RPM
# 绘制young年龄段球员薪资与效率值分析图图
plt.plot(x2,y2,'.')
## best
# 获取“best”年龄段每个球员的薪资数据(SALARY_MILLIONS)
x3 = data.loc[data.age_cut=="best"].SALARY_MILLIONS
# 获取“best”年龄段每个球员的效率值数据(RPM)
y3 = data.loc[data.age_cut=="best"].RPM
# 绘制best年龄段球员薪资与效率值分析图图
plt.plot(x3,y3,'*')

# 分析球员的RPM','POINTS','TRB','AST','STL','BLK','age_cut'两两相关性图
multi_data = data.loc[:,['RPM','POINTS','TRB','AST','STL','BLK','age_cut']]
# 绘制多变量分布图
sns.pairplot(multi_data,hue='age_cut')

 

4. 球队数据分析

4.1 球队薪资排名
## 将数据按球队分组,平均薪水降序排序,获取薪水在前十的球队信息
# 按球队分组,获取球队的平均薪资、平均正负值、队员数
data_grp = data.groupby(by=['TEAM']).agg({"SALARY_MILLIONS":np.mean,"RPM":np.mean,"PLAYER":np.size})
# 根据平均薪资进行降序排序,并获取前十的数据
data_grp.sort_values(by='SALARY_MILLIONS',ascending=False).head(10)

 

      4.2 球队年龄结构
 # 4.2.1 查看球队每个年龄阶段的人数。
data_rpm = data.groupby(by=['TEAM','age_cut']).agg({"SALARY_MILLIONS":np.mean,"RPM":np.mean,"PLAYER":np.size})

# 4.2.2年龄段的上榜人数(PLAYER)进行降序排序,如果相同,则按平均正负值进行降序排序
data_rpm.sort_values(by=['PLAYER','RPM'],ascending=False)

4.3 球队综合实力
# 根据球队平均正负值进行降序排名
data_rpm = data.groupby(by=['TEAM'],as_index=False).agg({"SALARY_MILLIONS":np.mean,
                                                        'RPM':np.mean,
                                                        'PLAYER':np.size,
                                                        'eFG%':np.mean,
                                                        'MPG':np.mean,
                                                        'AGE':np.mean})
data_rpm.head()

# 根据球队正负值进行降序排名
data_rpm.sort_values(by='RPM',ascending=False).head(10)

 

4.4 数据可视化
## 获取指定球队的队员数据
data_team2 = data[data.TEAM.isin(['GS','CLE','SA','LAC','OKC','UTAH','CHA','TOR','NO','BOS'])]

4.4.1 绘制箱线图
# 绘图
# 设置背景类型
sns.set_style('whitegrid')
# 创建画布
plt.figure(figsize=(20,10))
# 绘制箱线图:获取每个球队球员薪资分布情况
plt.subplot(3,1,1)
sns.boxenplot(x='TEAM',y='SALARY_MILLIONS',data=data_team2)
# 绘制箱线图:获取每个球队球员年龄分布情况
plt.subplot(3,1,2)
sns.boxenplot(x='TEAM',y='AGE',data=data_team2)
# 绘制箱线图:获取每个球队球员出厂时间分布情况
plt.subplot(3,1,3)
sns.boxenplot(x='TEAM',y='MPG',data=data_team2)

4.4.2 小提琴图
# 绘图
# 设置背景类型
sns.set_style('whitegrid')
# 创建画布
plt.figure(figsize=(20,10))
# 小提琴图:获取每个球队球员3分命中率分布情况
plt.subplot(3,1,1)
sns.violinplot(x='TEAM',y='3P%',data=data_team2)
# 小提琴图:获取每个球队球员命中率分布情况
plt.subplot(3,1,2)
sns.violinplot(x='TEAM',y='eFG%',data=data_team2)
# 小提琴图:获取每个球队球员得分分布情况
plt.subplot(3,1,3)
sns.violinplot(x='TEAM',y='POINTS',data=data_team2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

00&00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值