Очистить статистику игрока из НХЛ-API - PullRequest
0 голосов
/ 02 января 2019

Пытался вычистить статистику каждого игрока из игры, но столкнулся с проблемой при попытке использования метода .get ().

Это API: https://statsapi.web.nhl.com/api/v1/game/2017020002/feed/live

Чтобы очистить статистику игрока, мне сначала нужен их ID. Первый цикл for делает это, получая ('skaters') и захватывая их ID и помещая его в списке player_id.

Следующие два цикла for должны получать статистику игрока как для дома / в гостях, так и для каждого идентификатора в player_id. Идентификатор игрока в виде числа => 8474756 Но ключ для захвата player_stats называется "ID" ИМЯ ИГРОКА ", поэтому каждый ключ имеет уникальное имя, и именно поэтому цикл for существует. Но я не знаю точно, как заставить это работать. Спасибо за вашу помощь!

import numpy as np
import pandas as pd
import requests
import json
from sklearn import preprocessing
from sklearn.preprocessing import OneHotEncoder

results = []
player_id = []
 for game_id in range(2018020001, 2018020002, 1):
    url = 'https://statsapi.web.nhl.com/api/v1/game/{}/feed/live'.format(game_id)
    r = requests.get(url)
    game_data = r.json()

for homeaway in ['home','away']:
    player_dict = game_data.get('liveData').get('boxscore').get('teams').get(homeaway).get('skaters')
    player_id.append(player_dict)

for homeaway in ['home', 'away']:
    for playerID in player_id:
        play_dict = game_data.get('liveData').get('boxscore').get('teams')
        .get('homeaway').get('players').get('ID'+player_id).get('person')

Вот код, который мне нужен для очистки игровых данных, я хотел бы получить такой же тип вывода, как это дает мне.

import numpy as np
import pandas as pd
import requests
import json
from sklearn import preprocessing
from sklearn.preprocessing import OneHotEncoder

results = []
for game_id in range(2018020598, 2018020650, 1):
    url = 'https://statsapi.web.nhl.com/api/v1/game/{}/boxscore'.format(game_id)
    r = requests.get(url)
    game_data = r.json()

    for homeaway in ['home','away']:

    game_dict = game_data.get('teams').get(homeaway).get('teamStats').get('teamSkaterStats')
    game_dict['team'] = game_data.get('teams').get(homeaway).get('team').get('name')
    game_dict['homeaway'] = homeaway
    game_dict['game_id'] = game_id
    results.append(game_dict)


df = pd.DataFrame(results)

Вот пример таблицы того, как я хотел бы, чтобы набор данных выглядел как

PlayerID   Team   Won/lost   opponent   game_id     metric1   metric2 metric_n
  1          LA      1          CAP       0001         10       10        10

1 Ответ

0 голосов
/ 02 января 2019

Ваш player_id - это список списков , поэтому, когда вы делаете for playerID in player_id:, вы фактически просматриваете подсписки, но не идентификаторы игроков. Попробуйте изменить свой код:

player_id = {}
results = []

for homeaway in ['home','away']:
    player_dict = game_data.get('liveData').get('boxscore').get('teams').get(homeaway).get('skaters')
    player_id[homeaway] = player_dict

Теперь player_id словарь, как {'home': [ID_1, ID_2,...], прочь : [ID_3, ID_4, ...]}

for homeaway in player_id:
    for playerID in player_id[homeaway]:
        play_dict = game_data.get('liveData').get('boxscore').get('teams').get(homeaway).get('players').get('ID' + str(playerID)).get('person')
        results.append(play_dict)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...