在这篇文章中,我介绍了如何从 stats.nba.com 上现场实况运动动画中提取一些额外的信息。
In [1]:
1 2 3 4 5 6 7 8 9 10 |
import requests import pandas as pd import numpy as np %matplotlib inline import matplotlib.pyplot as plt import seaborn as sns from IPython.display import IFrame |
In [2]:
1 2 |
sns.set_color_codes() sns.set_style("white") |
我们将会提取季后赛快船和火箭系列赛第 5 场比赛中一个回合的信息。在那个回合中,James Harden 突破到篮下,撕破快船的防守,然后传球给 Trevor Ariza,后者投入一个空位 3 分球。
我按照下面的方法嵌入运动动画。
In [3]:
1 2 |
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]:
1 2 3 4 5 |
# Get the webpage response = requests.get(url) # Take a look at the keys from the dict # representing the JSON data response.json().keys() |
Out[5]:
1 |
dict_keys(['visitor', 'gamedate', 'moments', 'gameid', 'home']) |
我们想要的数据可以在 home
(主场球员的数据)、visitors
(客场球员的数据)和 moments
(包含上面用来绘制球员运动动画信息的数据)中找到。
In [6]:
1 2 3 4 5 6 |
# A dict containing home players data home = response.json()["home"] # A dict containig visiting players data visitor = response.json()["visitor"] # A list containing each moment moments = response.json()["moments"] |
下面看一下字典 home
包含的信息。
In [7]:
1 |
home |
Out[7]:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
{'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]: