编译|黄念程序注释|席雄芬动画效果| 顾运筠校对|丁一,姚佳灵
编辑按:
我曾是个狂热的飞人乔丹的球迷。当年,几乎看了他的每一场比赛!看NBA的比赛是我生命中不可缺少的部分,这是我看到这个利用Python写NBA球员系列时,特别感兴趣的原因。希望这个系列能带给大家一点关于NBA的知识。同时为中国男篮再次获得亚锦赛冠军喝彩!什么时候,我们的CBA也提供这么详细的数据让大家研究一下队员就好了。
文摘曾于8月18日发布《如何运用Python绘制NBA投篮图表》,与本文有直接联系,点击文章名称可回顾旧文。
在本文中,我将介绍如何在stats.nba.com上的比赛运动动画中提取一些额外的信息。
In[1]:
In[2]:
我们将从一场比赛中提取信息。这是快船队(Clippers)和火箭队(Rockets)在季后系列赛的第5场比赛。在比赛中,James Harden瓦解了快船队的防守,冲向篮筐,把球传给Trevor Ariza,轻松获得3分。
我已经在下面嵌入了运动动画。
In[3]:
输出是一个动画
获取数据
下面是我们从stats.nba.com的应用程序接口获取数据的链接。链接里有2个参数:eventid是特定比赛的ID,gameid则是季后赛的ID。
In[4]:
我们发出请求提取数据
In[5]:
Out[5]:
我们想要的数据在:home (主场球员的数据),visitors (客场球员的数据),和moments (使用于动画中用于绘制球员运动轨迹信息的数据)
In[6]:
让我们看看home字典里包含的信息。
In [7]:
home
Out[7]:
Visitor字典包含了关于快船队的同样类型的信息。
In[8]:
visitor
Out[8]:
现在,让我们看看moments列表。
In [9]:
#检查长度
len(moments)
Out[9]:
700
长度告诉我们,上面的动画由700个项目/时刻组成。但是,都有些什么信息呢?让我们来看看第一个。
In [10]:
moments[0]
Out[10]:
[3,
1431486313010,
715.32,
19.0,
None,
[[-1, -1, 43.51745, 10.76997, 1.11823],
[1610612745, 1891, 43.21625, 12.9461, 0.0],
[1610612745, 2772, 90.84496, 7.79534, 0.0],
[1610612745, 2730, 77.19964, 34.36718, 0.0],
[1610612745, 2746, 46.24382, 21.14748, 0.0],
[1610612745, 201935, 81.0992, 48.10742, 0.0],
[1610612746, 2440, 88.12605, 11.23036, 0.0],
[1610612746, 200755, 84.41011, 43.47075,0.0],
[1610612746, 101108, 46.18569, 16.49072,0.0],
[1610612746, 201599, 78.64683, 31.87798,0.0],
[1610612746, 201933, 65.89714, 25.57281,0.0]]]
首先,我们看到moments中的时刻或项目是一个包含了一堆信息的列表。我们逐一查看列表中的每一个项目。
1 moments[0]中的第1项是这一刻所发生的时期或季度。
2 Unix时间。(是一种时间表示方式,定义为从格林威治时间1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒——译者注)
3第3项是指比赛剩下的时间。
4第4项是指计时器剩下的时间。
5我不知道第5项代表什么。
6第6项是由11个子列表组成的列表,每个子列表包含球场上某个球员或球的坐标。
6.1 11个子列表中的第1个包含了球的信息。
6.1.1前2项是表示teamid和playerid的值,用于表明该列表是关于球的信息。
6.1.2接下来的2项则是x和y坐标值,用于表示球场中球的位置。
6.1.3第5项(最后一项)是代表球