因此,我们使用官方数据和绘图功能来查看不同球员射门的位置。
01 视频版
我把这个数据分析案例做了一个视频版,讲解了代码,讲了运行的注意事项,还有一些其他的东西,供需。我对视频制作不是很有经验,所以请大家多多包涵。(视频里有彩蛋)
本文示例的代码写完之后,我把它发到了虎扑上,结果被推荐到了首页,阅读量超过25万,回复近800条……谢谢各位JR们的好意!
原始图像、更多玩家生成的结果以及完整代码可以在以下网址找到:
NBA 投篮得分统计代码:
数十位明星生成的图片:
提取码:jbpw
02 效果展示
和往常一样nba球员位置图,我们先看看结果。每个点都是一次射击nba球员位置图,蓝点表示成功,红点表示未命中。挑选几个具有特征的点:
1. 强化
魔法球很明显了,长两分这种低效的事情我再也不会做了。
2.西蒙斯
经典中心
3. 德拉赞
CIC小王子
4.扬尼斯·阿德托昆博
你篮下扣篮失败了!
5. 咖喱
这人必须全力以赴……
6.科比·布莱恩特
职业生涯累计图,全面无盲区,包括篮板后的负角度
下面我们来看看具体的步骤,我们以本赛季刚夺得总冠军戒指的林书豪为例。
03 获取数据
NBA有一个官方数据统计网站:,里面包含了各类数据,可以说是一个宝库。
在网页上没找到我需要的数据,但搜索了一番,找到了网站的开放API,你可以从这个项目中查看相关的API和文档:
- API 适用于
通过如下接口,我们可以获取到指定赛季球员的详细射门数据:
+&=0&=&=&模式=&=0&=1&=0&=
参数为需要查询的球员ID,在网页上搜索球员名字即可得到对应的URL,例如 Lin。
链接里两个2018-19是季节参数,你可以改成其他季节,不过我试过了不能太早,1996年左右之前没有数据,早期数据准确率较低。
其余参数可以忽略。
使用库可以轻松获得结果(需要添加):
= .获取(urlnba球员位置图,=,=5)
04 解析数据
返回的数据是JSON格式,进行转换,方便后续处理:
data = .json()# 获取列名,表示每次投球 data = data[''][0]['']# 获取该投球相关数据 shots = data[''][0]['']# = pd.(shots, =)
我们关心的数据是LOC_X,LOC_Y(射击位置)和(射击是否成功)三列。
05 画出射击点
我们可以使用库的散点图方法来绘制射击点,这种方法我们在之前的各种案例中已经使用过多次:
made = [['']==1]miss = [['']==0]plt.(miss.LOC_X, miss.LOC_Y, color='r', ='.', alpha=0.3)plt.(made.LOC_X, made.LOC_Y, color='b', ='.', alpha=0.3)
我们通过参数来设置点的大小和透明度,以使显示更加清晰。
06 绘制球场
射击点已经画出来了,但是这样还不够直观,我们再加一张球场的图片吧。
这是用 、 、 Arc 等方法实现的。没有什么特别的技术,但代码比较复杂,这里就不贴出来了。(如果你愿意,你甚至可以用它来画小猪佩奇)
07 添加头像
最后在数据图中添加头像,让它看起来更加完整。头像地址:
或者
文件名依然是玩家的ID,但是这个地址并不是对所有玩家都有效,所以可以做异常处理。
pic = ..("")# 读取的图像可以绘制 = plt.(pic[0])# 将玩家图像放置在右上角,并设置缩放级别以适合整个图像img = (, zoom=0.6)# (x, y) 控件将玩家放置在您想要的位置 itimg.((540,640))# 添加玩家图像fig.gca().(img)
如果你的电脑上该位置不正确,记得修改下面的值(不同的系统甚至不同的编译器可能会有差异)。
最终效果:
本文标签: 球员位置介绍 球员位置及作用 nba球员位置介绍