Перейти к содержимому

Извлечение больших данных Fantasy Premier League с помощью API и Excel Power Query

В предыдущей заметке я рассказал, что ряд менеджеров Fantasy Premier League демонстрирует высокие результаты на протяжении многих сезонов. Я выделил группу элитных менеджеров ТОР-10k, показавших наивысшие результаты в сезонах 2017/2018 – 2021/22, а также группу сравнения, включающую 70k аккаунтов, отобранных случайным образом. Сейчас я покажу, какие возможности для извлечения данных с сайта Fantasy Premier League предоставляет API и Excel Power Query. Если вы не знакомы с Power Query, рекомендую Кен Пульс и Мигель Эскобар. Язык М для Power Query.

Официальный сайт Fantasy Premier League предоставляет доступ к большим данным через API. На каждой API-странице имеется набор данных в разновидности текстового формата JSON (рис. 1). Вам не обязательно разбираться в спецификации формата – коннектор Excel Power Query распознает тип данных на странице и импортирует их без вашего участия.

Рис. 1. API-страница с общей информацией о текущем сезоне Fantasy Premier League

Скачать заметку в формате Word или pdf, примеры в формате Excel

Все API-адреса FPL используют префикс https://fantasy.premierleague.com/api/, за которым следует путь к конечной точке. Официально конечные точки нигде не представлены, но энтузиасты находят и публикуют их. Я собрал здесь всё, что мне удалось найти.

Общая информация о сезоне FPL

… доступна по ссылке https://fantasy.premierleague.com/api/bootstrap-static/ В Excel пройдите по меню Данные –> Получить и преобразовать данные –> Из Интернета (я использую Microsoft Office 365 для предприятий). В открывшемся окне введите, указанную выше ссылку. Нажмите Ok. При первом обращении к сайту FPL откроется окно веб-аутентификации. В левой части окна выберите Анонимно. В качестве уровня, к которому следует применить эти параметры, укажите https://fantasy.premierleague.com/api. Нажмите Подключение. Откроется окно редактора Power Query:

Рис. 2. Данные, доступные в конечной точке bootstrap-static; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке

Доступно 8 записей, представленных:

  • одним значением – числом менеджеров (total_players) = 10 932 004 (на утро 18.12.2022),
  • одной записью – game_setting
  • и шестью списками.

Events (игровые недели)

Правой кнопкой мыши кликните на поле List в записи events, и в контекстном меню выберите Детализация:

Рис. 3. Детализируем список в записи events

Рис. 4. Список events развернулся в 38 записей

Пройдите по меню Средства для списков –> Преобразование –> Преобразовать –> В таблицу. В открывшемся окне (рис. 5) выберите Пользовательский (1), оставьте поле (2) пустым. Это недокументированное свойство Power Query позволяет не указывать разделитель.

Рис. 5. Опции преобразования в таблицу

Список из 38 записей преобразуется в таблицу, состоящую из одного столбца и 38 строк.

Рис. 6. Таблица

Левой кнопкой мыши кликните кнопку Раскрыть в виде двух стрелок. В открывшемся окне снимите галочку с поля Использовать исходное имя столбца как префикс. Каждая из 38 записей развернется в множество столбцов (запрос events_primary в папке bootstrap-static).

Все запросы я сгруппировал по папкам, названным в соответствии с конечной точкой. Не все запросы я вывел на листы Excel, но при желании вы сможете это сделать самостоятельно в приложенном Excel-файле.

Наиболее интересные данные записи events я представил в запросе events_selected

Рис. 7. Основные итоги туров, запрос events_selected

Здесь имена игроков спрятаны под их номерами ID, и мы вернемся к этой таблице позже.

Снова откроем редактор запросов Power Query, правой кнопкой мыши кликнем на запросе events_primary, и выберем Дублировать. Переименуем новый запрос в events_chips. И оставим только два столбца – name и chip_plays:

Рис. 8. Вложенные списки

