Python--NBA数据分析初探(下)

浏览: 1482

作者:胡言    Python爱好者社区专栏作者

知乎ID:https://www.zhihu.com/people/hu-yan-81-25

前文传送门:Python--NBA数据分析初探(上)


上回学习到利用jupyter notebook简单展示了一下单变量、双变量几多变量的数据可视化,本篇将在上篇的基础上,练习一下python数据处理及衍生变量的一些可视化实践。

在已有的数据集里想要生成新的变量,例如:把球员按年龄分为老中青三代,可以借助定义一个函数,再利用apply的方式,生成新的变量。

#根据已有变量生成新的变量
data['avg_point']=data['POINTS']/data['MP'] #每分钟得分
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) #球员是否处于黄金年龄
data['cnt']=1 #计数用

同样的目的,也可以使用numpy模块中的函数np.where,与excel中的if函数和R语言中的ifelse函数几乎是一样的,非常简便。

既然得到了老中青三代的标签,我们来看一下不同年龄段球员的RPM(正负值)与薪水之前的关系如何:

### 球员薪水与效率值   按年龄段来看
sns.set_style('darkgrid') #设置seaborn的面板风格
plt.figure(figsize=(8,8))
plt.title(u'$RPM\ and\ SALARY$',size=15)
X1=data.loc[data.age_cut=='old'].SALARY_MILLIONS
Y1=data.loc[data.age_cut=='old'].RPM
X2=data.loc[data.age_cut=='best'].SALARY_MILLIONS
Y2=data.loc[data.age_cut=='best'].RPM
X3=data.loc[data.age_cut=='young'].SALARY_MILLIONS
Y3=data.loc[data.age_cut=='young'].RPM
plt.plot(X1,Y1,'.')
plt.plot(X2,Y2,'.')
plt.plot(X3,Y3,'.')
plt.xlim(0,30)
plt.ylim(-8,8)
plt.xlabel('Salary',size=10)
plt.ylabel('RPM',size=10)
plt.xticks(np.arange(0,30,3))
plt.legend(['old','best','young'])

点图横坐标为球员薪水,纵坐标为效率值。可以观测到:

  • 绝大部分的年轻球员拿着较低的薪水,数据非常集中。有两个离群点,是上文提到的戈贝尔和约基奇,两个小兄弟前途无量啊。

  • 黄金年龄的球员和老球员的数据相对发散,黄金年龄球员薪水与效率值正相关性更强。第一集团有几个全明星排头兵。

  • 老球员过了呼风唤雨的年纪,运动状态有所下滑,“高薪低效”的球员也稍微多一些。

用上篇的方法看一下老中青三代各技术统计的分布情况:

dat2=data.loc[:,['RPM','POINTS','TRB','AST','STL','BLK','age_cut']]
sns.pairplot(dat2,hue='age_cut')

球队数据分析

球队薪资排行

将数据按球队分组,平均薪水降序排列,看一下联盟十大土豪球队:

### 分组操作 按球队
dat_grp=data.groupby(by=['TEAM'],as_index=False).agg({'SALARY_MILLIONS':np.mean,'RPM':np.mean,'PLAYER':np.size})
dat_grp=dat_grp.loc[dat_grp.PLAYER>5]  #不考虑在赛季中转会的球员
dat_grp.sort_values(by='SALARY_MILLIONS',ascending=False).head(10)

  • 骑士队和勇士队已超高的薪水排在这份榜单的前两名,群星璀璨的他们最终在季后赛中一路厮杀,双双闯入分区决赛。

  • 排在第三的开拓者有10名球员上榜,可谓后补活力充沛。球队薪金结构的健康与否对球队的发展至关重要。

球队年龄结构

先胖不算胖,后胖压倒炕,优质的年轻球员储备是保持球队竞争性的密匙。

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

