作者 | Crossin先生

导读:NBA 2018-19 赛季已经落下帷幕,猛龙击败勇士,成为新科冠军球队。近日各队纷纷发布2019-20季前赛赛程,迎接新赛季。

我想,不如来做个 NBA 相关的数据分析案例好了。实际上,数据分析团队对于现在的 NBA 球队已经算是标配了,无论是在球员选择还是战术制定上都起着重要的作用。当下整个联盟越来越盛行的“魔球化”打法,其实也正是基于数据分析的产物。

于是,我们就借助官方数据和 Python 的绘图函数,来看一看不同的球员都是在什么位置出手投篮的。

01 视频版本

这篇数据分析案例,我做了个视频版本,对代码做了解读,讲了运行的注意事项和一些有的没的,供需。对于视频制作还不是很有经验,多包涵。(视频里有彩蛋)

本文在案例的代码写完后,我把它发在了虎扑上。结果,被推荐上了首页,25万多次浏览,近800回复……感谢各位JRs赏脸!

原图、更多球员生成的结果及完整代码,见以下网址:

NBA出手点统计代码:

https://gitee.com/crossin/snippet/tree/master/nba-fpa

几十位球星生成图:

提取码: jbpw

02 效果展示

照例先看结果,每个点是一次投篮,蓝色点是投中,红色点是未中。挑几个有特点的:

1. 哈登

魔球得很明显了,长两分这种低效率的事绝对不干

2. 西蒙斯

古典中锋

3. 德拉赞

中投小王子

4. 字母哥

篮下都给你扣糊了!

5. 库里

这个得放全场……

6. 科比

生涯累计图,全方位无死角,包括篮板后负角度

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

03 获取数据

NBA 有一个官方统计网站:stats.nba.com,上面有各种数据,可以说是一个宝藏了。

从网页上,我没有找到这次所需的数据。但通过一番搜索,我找到了网站的开放接口 API。相关的接口和文档你可以从这个项目里查看:

nba_py - stats.nba.com API for python

https://github.com/seemethere/nba_py/

通过以下接口,我们可以获取某个球员在指定赛季的投篮详细数据:

https://stats.nba.com/stats/shotchartdetail?CFID=33&CFPARAMS=2018-19&ContextFilter=&ContextMeasure=FGA&DateFrom=&DateTo=&GameID=&GameSegment=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerID=201935&PlusMinus=N&Position=&Rank=N&RookieYear=&Season=2018-19&SeasonSegment=&SeasonType=Regular+Season&TeamID=0&VsConference=&VsDivision=&mode=Advanced&showDetails=0&showShots=1&showZones=0&PlayerPosition=

其中参数 PlayerID是查询球员的 ID,这个 ID 可以通过在网页上搜索球员姓名,从对应的 URL 中获取。比如林书豪就是 202391。

https://stats.nba.com/player/202391/

链接中的两处 2018-19是赛季参数,你可以改成其他赛季,不过我试过不能太早,大约 96 年往前就没数据了,而且早期数据精度要差些。

其他参数可以不用管。

用 requests库可轻松获取结果(需加上 headers):

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

04 解析数据

返回的数据是 JSON格式,用 pandas 转成 DataFrame 格式,方便后续处理:

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

我们关心的数据就是 LOC_X、LOC_Y(出手位置)和 SHOT_MADE_FLAG(是否投中)这三列。

05 绘制投篮点

使用 matplotlib库的散点图绘制 scatter 方法就可以把投篮点画出来,这个我们之前的各种案例里也用过不少次了:

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)

我们通过参数设定点的大小和透明度,让显示更清楚。

06 绘制球场

投篮点画出来了,不过只是这样不够直观。我们再来加个球场的图。

这个是通过 matplotlib里的 Circle、Rectangle、Arc 等方法拼出来的,没啥特别的技术,但代码比较繁琐,这边就不贴了。(只要你愿意,甚至可以用它画出小猪佩奇)

07 添加头像

最后,再给数据图加上一个头像,让它看起来更完整。头像地址:

https://stats.nba.com/media/players/230x185/202391.png或者https://ak-static.cms.nba.com/wp-content/uploads/headshots/nba/latest/260x190/202391.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)

如果在你的电脑上位置不对,记得修改下 offset的值(不同系统,甚至不同编译器都可能存在差异)。

最终效果:

获取更多精彩内容和专业帮助,可前往:CDA数据分析研究院-12年数据科学教育品牌-引领人工智能新视界

