Original size 1140x1600

Связь выбора героев с победами на The International 2023

PROTECT STATUS: not protected
The project is taking part in the competition

Когда я выбирал тему для проекта, мне хотелось взять что-то, где есть понятные данные, и при этом тема была связана с Dota 2. Поэтому я решил посмотреть, как меняется winrate героев в матчах крупного турнира (TI 2023) и как winrate соотносится с популярностью героев.

Почему эта тема оказалась удобной для анализа: данные по матчам Dota 2 находятся в открытом доступе и могут быть получены через сервис OpenDota. Формат данных позволяет достаточно быстро получить большое количество строк и на их основе построить статистику, пригодную для анализа. Результат матча (победа или поражение) легко переводится в числовой вид, благодаря чему его удобно использовать для расчёта winrate. Кроме того, герои в Dota 2 — удобная основа для визуализаций, таких как топ-10 по популярности или распределения показателей.

big
Original size 1259x913

Данные с сайта OpenDota с сортировкой по League

Цветовая палитра

Код палитры и стиля

big
Original size 786x237

Палитра подобрана в соответствии с цветами игры

Нормализация исхода матча

В ходе анализа я обнаружил, что столбец win в исходных данных представлен в разных форматах, включая логические, числовые и строковые значения, что затрудняет дальнейшую обработку и расчёт статистических показателей.

Чтобы привести данные к единому виду, я реализовал функцию normalize_win_col, которая преобразует все возможные варианты записи исхода матча в бинарный формат, где победа обозначается единицей, а поражение — нулём.

Функция автоматически учитывает тип данных столбца и корректно обрабатывает логические, числовые и строковые значения. В случае если некоторое значение не удаётся однозначно интерпретировать, функция сообщает об ошибке и выводит примеры проблемных данных. В результате в таблице создаётся столбец win_num, который используется для дальнейшего анализа и расчёта winrate героев.

Original size 1784x1714

Нормализация исхода матча

Загрузка и сопоставление названий героев

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

Я использовал открытое API OpenDota, которое предоставляет актуальный список героев и их идентификаторов.

Чтобы избежать повторных запросов к API и снизить зависимость от сетевого соединения, я реализовал механизм локального кэширования: при первом запуске данные загружаются из API и сохраняются в JSON-файл, а при последующих запусках считываются напрямую из него.

Original size 1852x1278

Загрузка и сопоставление названий героев

В процессе обработки я формирую словарь id_to_name, в котором каждому hero_id соответствует локализованное имя героя. Если локализованное название отсутствует, используется альтернативное имя или автоматически сгенерированное обозначение. Такой подход позволяет использовать понятные названия героев во всех дальнейших расчётах и визуализациях и значительно упрощает интерпретацию результатов анализа.

Таблица статистики по героям

После подготовки данных я сформировал итоговую таблицу статистики по героям. Для этого я привёл столбец hero_id к числовому формату и исключил некорректные значения, после чего сгруппировал данные по героям. Для каждого героя было рассчитано количество игр, количество побед и winrate как отношение побед к общему числу игр.

Original size 2038x1158

Таблица статистики по героям

Чтобы уменьшить влияние случайных результатов, я ввёл минимальный порог по количеству игр (MIN_GAMES) и учитывал только тех героев, которые встретились в данных достаточное число раз. На завершающем этапе я сопоставил идентификаторы героев с их названиями, получив итоговую таблицу hero_stats, которая использовалась для дальнейшего анализа и визуализации.

Визуализация популярности героев

На данном графике представлена десятка самых популярных героев по количеству сыгранных матчей в рамках анализируемой выборки. По оси X указаны названия героев, а по оси Y — количество игр, в которых каждый из них участвовал. Столбчатый формат визуализации позволяет наглядно сравнить частоту выбора героев между собой.

Original size 1514x918

Визуализация популярности героев