### 分组操作 按场上位置
dat_grp2=data.groupby(by=['TEAM','age_cut'],as_index=False).agg({'SALARY_MILLIONS':np.mean,'RPM':np.mean,'PLAYER':np.size})
dat_grp2=dat_grp2.loc[dat_grp2.PLAYER>3]     ##剔除掉少量的position摇摆人
dat_grp2.sort_values(by=['PLAYER','RPM'],ascending=False).head(15)

  • 在这份榜单里,排在榜首的公牛队有年轻球员8人,但效率值偏低,小伙子们还需努力啊。

  • 绿凯不得了,黄金年龄球员和年轻球员共14人,效率值较高,未来一片光明。

  • 年轻的森林狼有6名黄金年龄球员,老马刺有5为年长球员,一老一小效率值还都不错。

  • 最牛的还属宇宙勇,5名黄金年龄球员效率值为恐怖的4.7,明星在手天下我有!

球队综合实力分析

最后我们来看看球队综合实力:

按照效率值降序排列前10名球队的相关信息如下:

##数据可视化 按球队
dat_grp3=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})
dat_grp3=dat_grp3.loc[dat_grp3.PLAYER>5]
dat_grp3.sort_values(by=['RPM'],ascending=False).head(10)

  • 勇士和其实占据前两名的位置,cross check了效率值反映球队实力的事实。

  • 老马刺排名第三,平均年龄达29.5岁排名第一,更新血液迫在眉睫。

  • 我所钟爱的雷霆由于大威少的存在能排在第5位,各项数据中规中矩。

利用箱线图和小提琴图看着10支球队的相关数据

sns.set_style('whitegrid')#设置seaborn的面板风格
plt.figure(figsize=(12,8))
dat_grp4=data[data['TEAM'].isin(['GS','CLE','SA','LAC','OKC','UTAH','CHA','TOR','NO','BOS'])]
plt.subplot(3,1,1)
sns.boxplot(x='TEAM',y='AGE',data=dat_grp4)
plt.subplot(3,1,2)
sns.boxplot(x='TEAM',y='SALARY_MILLIONS',data=dat_grp4)
plt.subplot(3,1,3)
sns.boxplot(x='TEAM',y='MPG',data=dat_grp4)

plt.figure(figsize=(12,8))
plt.subplot(3,1,1)
sns.violinplot(x='TEAM',y='POINTS',data=dat_grp4)
plt.subplot(3,1,2)
sns.violinplot(x='TEAM',y='eFG%',data=dat_grp4)
plt.subplot(3,1,3)
sns.violinplot(x='TEAM',y='RPM',data=dat_grp4)

  • 从年龄结构看,老马刺年龄跨度最大,年龄中位数最高。猛龙队最年轻且年龄跨度最小,后劲十足。

  • 从球队薪金看,勇士和骑士最高,俄村雷霆在失去杜兰特后栽了大跟头,薪金健康情况堪忧。

  • 从出场时间看,骑士队最高且跨度低,小团体战斗能力出众。

  • 从得分来看,骑士和勇士整体出众。雷霆的威少、绿军的小托马斯、醍醐的浓眉哥以及马刺的伦纳德均是各队的离群点,双拳难敌四手。

  • 从命中率看,命中率各队非常集中,绿凯的小托马刺作为地表最强175远远高于其他人。

  • 从效率值看,骑士和勇士是大赢家。各个队的离群点我们甚至不用通过具体的查询就可以猜到是哪位球员。

抖个机灵,马刺作为老牌劲旅,居然有一个球员效率值为负离群点,查一下他是谁:

data.loc[data.TEAM=='SA'].sort_values(by='RPM',ascending=True).head(3)

福布斯这个23岁的小伙子出现在了这个尴尬的位置,要好好加油了!

结语

一年一度的NBA比赛即将战火重燃!而随着科技的进步我们可以更好的对篮球比赛的数据进行记录和分析,

这使得我们能更好地理解篮球,理解球员,结合我们的专业知识和兴趣爱好,更好地享受篮球比赛的无穷魅力。

Python的爱好者社区历史文章大合集

Python的爱好者社区历史文章列表

福利:文末扫码关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“ 课程 ”即可获取

小编的转行入职数据科学(数据分析挖掘/机器学习方向)【最新免费】

小编的Python的入门免费视频课程

小编的Python的快速上手matplotlib可视化库!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告扩展制作免费学习视频。

玩转大数据分析!Spark2.X + Python精华实战课程免费学习视频。

推荐 0
本文由 Python爱好者社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册