NBA球员分析

1. 获取数据

data=pd.read_csv("./data/nba_2017_nba_players_with_salary.csv")
data.head(10)

在这里插入图片描述

2. 数据分析

2.1 数据相关性

data_cor = data.loc[:, ['RPM', 'AGE', 'SALARY_MILLIONS', 'ORB', 'DRB', 'TRB',
                       'AST', 'STL', 'BLK', 'TOV', 'PF', 'POINTS', 'GP', 'MPG', 'ORPM', 'DRPM']]
data_cor.head()

在这里插入图片描述

# 得到表中数据相关性的大小对比
corr=data_cor.corr()
#h获取两列数据的相关性
corr.head()

在这里插入图片描述

plt.figure(figsize=(20,8),dpi=100)
sns.heatmap(corr,square=True,linewidths=0.1,annot=True)  #根据相关性   得到两列数据的热力图 

在这里插入图片描述

2.2 基本数据排名分析

#按照效率值排名
data.loc[:,["PLAYER", "RPM", "AGE"]].sort_values(by="RPM",ascending=False)   #ascending降序排序

在这里插入图片描述

# 按照球员薪资排名
data.loc[:,["PLAYER", "RPM", "SALARY_MILLIONS"]].sort_values(by="SALARY_MILLIONS",ascending=False)   #ascending降序排序

在这里插入图片描述

2.3 Seaborn常用的三个数据可视化方法

2.3.1 单变量

# 利用seaborn中的distplot绘图来分别看一下球员薪水、效率值、年龄这三个信息的分布情况
sns.set_style("darkgrid")# 设置图像的风格
plt.figure(figsize=(10,10))  #设置画布的大小
plt.subplot(3,1,1)  #使用方法:subplot(m,n,p)或者subplot(m n p)。 subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果m=2就是表示2行图。p表示图所在的位置,p=1表示从左到右从上到下的第一个位置。
sns.distplot(data["SALARY_MILLIONS"])
plt.ylabel("salary")

plt.subplot(3,1,2)  #使用方法:subplot(m,n,p)或者subplot(m n p)。 subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果m=2就是表示2行图。p表示图所在的位置,p=1表示从左到右从上到下的第一个位置。
sns.distplot(data["RPM"])
plt.ylabel("RPM")

plt.subplot(3,1,3)  #使用方法:subplot(m,n,p)或者subplot(m n p)。 subplot是将多个图画到一个平面上的工具。其中,m表示是图排成m行,n表示图排成n列,也就是整个figure中有n个图是排成一行的,一共m行,如果m=2就是表示2行图。p表示图所在的位置,p=1表示从左到右从上到下的第一个位置。
sns.distplot(data["AGE"])
plt.ylabel("AGE")

在这里插入图片描述

2.3.2 双变量

sns.jointplot(data.AGE,data.SALARY_MILLIONS,kind="hex")

在这里插入图片描述

2.3.3 多变量

multi_data = data.loc[:, ['RPM','SALARY_MILLIONS','AGE','POINTS']]
multi_data.head()

在这里插入图片描述

sns.pairplot(multi_data)

在这里插入图片描述

2.3.4 衍生变量的一些可视化实践-以年龄为例

def age_cut(df):
    '''年龄划分'''
    if df.AGE<=24:
        return "young"
    elif df.AGE>=30:
        return "old"
    else:
        return "best"

data["age_cut"]=data.apply(lambda x:age_cut(x),axis=1)   
#apply作用:第一个参数事自定义函数的指针,将函数传进去,然后apply函数会将data中的一行作为一个参数传入函数中,axis=1 代表一行一行的计算   
data.head()       

在这里插入图片描述

# 方便计数
data["cut"]=1
data.loc[data.age_cut=="best"].SALARY_MILLIONS.head()

在这里插入图片描述

# 基于年龄段对球员薪水和效率值进行分析
sns.set_style("darkgrid")
plt.figure(figsize=(10,10),dpi=100)
plt.title("RPM and Salary")

x1=data.loc[data.age_cut=="old"].SALARY_MILLIONS
y1=data.loc[data.age_cut=="old"].RPM
plt.plot(x1,y1,"^")

x2=data.loc[data.age_cut=="best"].SALARY_MILLIONS
y2=data.loc[data.age_cut=="best"].RPM
plt.plot(x2,y2,"^")

x3=data.loc[data.age_cut=="young"].SALARY_MILLIONS
y3=data.loc[data.age_cut=="young"].RPM
plt.plot(x3,y3,".")

在这里插入图片描述

multi_data2 = data.loc[:, ['RPM','POINTS','TRB','AST','STL','BLK','age_cut']]
sns.pairplot(multi_data2,hue="age_cut")  # hue按照该列继续宁颜色显示

在这里插入图片描述

3. 球队数据分析

3.1 球队薪资排行

data.groupby(by="age_cut").agg({"SALARY_MILLIONS":np.mean})  #根据年龄进行分组,然后根据平均数进行聚合

在这里插入图片描述

data_team=data.groupby(by="TEAM").agg({"SALARY_MILLIONS":np.mean})  #根据球队进行分组,然后根据平均数进行聚合
data_team.sort_values(by="SALARY_MILLIONS",ascending=False).head()# 按照薪资的降序进行排序     ascending=False为降序

在这里插入图片描述

3.2 按照分球队 分年龄段,上榜球员数相同,则按照效率值降序排列

data_RMP=data.groupby(by=["TEAM","age_cut"]).agg({"SALARY_MILLIONS":np.mean,"RPM":np.mean,"PLAYER":np.size})
data_RMP.head()

在这里插入图片描述

data_RMP.sort_values(by=["PLAYER","RPM"],ascending=False).head(10)

在这里插入图片描述

3.3 按照球队综合实力排名

data_rpm2=data.groupby(by=["TEAM"],as_index=False).agg({"SALARY_MILLIONS":np.mean,
                                                        "RPM":np.mean,
                                                        "PLAYER":np.size,
                                                        "POINTS":np.mean,
                                                        "eFG%":np.mean,
                                                        "MPG":np.mean,
                                                        "AGE":np.mean})
data_rpm2.head()

在这里插入图片描述

data_rpm2.sort_values(by="RPM",ascending=False)

在这里插入图片描述

3.4 利用箱线图和小提琴图进行数据分析

sns.set_style("whitegrid")# 设置画板的风格
#获取相应的数据
data_team2=data[data.TEAM.isin(['GS','CLE','SA','LAC','OKC','UTAH',"CHA",'TOR','NO','BOS'])]
data_team2.head()

在这里插入图片描述

#进行相应的绘图
plt.figure(figsize=(20,10))#设置画板的大小
plt.subplot(3,1,1)
sns.boxplot(x="TEAM",y="SALARY_MILLIONS",data=data_team2)

plt.subplot(3,1,2)
sns.boxplot(x="TEAM",y="AGE",data=data_team2)

plt.subplot(3,1,3)
sns.boxplot(x="TEAM",y="MPG",data=data_team2)

在这里插入图片描述

#绘制小提琴图
sns.set_style("whitegrid")
plt.figure(figsize=(20,10))
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)

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值