Раскроем списки в столбце chip_plays. Списки раскрываются в записи, которые также нужно раскрыть. Не забудьте снять галочку с поля Использовать исходное имя столбца как префикс. В результате мы получим таблицу использования фишек. На ее основе можно выполнить анализ:

Рис. 9. Использование фишек

Teams (команды)

Представлена сила команд дома и на выезде, в атаке и защите (teams_primary). Но наиболее часто востребована информация о соответствии ID, краткого и полного наименований (teams_selected):

Рис. 10. ID, сила команд, краткое и полное наименования

Elements_types (позиции)

ID позиции, полное и краткое название, число игроков в каждой позиции, доступные расстановки (elements_types):

Рис. 11. Позиции игроков

Elements (игроки)

88 самых разнообразных данных об игроках: шансы сыграть в туре, изменение стоимости, позиция, имя, ID, очки, форма, загрузки, голы, пасы, клиншиты, ожидаемые голы и пасы, пробитие стандартов и многое другое. Даже больше, чем доступно в официальном приложении (elements_primary).

Создадим дубль запроса elements_primary и переименуем его в elements_ID. Оставим следующие столбцы:

Рис. 12. Столбцы запроса elements_ID

Подставим вместо номера позиции (element_type) его краткое название. Для этого в редакторе Power Query пройдите по меню Главная –> Объединить –> Объединить запросы –> Объединить запросы.

Рис. 13. Настройки объединения двух запросов

В окне Слияние в таблице elements_ID выберите столбец element_type (1). Далее выберите вторую таблицу для слияния – elements_types (2). И, наконец, выберите столбец слияния – id (3). Нажмите Ok. В таблице elements_ID появится дополнительный столбец elements_types, в каждой строке которого содержится таблица. Раскройте этот столбец. Оставьте только одно поле – краткое имя позиции:

Рис. 14. Настройка раскрытия столбца elements_types

Повторите слияние для таблиц elements_ID (поле team) и teams_selected (поле id). Удалите поля с ID типом позиции и ID номера команды, измените последовательность и имена столбцов:

Рис. 15. Финальный вид таблицы elements_ID на листе Excel

Вернемся к запросу events_selected (см. рис. 7) и объединим его с запросом elements_ID отдельно по каждому столбцу таблицы events_selected, в котором фигурирует ID игроков. Заменим ID на имя.

Рис. 16. Таблица events_selected с именами игроков

Другая информация в конечной точке bootstrap-static

game_settings – запись с настройками игры (для целей анализа эти настройки не представляют интереса);

phases – список с разбивкой игровых недель по месяцам; используется для отражения успехов в лиге;

total_players – число аккаунтов;

element_stats – сокращения наименования столбцов таблицы elements (которые и так интуитивно понятны).

Расписание

… доступно по ссылке https://fantasy.premierleague.com/api/fixtures/. Список всех 380 матчей сезона (fixtures_primary). Открывает список перечень перенесенных матчей, для которых еще не назначен тур, в котором они будут играться. Указана дата и время матча, команды, результат (если матч сыгран), коэффициент силы соперников.

Рис. 17. Запрос fixtures_primary

Номера команд можно заменить на краткое наименование с помощью операции объединения запросов. В столбце stats содержатся списки. Для еще не сыгранных матчей они пустые. Для сыгранных матчей включают основную статистику по каждой команде раздельно (fixtures_stats):

Рис. 18. Статистика ARS в GW1

Можно отфильтровать запрос fixtures_primary по номеру тура (event). Например, для тура 20 можно заметить, что в него был добавлен пропущенный матч MCI-TOT:

Рис. 19. Матчи GW20 (fixtures_20)

Чтобы получить дату и время начала матча как в запросе fixtures_20 поэкспериментируйте со столбцом kickoff_time в запросе fixtures_primary.

Данные игроков PL