Python告诉你NBA球星都喜欢在哪个位置出手?相关推荐

  1. python分析出nba球员的位置_Python告诉你NBA球星都喜欢在哪个位置出手?

    作者 | Crossin先生 导读:NBA 2018-19 赛季已经落下帷幕,猛龙击败勇士,成为新科冠军球队.近日各队纷纷发布2019-20季前赛赛程,迎接新赛季. 我想,不如来做个 NBA 相关的数 ...

  2. python分析出nba球员的位置_你知道NBA球星都喜欢在哪个位置出手? Python告诉你

    导读:NBA 2018-19 赛季已经落下帷幕,猛龙击败勇士,成为新科冠军球队.近日各队纷纷发布2019-20季前赛赛程,迎接新赛季. 我想,不如来做个 NBA 相关的数据分析案例好了.实际上,数据分 ...

  3. python分析出nba球员的位置_虎扑热帖|Python数据分析|NBA的球星们喜欢在哪个位置出手...

    原标题:虎扑热帖|Python数据分析|NBA的球星们喜欢在哪个位置出手 前言 1. 这篇数据分析案例,我做了个视频版本,对代码做了解读,讲了运行的注意事项和一些有的没的,供需.对于视频制作还不是很有 ...

  4. python数据分析代码在哪里找到_[Python数据分析]NBA的球星们喜欢在哪个位置出手...

    前言 1. 这篇数据分析案例,我做了个 视频版本 ,对代码做了解读,讲了运行的注意事项和一些有的没的,供需.对于视频制作还不是很有经验,多包涵.(视频里有彩蛋) 2. 本文在案例的代码写完后,我把它发 ...

  5. python125免费教程,125 个视频成就千万级网红,Python 告诉你李子柒都在拍些什么?...

    原标题:125 个视频成就千万级网红,Python 告诉你李子柒都在拍些什么? 作者 |Mika,数据 |真达 后期 |Mika.泽龙 责编 | 郭芮 来源 | CDA数据分析师 今天我们来聊聊把生活 ...

  6. 125 个视频成就千万级网红,Python 告诉你李子柒都在拍些什么?

    作者 | Mika,数据 | 真达 后期 | Mika.泽龙 责编 | 郭芮 来源 | CDA数据分析师 今天我们来聊聊把生活过成诗的李子柒. "李家有女,人称子柒."如果说到当下 ...

  7. Python告诉你,究竟都是哪些人在听《惊雷》!

    这看起来不着边际的歌词,配上简单粗暴的蹦迪音乐. 最近,一首<惊雷>的喊麦歌曲在短视频平台火了,震惊了整个音乐圈. 但4月10日歌手杨坤却在直播中批评<惊雷>"要歌没 ...

  8. python分析出nba球员的位置_【圆老司】用python展示NBA球员出手位置偏好

    之前发过一篇用python展示NBA球员出手位置偏好的视频: 有些同学想要其中的代码和讲解.再加上当时用的NBA官方接口现在极不稳定,几乎无法使用,所以我这里就再发一篇图文,简单讲解下代码,以及新的替 ...

  9. 朋友很喜欢打篮球,我用Python爬取了1000张他喜欢的NBA球星图片送给他【内附源码】

    大家好,我是辣条. 前言 朋友快过生日了,不知道送啥礼物[绝对不是因为我抠],想着他非常喜欢打篮球,篮球他很多个了,应该也不会缺[不会是因为篮球贵],那我就用技术白嫖点东西送给他吧,爬虫首当其冲呀,必 ...

  10. 我用Python做了六百万字的歌词分析,告诉你中国Rapper都在唱些啥

    <中国有嘻哈>火了,作为一名对中国HipHop毫无了解的吃瓜群众,我开始好奇以下三个问题: HipHop到底在唱些什么? 各个国家和地区的 Rapper 们想要说的唱的都有哪些特色? 如果 ...

最新文章

  1. 分布式、服务化的ERP系统架构设计
  2. 干货丨机器学习新手一定要掌握的10大算法
  3. poj 1379 模拟退火法
  4. 稀缺:百分之二的选择
  5. antlr idea 入门_ANTLR:入门
  6. AD库转换为KiCAD库的方法
  7. 昆山立讯电子工程师_教会徒弟饿死师傅?立讯精密会不会成为第二个富士康
  8. 多媒体播放(windows音乐播放)
  9. php目录隔离,PHP 应用隔离的几种方法
  10. tornado Python mysql_python tornado mysql 内容管理后台部署
  11. redis源码编译和调试
  12. 乒乓球单循环赛_乒乓球单循环赛积分表(比赛规则、对比表)
  13. 圆你导演梦:5款主流视频制作软件横评
  14. mysql 关于 不可重复读与幻读的解决方案
  15. 微型计算机键盘上的tab键汉语译为,微型计算机键盘上的Tab键汉语译为()。
  16. 用位运算来代替乘法、除法和取余的方式
  17. H5游戏-面试问题知识点总结
  18. Windows 11 消费者版 (含家庭版/专业版/专业工作站/家庭单语言版) 分享下载
  19. linux安装Node.js 详细安装教程
  20. 以后我给你们上课的机会可能越来越少了

热门文章

  1. 360度评估中的问题示范:如何提问
  2. .net编程的十大技巧 转载之Jeffery.Sun
  3. 2020-2021读书记录
  4. Matlab roundn()函数使用样例
  5. BRD、MRD、PRD
  6. Java ist reverse_GKCTF 2020 Reverse Writeup
  7. Word自带编辑器设置类Times New Roman字体
  8. 【转】奇文共欣赏,疑义相与析:原文转载《电脑维护技巧》(N条举措N条理由)并请大家交流研讨...
  9. 输入经纬度在地图中标注位置(百度地图)
  10. 关于开通博客的一些感想