Из графика видно, что Muerta заметно выделяется среди остальных героев и имеет наибольшее количество игр, что может указывать на высокий приоритет этого героя в матчах турнира. Остальные герои из топ-10 имеют близкие значения по количеству игр, что говорит о сравнительно равномерном распределении популярности внутри основной группы часто выбираемых героев. Такой график позволяет зафиксировать мета-пул героев и служит отправной точкой для дальнейшего анализа их эффективности и winrate.

Original size 1187x487

Столбчатая диаграмма

Зависимость популярности героев и winrate

Для анализа взаимосвязи между популярностью героев и их эффективностью я использовал диаграмму рассеяния. По оси X на графике отложено количество сыгранных матчей, которое отражает популярность героя в рамках выборки, а по оси Y — его winrate. Каждая точка соответствует одному герою и показывает, как часто он выбирался и насколько успешно при этом выступал.

Original size 1514x1198

Зависимость популярности героев и winrate

На график была добавлена горизонтальная пунктирная линия на уровне 50%, обозначающая условный баланс между победами и поражениями. Эта линия служит визуальным ориентиром и позволяет быстро определить, какие герои имеют winrate выше среднего значения, а какие — ниже. Использование единого нейтрального цвета для точек подчёркивает, что целью графика является анализ общей зависимости между показателями, а не сравнение отдельных категорий героев.

По результатам визуализации можно заметить, что большинство героев, независимо от их популярности, располагаются вблизи отметки 50% winrate. Это указывает на относительную сбалансированность соревновательной среды.

При этом высокая популярность героя не гарантирует высокий winrate: среди часто выбираемых героев встречаются как эффективные, так и менее успешные варианты. Одновременно с этим можно наблюдать героев с небольшим количеством игр, но высоким winrate, однако такие случаи требуют осторожной интерпретации из-за ограниченной выборки.

Original size 987x587

Диаграмма рассеяния

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

Распределение показателя winrate среди героев

В этом графике я анализирую распределение показателя winrate среди героев. Для этого используется гистограмма, которая показывает, сколько героев попадает в разные диапазоны значений winrate. В анализ включены только герои с достаточным числом матчей, чтобы исключить искажения из-за малого объёма данных.

Original size 1514x1158

Распределение показателя winrate среди героев

Вертикальная линия на уровне 50% обозначает условный баланс и служит точкой сравнения для оценки того, насколько winrate отдельных героев отклоняется от среднего значения. Основная масса значений сосредоточена вблизи этого уровня, что указывает на относительный баланс героев в рамках выбранного датасета.

Original size 986x487

Гистограмма распределения

Гистограмма позволяет быстро оценить общую картину распределения winrate и понять, являются ли высокие или низкие показатели редким исключением или распространённым явлением.

Обобщённый анализ распределения winrate

В данном фрагменте кода используется ящиковая диаграмма для обобщённого анализа распределения winrate. Этот тип графика позволяет быстро оценить типичное значение, разброс и общий диапазон показателя без детального рассмотрения каждого отдельного героя.

Original size 1514x878

Обобщённый анализ распределения winrate

Для построения берётся заранее подготовленный столбец winrate, отфильтрованный по минимальному числу матчей, что снижает влияние случайных результатов. Основной диапазон значений выделен нейтральным цветом, а медиана подчеркнута акцентным цветом, так как именно она отражает центральное значение winrate в выборке.

Original size 586x487

Ящиковая диаграмма

Заключение

В ходе анализа я изучил популярность героев и их winrate на основе матчей с достаточным числом игр, чтобы избежать случайных искажающих значений. Визуализация показала, что большинство героев имеет winrate, близкий к 50%, что указывает на общий баланс игры.

Также видно, что высокая популярность героя не означает автоматически высокий winrate: часто выбираемые герои могут показывать как успешные, так и слабые результаты. Гистограмма и ящиковая диаграмма подтверждают, что крайние значения winrate встречаются редко, а основная масса результатов сосредоточена в среднем диапазоне.

В целом анализ подтверждает, что эффективность героев в Dota 2 определяется не только их популярностью, а баланс игры остаётся достаточно стабильным.

Для улучшения кода и визуализаций применялся ChatGPT.