Шаблон https://fantasy.premierleague.com/api/element-summary/{element_id}/ где вместо {element_id} нужно указать число. Например, чтобы получить данные об игроке Арсенала Saka, введите https://fantasy.premierleague.com/api/element-summary/13/. Запрос возвращает три записи:

  • расписание матчей до конца сезона element_fixtures_primary;
  • статистику игрока в текущем сезоне element_history_primary;
  • статистику игрока в предыдущих сезонах element_history_past_primary.

Наиболее интересная информация, относящая к текущему сезону, представлена в таблице element_history_13

Рис. 20. Статистика Saka в текущем сезоне

Результаты игроков в течение одной игровой недели

Шаблон https://fantasy.premierleague.com/api/event/{GW}/live/. Например, данные по GW16 https://fantasy.premierleague.com/api/event/16/live/. Запрос возвращает подробную информацию по каждому игроку PL по итогам одной GW (event_16).

Информация о менеджере

Базовая информация. Шаблон https://fantasy.premierleague.com/api/entry/{manager_id}/. Данные о лучшем игроке последних пяти сезонов Fábio Borges https://fantasy.premierleague.com/api/entry/728021/. Общая информация о менеджере (entry_728021) и стойка в лигах, в которых он играет (entry_728021_classic).

История выступлений. Шаблон https://fantasy.premierleague.com/api/entry/{manager_id}/history/. Включает три части:

  • выступление в этом сезоне (entry_728021_current);
  • выступления в предыдущих сезонах (entry_728021_past);
  • использование фишек в текущем сезоне (entry_728021_chips).

Рис. 21. Выступления Fábio Borges в сезоне 2022/23

Рис. 22. Выступления Fábio Borges в предыдущих сезонах

Рис. 23. Фишки, использованные в течение сезона

Команда на игровую неделю. Шаблон https://fantasy.premierleague.com/api/entry/{manager_id}/event/{event_id}/picks/. Игроки основы и запаса для каждого менеджера и каждой недели. Например, состав Fábio Borges на первую игровую неделю https://fantasy.premierleague.com/api/entry/728021/event/1/picks/ (entry_728021_GW1_picks):

Рис. 24. Состав Fábio Borges на GW1

Также можно извлечь список автозамен (entry_728021_GW1_automatic_subs)

Трансферы. Шаблон https://fantasy.premierleague.com/api/entry/{manager-id}/transfers/. Список всех трансферов, совершенных менеджером в текущем сезоне (entry_728021_transfers):

Рис. 25. Трансферы Fábio Borges в сезоне 2022/23, включая WC

Турнирная таблица классической лиги

Шаблон https://fantasy.premierleague.com/api/leagues-classic/{league_id}/standings/. Стойка в лиге Top 1k ANY Season – zqllwg после GW16 https://fantasy.premierleague.com/leagues/4980/standings/:

Рис. 26. Верхние строчки в лиге Top 1k ANY Season – zqllwg после GW16 (leagues-classic_4980_page1)

Лига Overall имеет номер 314. Если в лиге более 50 участников, то к следующим страницам рейтинга модно получить доступ, добавив к URL после слеша ?page_standings={N}, где {N} – номер страницы.

Прочие конечные точки

Моя команда. Шаблон https://fantasy.premierleague.com/api/my-team/{manager_id}/. Требуется аутентификация. Я не справился с этой задачей. Среди источников вы найдете руководство по аутентификации. Если на ПК вы вошли в аккаунт через интерфейс официального приложения FPL, то этот запрос вернет информацию по вашей команде.

Команда мечты. Шаблон https://fantasy.premierleague.com/api/dream-team/{event_id}/ (dream-team_GW16).

Статус события. https://fantasy.premierleague.com/api/event-status/. Отражает статусы каждого дня текущей игровой недели (event-status).

Заметки. https://fantasy.premierleague.com/api/team/set-piece-notes/. Новости об игроках PL (set-piece-notes). Похоже, что в настоящее время эта конечная точка не обновляется.

Источники

Fantasy Premier League API Endpoints: A Detailed Guide

Cheat sheet of all current FPL Endpoints

Fantasy Premier League API authentication guide

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *