
Описание проекта
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 элементов по популярности
Описание применения генеративной модели