Описание проекта
Dungeons & Dragons - настольно-ролевая игра в жанре фэнтези, с каждым годом лишь набирающая популярность. Механика игры во многом полагается на различные вычисления. Успех того или иного действия зависит от броска дайсов + характеристик персонажа + бонусов умений.
Цель данного проекта: проанализировать, на основе чего игроки выбирают расу и класс для своих персонажей, выявить популярные комбинации и их возможное влияние на характеристики и ход игры.
Выбранные данные и их источник
Для поиска необходимых датасетов я использовала два репозитория данных — kaggle.com и github.com, где нашла два подходящих датасета, основанных на данных с сайта DnD Beyond.
Оба датасета включают в себя основные характеристики для создания персонажа: Раса (Race), Класс (Class), Архетип (Archetype) или Подкласс (Subclass), Уровень (Level), Характеристики (Strength, Dexterity, Constitution, Intelligence, Wisdom, Charisma), Предыстория (Background), Мировоззрение (Alignment). Я остановилась на датасете dnddata, включающем в себя данные об около 8000 персонажах.
Почему именно этот датасет? Анализ данных о персонажах позволяет выявить закономерности в их выборе и понять психологию игроков, ответив сразу на несколько вопросов:
- Какие расы и классы самые популярные? Какие из них идеально сочетаются друг с другом?
- Любят ли игроки необычные комбинации или придерживаются классики (например, человек-воин)?
- Как выбирают характеристики: для лучшего результата (min-maxing) или для лучшего отыгрыша?
Для визуализации полученных данных я использовала следующие графики:
- столбчатые диаграммы (для сравнения популярности классов и рас),
- круговую диаграмму (для отображения распределения популярности классов),
- тепловую карту (для визуализации комбинаций расы и класса),
- радарную диаграмму (для определения средних характеристик между разными классами).
Стилизация
«Книга игрока» и «Руководство мастера»
Визуальный стиль основан на оформлении официальных книг по Dungeons & Dragons. Светлый фон, напоминающий пергамент, темно-красные заголовки, светло-зеленый в таблицах:
bg_color = '#F5E9D6' bar_color = '#C6D09E' title_color = '#8B0000' text_color = '#2E2F27'
Страницы из «Player’s Handbook»
Также, для каждого из 12 основных классов я задала индивидуальный цвет:
class_palette = { 'Barbarian': '#E7623E', 'Bard': '#AB6DAC', 'Cleric': '#91A1B2', 'Druid': '#7A853B', 'Fighter': '#7F513E', 'Monk': '#51A5C5', 'Paladin': '#859E54', 'Ranger': '#507F62', 'Rogue': '#555752', 'Sorcerer': '#8C2B2B', 'Warlock': '#834EA6', 'Wizard': '#2A50A1', }
Этапы работы
Для работы с данными сначала я загрузила необходимые библиотеки и датасет, установила цветовую палитру, а затем приступила к предварительной обработке данных (заполнение пропущенных значений, фильтрация).
import pandas as pd import numpy as np import matplotlib.pyplot as plt
df = pd.read_csv('dnd_characters.csv', sep=',')
bg_color = '#F5E9D6' bar_color = '#C6D09E' title_color = '#8B0000' text_color = '#2E2F27'
df['race'] = df['race'].fillna('Unknown') df['justClass'] = df['justClass'].fillna('Unknown')
В датасете содержится информация об около 8000 персонажей, что слишком сложно для восприятия. Я решила отфильтровать данные, оставив только основные расы и классы; мультиклассы разделила, оставив только первый класс.
Столбчатая диаграмма показывает частотное распределение. Люди (Human) доминируют, в том числе за счет их универсальности в сеттингах. Второе место занимают Эльфы (Half-Elf, Wood Elf), а третье - Драконорожденные (Dragonborn), чего я не ожидала.
Плуты (Rogue) и Воины (Fighter) являются наиболее распространенными, что говорит о популярности маневренных и боевых архетипов.
На этом графике наглядно показан отрыв топ-3 классов Воина, Плута и Жреца. Остальные же классы распределены примерно одинаково, наименее популярный - Колдун (Warlock). Результаты этого графика меня немного удивили: я думала, что Волшебник (Wizard) будет популярнее Жреца (Chleric), но он делит одно место со Следопытом (Ranger), которого я считала одним из наименее популярных классов.
Тепловая карта дает возможность исследовать данные и проследить самые сильные корреляции. Она позволяет быстро выявить стереотипные или, наоборот, неожиданные сочетания. Как и ожидалось, самой популярной является комбинация человек-воин, и в целом раса человека. Дальше идут лесной эльф-следопыт, дварф-жрец и полуорк-варвар. Это логичные сочетания, в которых расовые бонусы и характеристики идеально дополняют механику и стиль игры определенного класса.
Этот график объясняет базовые архетипы классов. Он показывает, что основная характеристика Плута (Rogue) - Ловкость, в то время как Паладин (Paladin) заточен под Силу. В целом, нет ярко выраженного мин-максерства (mix-maxing), при котором прокачивают только ключевые характеристики, минимизируя или игнорируя менее значимые, что ведет к дисбалансу.
Дополнительно: вывод статистики
print(f"Всего персонажей: {len(df)}") print(f"Уникальных рас: {df['race'].nunique()}") print(f"Уникальных классов: {df['primary_class'].nunique()}") print(f"Самые популярные расы: {', '.join(race_counts.head(5).index.tolist())}") print(f"Самые популярные классы: {', '.join(class_counts.head(5).index.tolist())}")
Всего персонажей: 10894 Уникальных рас: 320 Уникальных классов: 20 Самые популярные расы: Human, Half-Elf, Wood Elf, Dragonborn, Tiefling Самые популярные классы: Fighter, Rogue, Cleric, Barbarian, Paladin
Вывод
- Соотношение популярности классов соответствует классическим архетипам фэнтези
- Высокий процент выбора расы людей отражает их гибкость в создании персонажа
- Стереотипные комбинации: Человек-Воин подтверждает традиционные архетипы
- Между выбором расы и класса есть взаимосвязь: некоторые комбинации идеально дополняют друг друга
Используемые статистические методы
Визуализация распределения: тепловая карта, столбчатая диаграмма, круговая диаграмма, радарная диаграмма.
Частотный анализ: подсчет количества персонажей по расам и классам
Процентное распределение: доля каждого класса от общего числа персонажей
Процентное соотношение: анализ доли каждого элемента в общей выборке
Ранжирование: определение топ-N элементов по популярности




