В предыдущей заметке я рассказал, что ряд менеджеров 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