Введение:

Добро пожаловать, любители баскетбола и мастера данных! Готовы отправиться в захватывающее путешествие в мир аналитики данных НБА? В этой статье мы раскроем секреты получения данных НБА от balldontlie.io, золотой жилы как для фанатиков спорта, так и для специалистов по данным. Приготовьтесь поднять свою спортивную аналитику и игру по построению моделей машинного обучения на совершенно новый уровень!

Прошли те времена, когда единственными вариантами были традиционные платформы, такие как Kaggle.com и OpenML. Сегодня мы покажем вам, почему важно исследовать новые источники данных, чтобы раскрыть скрытые закономерности и знания в огромном мире статистики НБА. Диверсификация источников данных не только обогащает ваш анализ, но и открывает возможности для получения ценных сведений, которые другие могут не заметить.

Хотя нашей путеводной звездой в этом квесте будет «Майами Хит», не бойтесь, потому что методы, которые мы собираемся разгадать, применимы ко всем командам НБА! Так что пристегнитесь и окунитесь в волнующий мир аналитики баскетбольных данных! Вместе мы покорим неизвестное, по одному набору данных за раз!

Начало работы с API balldontlie.io

Прежде чем мы углубимся в мир аналитики данных NBA, давайте познакомимся с нашим мощным союзником: API balldontlie.io. Этот удобный API имеет множество привлекательных функций, которые делают его ценным активом для любителей баскетбола, ориентированных на данные:

  • Электронная почта или ключ API не требуются: сразу приступайте к делу без утомительных процессов регистрации.
  • Сокровищница исторических данных: доступ к записям, начиная с сезона 1979 года и заканчивая сегодняшним днем.
  • Игровая статистика в реальном времени: будьте в курсе игровых данных в режиме, близком к реальному времени, которые обновляются примерно каждые 10 минут.
  • Щедрые ограничения скорости: наслаждайтесь свободой делать до 60 запросов в минуту без ограничений.

Этот универсальный API предлагает конечные точки для всех ваших потребностей в данных NBA: игроки, команды, игры и статистика. Имея в своем распоряжении такой надежный инструментарий, мы готовы покорить захватывающую область анализа данных NBA!

Получение данных «Майами Хит» из API balldontlie.io

В этом разделе мы покажем, как получить данные Miami Heat из API balldontlie.io с помощью Python. Мы разобьем процесс на простые для понимания подразделы, начиная с получения информации обо всех командах НБА и заканчивая поиском «Майами Хит» в списке.

Получение информации о командах NBA и Miami Heat

Чтобы получить информацию о командах НБА, а затем найти команду «Майами Хит», мы отправим запрос на конечную точку /teams, а затем найдем команду в ответе. Вот фрагмент кода Python, который поможет вам в этом, а также преобразование результатов в pandas DataFrame:

import requests
import pandas as pd

API_BASE_URL = 'https://www.balldontlie.io/api/v1'

def get_nba_teams():
    teams_url = f'{API_BASE_URL}/teams'
    response = requests.get(teams_url)
    teams = response.json()['data']
    return pd.DataFrame(teams)

def get_miami_heat_info(teams_df):
    miami_heat = teams_df.loc[teams_df['full_name'] == 'Miami Heat']
    return miami_heat if not miami_heat.empty else None

nba_teams_df = get_nba_teams()
miami_heat_df = get_miami_heat_info(nba_teams_df)

if miami_heat_df is not None:
    print("Miami Heat team information:")
    print(miami_heat_df)
else:
    print("Error: Miami Heat team not found.")

Этот фрагмент кода определяет функцию get_nba_teams, которая отправляет HTTP-запрос на конечную точку /teams и преобразует полученные данные команды в кадр данных pandas. Функция get_miami_heat_info находит команду «Майами Хит» в кадре данных и возвращает ее строку, если она найдена, или None, если нет. Затем код вызывает эти функции и выводит информацию о команде Miami Heat в формате DataFrame.

Получение информации об игроке «Майами Хит»

Чтобы получить информацию об игроках «Майами Хит», мы сначала получим данные обо всех игроках НБА, а затем отфильтруем список, чтобы найти только игроков «Майами Хит». Кроме того, мы создадим метод для получения информации о конкретном игроке. Вот фрагмент кода Python, который поможет вам в этом, а также преобразование результатов в кадры данных pandas:

import requests
import pandas as pd

API_BASE_URL = 'https://www.balldontlie.io/api/v1'

def process_player_data(data):
    players_list = []
    for player in data:
        player_info = player.copy()
        for key, value in player['team'].items():
            player_info[f'team_{key}'] = value
        del player_info['team']
        players_list.append(player_info)
    return players_list

def get_all_players():
    all_players = []
    page = 1
    while True:
        response = requests.get(f"{API_BASE_URL}/players", params={"page": page, "per_page": 100})
        data = response.json()
        if not data["data"]:
            break
        all_players.extend(process_player_data(data["data"]))
        page += 1
    return pd.DataFrame(all_players)

def get_miami_heat_players(players_df, miami_heat_id):
    return players_df.loc[players_df['team_id'] == miami_heat_id]

def get_specific_player(player_id):
    response = requests.get(f"{API_BASE_URL}/players/{player_id}")
    data = response.json()
    return pd.DataFrame([data]) if data else None

all_players_df = get_all_players()
print("All players:")
print(all_players_df.head())

miami_heat_id = get_miami_heat_id()
miami_heat_players_df = get_miami_heat_players(all_players_df, miami_heat_id)
print("\nMiami Heat players:")
print(miami_heat_players_df.head())

player_id = 14
specific_player_df = get_specific_player(player_id)
if specific_player_df is not None:
    print(f"\nSpecific player (ID: {player_id}) information:")
    print(specific_player_df.head())

Фрагмент кода определяет функцию get_all_players, которая извлекает всех игроков НБА, отправляя HTTP-запросы на конечную точку /players и обрабатывая нумерацию страниц. Затем он преобразует полученные данные игрока в pandas DataFrame. Функция get_miami_heat_players фильтрует DataFrame, чтобы найти только игроков «Майами Хит» на основе идентификатора команды «Майами Хит». Функция get_specific_player извлекает информацию для конкретного игрока, используя его идентификатор игрока.

Код сначала вызывает функцию get_all_players для получения данных обо всех игроках НБА. Затем он вызывает функцию get_miami_heat_players для фильтрации и отображения только игроков «Майами Хит». Наконец, он использует функцию get_specific_player для получения и отображения информации о конкретном игроке по его идентификатору.

Получение информации об игре «Майами Хит» для определенного сезона

В этом разделе мы покажем, как получить игровую информацию о «Майами Хит» в сезоне 2022–2023 годов. Сначала мы создадим новый DataFrame, содержащий все игры, а затем отфильтруем игры Miami Heat. Атрибуты period, status и time заслуживают внимания:

  • period: целое число, представляющее текущий квартал (0, 1, 2, 3 или 4). 0 указывает на игру, которая еще не началась, а 4 указывает либо на завершенную игру, либо на игру в четвертой четверти.
  • status: строка, описывающая текущий статус игры, например "{start_time}", "1-й квартал", "2-й квартал", "Перерыв", "3-й квартал", "4-й квартал" или "Финал". {start_time} выглядит примерно как «19:00 по восточному времени» и указывает на игру, которая еще не началась.
  • time: строка, отображающая оставшееся время в текущем периоде, например, «3:44», или пустая строка (' '), если игра еще не началась или завершена.

Вот полный код для этого раздела:

import requests
import pandas as pd

API_BASE_URL = 'https://www.balldontlie.io/api/v1'

def process_game_data(data):
    games_list = []
    for game in data:
        game_data = {
            'id': game['id'],
            'date': game['date'],
            'home_team_id': game['home_team']['id'],
            'home_team_name': game['home_team']['full_name'],
            'visitor_team_id': game['visitor_team']['id'],
            'visitor_team_name': game['visitor_team']['full_name'],
            'period': game['period'],
            'status': game['status'],
            'time': game['time']
        }
        games_list.append(game_data)
    return games_list

def get_all_games(season):
    all_games = []
    page = 1
    while True:
        response = requests.get(f"{API_BASE_URL}/games", params={"page": page, "per_page": 100, "seasons[]": season})
        data = response.json()
        if not data["data"]:
            break
        all_games.extend(process_game_data(data["data"]))
        page += 1
    return pd.DataFrame(all_games)

def get_miami_heat_games(games_df, miami_heat_id):
    return games_df[(games_df['home_team_id'] == miami_heat_id) | (games_df['visitor_team_id'] == miami_heat_id)]

# Get all games for the 2022-2023 season
all_games_df = get_all_games(2022)
print(all_games_df.head())

# Filter out Miami Heat games
miami_heat_id = 16
miami_heat_games_df = get_miami_heat_games(all_games_df, miami_heat_id)
print(miami_heat_games_df.head())

Получение статистики игр в Майами Хит для определенного сезона

В этом разделе мы углубимся в множество данных, предоставляемых NBA API. Мы будем получать игровую статистику для всей лиги, а затем фильтровать ее, чтобы получить статистику специально для Майами Хит. Примечание. Это может занять до 25 минут.

import requests
import pandas as pd
from time import sleep

def get_all_game_stats(season):
    game_stats = []
    page = 1

    while True:
        print(f"Fetching data for season {season} - page {page}...")
        response = requests.get(f"https://www.balldontlie.io/api/v1/stats?seasons[]={season}&page={page}&per_page=100")

        if response.status_code == 200:
            data = response.json()
            game_stats.extend(data['data'])

            if page >= data['meta']['total_pages']:
                print("Data fetched successfully!")
                break
            else:
                page += 1
        else:
            sleep(1)
    
    return pd.DataFrame(game_stats)

def get_miami_heat_game_stats(game_stats_df):
    return game_stats_df[game_stats_df['player.team.id'] == miami_heat_id]

miami_heat_id = 14
season = 2021
game_stats_df = get_all_game_stats(season)
miami_heat_game_stats = get_miami_heat_game_stats(game_stats_df)

print(game_stats_df.head())
print(miami_heat_game_stats.head())

game_stats_df.to_csv("game_stats_2021-2022.csv", index=False)
miami_heat_game_stats.to_csv("miami_heat_game_stats_2021-2022.csv", index=False)

В этом разделе мы начнем с импорта необходимых библиотек, таких как запросы и панды. Затем мы определяем функцию с именем get_all_game_stats, которая извлекает всю игровую статистику за данный сезон, отправляя запросы API с разбиением на страницы. Эта функция возвращает DataFrame, содержащий игровую статистику.

Затем мы устанавливаем переменную сезона на 2021 и вызываем функцию get_all_game_stats, чтобы получить игровую статистику для всей лиги. Когда у нас есть вся игровая статистика в DataFrame с именем game_stats_df, мы отфильтровываем игровую статистику Miami Heat, создавая новый DataFrame с именем miami_heat_stats_df. Этот новый DataFrame содержит только строки, в которых «team_id» равен team_id «Майами Хит», что равно 14.

После выполнения этого кода у нас есть DataFrame с именем miami_heat_stats_df, содержащий игровую статистику конкретно для «Майами Хит» в сезоне 2021-2022. Этот DataFrame содержит множество информации, которую вы можете дополнительно анализировать и визуализировать в соответствии с вашими потребностями. В конце мы отображаем первые пять строк обоих DataFrames, давая представление о данных, которые мы извлекли и отфильтровали.

Заключение

В этом руководстве мы рассмотрели, как использовать balldontlie.io API для извлечения данных НБА и фильтрации их для анализа конкретной команды, Майами Хит. Мы начали с получения информации о командах и игроках в лиге, а затем перешли к получению подробных игровых данных за конкретный сезон. В частности, мы рассмотрели сезон НБА 2021–2022 годов.

Мы рассмотрели несколько важных концепций и методов, в том числе разбиение на страницы для извлечения больших наборов данных, фильтрацию фреймов данных с помощью Pandas и обработку данных JSON. В итоге мы создали два CSV-файла: один, содержащий игровую статистику всей лиги в сезоне 2021–2022, и другой, посвященный исключительно игровой статистике «Майами Хит».

Имея под рукой эти данные, вы можете выполнять дальнейший анализ, создавать визуализации и получать представление об эффективности «Майами Хит» и лиги в целом. Эти знания могут быть применены к другим командам и сезонам и могут послужить основой для более сложных проектов анализа данных в будущем.