如何用 Python 追踪 NBA 球员的移动轨迹
admin
2023-07-30 22:28:43
0

在这篇文章中,我介绍了如何从 stats.nba.com 上现场实况运动动画中提取一些额外的信息。

In [1]:

12345678910 import requestsimport pandas as pdimport numpy as np %matplotlib inline import matplotlib.pyplot as pltimport seaborn as sns from IPython.display import IFrame

In [2]:

12 sns.set_color_codes()sns.set_style(\”white\”)

我们将会提取季后赛快船和火箭系列赛第 5 场比赛中一个回合的信息。在那个回合中,James Harden 突破到篮下,撕破快船的防守,然后传球给 Trevor Ariza,后者投入一个空位 3 分球。

我按照下面的方法嵌入运动动画。

In [3]:

12 IFrame(\’http://stats.nba.com/movement/#!/?GameID=0041400235&GameEventID=308\’,              width=700, height=400)

Out[3]:

 

获取数据

通过下面的 URL,我们可以连接从 stats.nba.com API 得到的数据。在 URL 中有两个参数。eventid 是这个特定回合的 ID 号。gameid 是这场季后赛的 ID 号。

In [4]:

1 url = \”http://stats.nba.com/stats/locations_getmoments/?eventid=308&gameid=0041400235\”

下面将会使用 requests 来获取数据

In [5]:

12345 # Get the webpageresponse = requests.get(url)# Take a look at the keys from the dict# representing the JSON dataresponse.json().keys()

Out[5]:

1 dict_keys([\’visitor\’, \’gamedate\’, \’moments\’, \’gameid\’, \’home\’])

我们想要的数据可以在 home(主场球员的数据)、visitors(客场球员的数据)和 moments(包含上面用来绘制球员运动动画信息的数据)中找到。

In [6]:

123456 # A dict containing home players datahome = response.json()[\”home\”]# A dict containig visiting players datavisitor = response.json()[\”visitor\”]# A list containing each momentmoments = response.json()[\”moments\”]

下面看一下字典 home 包含的信息。

In [7]:

1 home

Out[7]:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 {\’abbreviation\’: \’HOU\’, \’name\’: \’Houston Rockets\’, \’players\’: [{\’firstname\’: \’Trevor\’,   \’jersey\’: \’1\’,   \’lastname\’: \’Ariza\’,   \’playerid\’: 2772,   \’position\’: \’F\’},  {\’firstname\’: \’Nick\’,   \’jersey\’: \’3\’,   \’lastname\’: \’Johnson\’,   \’playerid\’: 203910,   \’position\’: \’G\’},  {\’firstname\’: \’Josh\’,   \’jersey\’: \’5\’,   \’lastname\’: \’Smith\’,   \’playerid\’: 2746,   \’position\’: \’F\’},  {\’firstname\’: \’Terrence\’,   \’jersey\’: \’6\’,   \’lastname\’: \’Jones\’,   \’playerid\’: 203093,   \’position\’: \’F\’},  {\’firstname\’: \’Joey\’,   \’jersey\’: \’8\’,   \’lastname\’: \’Dorsey\’,   \’playerid\’: 201595,   \’position\’: \’C-F\’},  {\’firstname\’: \’Pablo\’,   \’jersey\’: \’9\’,   \’lastname\’: \’Prigioni\’,   \’playerid\’: 203143,   \’position\’: \’G\’},  {\’firstname\’: \’Dwight\’,   \’jersey\’: \’12\’,   \’lastname\’: \’Howard\’,   \’playerid\’: 2730,   \’position\’: \’C\’},  {\’firstname\’: \’James\’,   \’jersey\’: \’13\’,   \’lastname\’: \’Harden\’,   \’playerid\’: 201935,   \’position\’: \’G\’},  {\’firstname\’: \’Clint\’,   \’jersey\’: \’15\’,   \’lastname\’: \’Capela\’,   \’playerid\’: 203991,   \’position\’: \’C\’},  {\’firstname\’: \’Kostas\’,   \’jersey\’: \’16\’,   \’lastname\’: \’Papanikolaou\’,   \’playerid\’: 203123,   \’position\’: \’F\’},  {\’firstname\’: \’Jason\’,   \’jersey\’: \’31\’,   \’lastname\’: \’Terry\’,   \’playerid\’: 1891,   \’position\’: \’G\’},  {\’firstname\’: \’KJ\’,   \’jersey\’: \’32\’,   \’lastname\’: \’McDaniels\’,   \’playerid\’: 203909,   \’position\’: \’G-F\’},  {\’firstname\’: \’Corey\’,   \’jersey\’: \’33\’,   \’lastname\’: \’Brewer\’,   \’playerid\’: 201147,   \’position\’: \’G-F\’}], \’teamid\’: 1610612745}

visitor 字典包含了同类信息,不过它是关于快船队的信息。

In [8]:

1 visitor

Out[8]:

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...