jrs直播

NBA 数据分析案例:球星出手点分布,带你探索篮球奥秘

1. 针对这个数据分析案例,我做了一个视频版本nba球星库里头像,讲解了代码,讲了运行的注意事项,还有一些其他的东西,供需。我做视频经验不是很丰富,请大家多多包涵。(视频里有彩蛋)

头像篮球明星库里_nba球星库里头像_nba头像库里手势图片

NBA球星投篮点分布

2.本文示例的代码写完后,我把它发到了虎扑上,结果被推荐到了首页,阅读量超过25万,回复近800条……谢谢各位JR们的好意!

nba头像库里手势图片_nba球星库里头像_头像篮球明星库里

3.获取原图、更多玩家生成结果及完整代码请在公众号“编程课堂”回复关键字:nba

--------------------

2018-19NBA赛季已经结束,猛龙队击败勇士队成为新科冠军球队。

我觉得最好做个NBA相关的数据分析案例。其实数据分析团队现在已经成为NBA球队的标配,无论是在球员选择还是战术制定中都发挥着重要作用。现在整个联盟越来越流行的“点球成金”打法,其实就是基于数据分析的产物。

nba头像库里手势图片_头像篮球明星库里_nba球星库里头像

nba球星库里头像_头像篮球明星库里_nba头像库里手势图片

因此,我们使用官方数据和绘图功能来查看不同球员射门的位置。

0.效果展示

和往常一样,我们先看看结果。每个点都是一次射击,蓝点表示成功,红点表示未命中。挑选几个具有特征的点:

哈登nba球星库里头像,很明显他有魔力球,他绝对不会干长距离两分球这种低效的事情。

头像篮球明星库里_nba球星库里头像_nba头像库里手势图片

西蒙斯,经典中锋

nba球星库里头像_头像篮球明星库里_nba头像库里手势图片

德拉赞,中距离投篮之王

nba头像库里手势图片_头像篮球明星库里_nba球星库里头像

字母哥,你篮下扣篮失败了!

头像篮球明星库里_nba球星库里头像_nba头像库里手势图片

库里,这场比赛必须在各处进行……

nba头像库里手势图片_nba球星库里头像_头像篮球明星库里

科比布莱恩特,职业生涯累计图表,全面无盲区,包括篮板后的负角度

头像篮球明星库里_nba球星库里头像_nba头像库里手势图片

下面我们来看看具体的步骤,我们以本赛季刚夺得总冠军戒指的林书豪为例。

1.获取数据

NBA有一个官方数据统计网站:,里面包含了各类数据,可以说是一个宝库。

在网页上没找到我需要的数据,但搜索了一番,找到了网站的开放API,你可以从这个项目中查看相关的API和文档:

- API 适用于

///

通过如下接口,我们可以获取到指定赛季球员的详细射门数据:

/stats/?CFID=33&=2018-19&=&=FGA&=&=&=&=&=0&=00&=&=Base&Month=0&=0&=&=N&=&=0&=&=N&=&Rank=N&=&=2018-19&=&=+&=0&=&=&mode=&=0&=1&=0&=

参数为需要查询的球员ID,在网页上搜索球员名字即可从对应的URL获取该ID,例如 Lin

///

链接里两个2018-19是季节参数,你可以改成其他季节,不过我尽量不要改得太早,1996年左右之前没有数据,早期数据准确率较低。

其余参数可以忽略。

使用库可以轻松获得结果(需要添加):

response = requests.get(url, headers=headers, timeout=5)

2.解析数据

返回的数据是JSON格式,进行转换,方便后续处理:

data = response.json()
# 获取列名即每项投球数据的意思
headers = data['resultSets'][0]['headers']
# 获取投球的相关数据
shots = data['resultSets'][0]['rowSet']
# 转 DataFrame
shot_df = pd.DataFrame(shots, columns=headers)

nba头像库里手势图片_头像篮球明星库里_nba球星库里头像

我们关心的数据是LOC_X,LOC_Y(射击位置)和(射击是否成功)三列。

3. 画出射击点

我们可以使用库的散点图方法来绘制射击点nba球星库里头像,这种方法我们在之前的各种案例中已经使用过多次:

made = shot_df[shot_df['SHOT_MADE_FLAG']==1]
miss = shot_df[shot_df['SHOT_MADE_FLAG']==0]
plt.scatter(miss.LOC_X, miss.LOC_Y, color='r', marker='.', alpha=0.3)
plt.scatter(made.LOC_X, made.LOC_Y, color='b', marker='.', alpha=0.3)

我们通过参数来设置点的大小和透明度,以使显示更加清晰。

nba头像库里手势图片_头像篮球明星库里_nba球星库里头像

4. 画出球场

射击点已经画出来了,但是这样还不够直观,我们再加一张球场的图片吧。

头像篮球明星库里_nba头像库里手势图片_nba球星库里头像

这是用 、 、 Arc 等方法实现的。没有什么特别的技术,但代码比较复杂,这里就不贴出来了。(如果你愿意,你甚至可以用它来画小猪佩奇)

5. 添加头像

最后在数据图中添加头像,让它看起来更加完整。头像地址:

/媒体///.png

或者

/wp-///nba///.png

文件名依然是玩家的ID,但是这个地址并不是对所有玩家都有效,所以可以做异常处理。

pic = urllib.request.urlretrieve("http://stats.nba.com/media/players/230x185/202391.png")
# imread 读取的图像可以被 matplotlib 绘制
head_pic = plt.imread(pic[0])
# 将球员图片放置于右上角,并设置缩小等级以配合整个图片
img = OffsetImage(head_pic, zoom=0.6)
# (x, y) 控制将球员放在你想要放的位置
img.set_offset((540,640))
# 添加球员图片
fig.gca().add_artist(img)

如果你的电脑上该位置不正确,记得修改下面的值(不同的系统甚至不同的编译器可能会有差异)。

最终效果:

头像篮球明星库里_nba头像库里手势图片_nba球星库里头像

获取原图、更多玩家生成结果及完整代码请在公众号“编程课堂”回复关键字:nba

nba球星库里头像_头像篮球明星库里_nba头像库里手势图片