失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python--NBA数据分析初探(上)

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

时间:2021-03-01 10:45:25

相关推荐

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

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

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

知乎ID:/people/hu-yan-81-25

每个球迷心中都有一个属于自己的迈克尔·乔丹。

作为一个资深的俄克拉荷马城雷霆伪球迷及菜鸟数据分析爱好者,

本文将尝试用jupyter notebook完成NBA菜鸟数据分析初探,

一边学习一遍练习,胡师傅深知顺着兴趣去做事往往会事半功倍,

寓教于乐,别出心裁,浅尝辄止,不亦乐乎?

特别感谢简书用户“牧羊的男孩”分享数据,

/p/2f34261aaa9f

数据解释:

(你就是传说中的那位拥有奇幻之旅的牧羊少年吧?给力!)

先载入要用到的模块:

importnumpyasnp

importpandasaspd

importmatplotlib.pyplotasplt

importseabornassns

%matplotlibinline##魔法命令了解一下##

我的个人习惯是将整个分析用到的模块全都在开始处进行import,方便管理和调整。

载入数据:

data=pd.read_csv('/Users/huxugang/data/nba__nba_players_with_salary.csv')

data.head()

原来是威少暴走的16-17赛季呀,啊呀呀!!!

我们可以看到该数据的前五列是按当年的得分榜排序的,分别是威少、詹皇、地表最强175、浓眉哥和考神。而数据包含39列,即不同维度的技术统计。而此份数据提供了这300+球员的众多项比赛数据,我希望通过数据分析来发现其中的有趣的信息。

##描述统计

data.describe()

输出结果部分展示

从数据中看几项比较重要的信息:

球员平均年龄为26.4岁,年龄段在19-38岁;

球员平均年薪为730万美金,当时最大的合同为年薪3000万美金;

球员平均出场时间为21.5分钟,某球员场均出场37.8分钟领跑联盟,当然也有只出场2.2分钟的角色球员,机会来之不易。

类似的信息我们还能总结很多。

效率值相关性分析

在众多的数据中,有一项名为“RPM”,标识球员的效率值,该数据反映球员在场时对球队比赛获胜的贡献大小,最能反映球员的综合实力。

我们来看一下它与其他数据的相关性:

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

coor=dat_cor.corr()

sns.heatmap(coor,square=True,linewidths=0.02,annot=False)

#seaborn中的heatmap函数,是将多维度数值变量按数值大小进行交叉热图展示。

由相关性分析的heatmap图可以看出,RPM值与年龄的相关性最弱,与“进攻效率值”、“场均得分”、“场均抢断数”等比赛技术数据的相关性最强。

我在接下来的分析中将把RPM作为评价一个球员能力及状态的直观反应因素之一。

球员数据分析部分

此处练习了一下pandas基本的数据框相关操作,包括提取部分列、head()展示、排序等,简单通过几个维度的展示,笼统地看一下16-17赛季那些球员冲在联盟的最前头。

#薪资最高的10名运动员

data.loc[:,['PLAYER','SALARY_MILLIONS','RPM','AGE','MPG']].sort_values(by='SALARY_MILLIONS',ascending=False).head(10)

#效率值最高的10名运动员

data.loc[:,['PLAYER','RPM','SALARY_MILLIONS','AGE','MPG']].sort_values(by='RPM',ascending=False).head(10)

#出场时间最高的10名运动员

data.loc[:,['PLAYER','RPM','SALARY_MILLIONS','AGE','MPG']].sort_values(by='MPG',ascending=False).head(10)

勒布朗詹姆斯为该赛季薪水最高的球员,麦克康利拿到了大合同,但是在群星璀璨的薪金榜单上略显黯淡。同样出现在榜单的还有威少、哈登、杜兰特等球星,库里由于之前的合同太小,并没有出现在前10名里。

詹皇拿着联盟最高的薪水,打球也毫不含糊,效率值排名第一。保罗和库里紧随其后,在前10的榜单里,宇宙勇占据3席。值得一提的是,掘金队的约基奇和爵士队的戈贝尔,拿着较为微薄的工资却打出了联盟前10的效率,这也为他们接下来的大合同奠定了基础。

老詹又是独占鳌头,骑士队真实毫不浪费自己的每一分钱呐。紧随其后的是拉维涅和维金斯,不过前5名骑士差距很小。前10的榜单里有森林狼对的维金斯、唐斯以及随后会加盟的巴特勒(开天眼),我们预感到后狼王时代的森林狼似乎有了一丝复苏的萌芽。

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

单变量:

我们先利用seaborn中的distplot绘图来分别看一下球员薪水、效率值、年龄这三个信息的分布情况,上代码:

#分布及核密度展示

sns.set_style('darkgrid')#设置seaborn的面板风格

plt.figure(figsize=(12,12))

plt.subplot(3,1,1)#拆分页面,多图展示

sns.distplot(data['SALARY_MILLIONS'])

plt.xticks(np.linspace(0,40,9))

plt.ylabel(u'$Salary$',size=10)

plt.subplot(3,1,2)

sns.distplot(data['RPM'])

plt.xticks(np.linspace(-10,10,9))

plt.ylabel(u'$RPM$',size=10)

plt.subplot(3,1,3)

sns.distplot(data['AGE'])

plt.xticks(np.linspace(20,40,11))

plt.ylabel(u'$AGE$',size=10)

可见年龄和效率值更符合正态分布,而球员薪水更像一个偏态分布,拿高薪的球员占据较小的比例。这些与我们的主管感受基本一致,那么这些变量之间是否有什么隐藏的关系呢?这里可以用seaborn中的pairplot绘图展示多个变量之间的关系:

双变量:

dat1=data.loc[:,['RPM','SALARY_MILLIONS','AGE','POINTS']]

sns.jointplot(dat1.SALARY_MILLIONS,dat1.AGE,kind='kde',size=8)

上图展示的是球员薪水与年龄的关系,采用不同的kind方式(等高线图/hex/散点等),我们可以整体感受一下年龄和薪水的集中特点,大部分球员集中在22-25岁拿到5million以下的薪水,当然也有“年少成名”和“越老越妖”的情况。

多变量:

dat1=data.loc[:,['RPM','SALARY_MILLIONS','AGE','POINTS']]

sns.pairplot(dat1)#相关性展示,斜对角为分布展示,可以直观地看变量是否具有现行关系

上图展示的是球员薪水、效率值、年龄及场均得分四个变量间的两两相关关系,对角线展示的是本身的分布图,由散点的趋势我们可以看出不同特征的相关程度。整体看各维度的相关性都不是很强,正负值与薪水和场均得分呈较弱的正相关性,而年龄这一属性和其他的变量相关性较弱,究竟是家有一老如有一宝还是廉颇老矣,我将在今后继续与大家分享。

今天先写到这里,多谢观看,再会~

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

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

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

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

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

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

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

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

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

如果觉得《Python--NBA数据分析初探(上)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。