
Что и Почему?
Мне хотелось сделать проект основываясь на данных, которые были бы мне действительно интересны, и я бы могла применить их для своих целей. Так, после недолгих размышлений и поиска я нашла на сайте Kaggle таблицу с заклинаниями из настольной ролевой игры «D& D». Так как я сама играю за персонажа, который пользуется магией, и мне в целом интересно, как устроен спеллкастинг в данной игре, я решила остановиться на этой таблице.

таблица «dnd-spells» на Kaggle
Процесс работы
Первым делом для начала работы мне нужно было импортировать некоторые библиотеки, такие как pandas и numpy — для обработки информации, а также matplotlib и seaborn — для оформления данных. Часть библиотек я добавляла по мере работы. После того как я загрузила начальные данные для работы, можно было приступать к обработке информации и через pandas я открыла свой файл.


Так как я не особо знала с чего начать, я попробовала вставить данные в Google Colab и через него посмотреть предлагаемые виды обработки данных. Я не была ими особо довольна в плане стилистики, однако они задали мне направление и помогли придумать, что конкретно я могу использовать для создания таблиц. Также я поняла, что большинство имеющихся данных лучше всего подходят для самого классического типа графика, так как содержат в себе сравнительную информацию. Однако при этом мне удалось в дальнейшем использовать круговую диаграмму, а также диаграмму венна.
Для создания следующих графиков я использовала ChatGPT. С помощью искусственного интеллекта я окончательно решила, какие данные я хочу преобразовать, а также здесь и в дальнейшем использовала его для редактирования кода и стилизации картинки.
промпт (ChatGPT): — I have a csv file. I need to create several plots in python, using this data.
результат: — Here are some potential plots we can create: 1. Distribution of Spell Levels: A bar chart showing the number of spells at each level. 2. Spells by School of Magic: A bar chart showing the number of spells in each school of magic. 3. Spells by Casting Time: A pie chart showing the proportion of spells by casting time. 4. Components Required for Spells: A set of bar charts showing the number of spells requiring verbal, somatic, and material components. 5. Spells by Class: A bar chart showing the number of spells available to each class.
График, который я точно хотела включить в свой финальный вариант, являлся количество заклинаний, доступное для разных классов «D& D». В изначальной версии кода, который мне предоставил ChatGPT по какой-то причине происходила проблема в сортировке, где некоторые классы слипались в один. Я попробовала убрать данную ошибку и параллельно с этим начала думать над будущей стилизацией. У официального источника «D& D» есть персональные цвета для каждого из классов, поэтому первой моей идеей было взять именно их за основу визуала. Так я использовала кастомные цвета, я также отсортировала каждый класс, чтобы он соответствовал своему оттенку.
промпты (ChatGPT): — create a plot «Spells by Class» from file — sort plot «Spells by Class» by specific order
Мне не очень сильно понравилась изначальная палитра, так как в ней было очень много грязных цветов. Я пошла на сайт seaborn, чтобы посмотреть какие возможные палитры существуют в библиотеке, и наткнулась на палитру viridis, которую использовала в дальнейшем для всех графиков. В нужные цвета я привела и график количества заклинаний по классу, и график с данными о количестве заклинаний на каждом уровне. При этом вторую гистограмму я решила слегка разнообразить, так как изначально у меня в очередной раз получался один и тот же градиент слева на право. Поэтому я попросила ChatGPT помочь мне распределить цвета на графике от наибольшего значения к меньшему.
промпт (ChatGPT): — make the darker colour corespond with higher number and lighter colour with lesser number
Изначальную гистограмму со школами заклинаний я решила преобразовать в круговую диаграмму, чтобы разнообразить типы визуализации данных. И благодаря этому я поняла, что до этого задумывалась исключительно о цветовой части графиков. Однако одной из самых важных частей диаграмм является текст, и именно с ним у меня возникла проблема. На круговой диаграмме черный шрифт поверх выбранного мной стиля был нечитаемым. В дальнейшем я использовала функции стилизации текста для приведения графиков к финальному виду.
промпты (ChatGPT): — create a pie chart with Matplotlib showing the number of spells in each school of magic.
Также из доступных мне данных я думала создать гистограмму, а в последствии лепестковую диаграмму, которая отображала бы данные о специфике каждого заклинания — является ли оно враждебным, целебным или призывающим. Но после того как я получила свой результат, я поняла, что из-за огромной диспропорции в количестве, графики выглядят скорее нелепо, и даже стилизация их бы не спасла.
промпты (ChatGPT): — create a bar chart showing the number of spells containing certain keywords in their descriptions (e.g., «damage», «heal») — create a spider plot for the same thing
Еще одним элементом таблицы, который я хотела проанализировать, являлись компоненты заклинаний (вербальный, соматический, материальный). Получив таблицу, я поняла, что она не совсем точно отображает действительность, так как некоторые заклинания требуют в себе сразу несколько компонентов. Это я в дальнейшем исправила на финальных графиках.
промпт (ChatGPT): — create a code from a file for a set of bar charts showing the number of spells requiring verbal, somatic, and material components
Финальные графики — анализ «D& D» заклинаний
Финальных графиков в конце концов у меня вышло семь, большинство из которых я выполнила в формате гистограммы, однако также присутствует круговая диаграмма и диаграмма венна.
Начальный процесс для всех графиков ничем не отличается от пробных примеров: добавить библиотеки и вывести на экран изначальную таблицу с графиками.
Количество заклинаний доступное для разных классов
Одна из самых больших дилемм в «D& D» — это то, за какой класс тебе выбрать играть. У каждого класса есть свои особенности и задачи, и кто-то любит больше сосредотачиваться на грубой силе и физических навыках, а для некоторых важно иметь возможность использовать разнообразные комбинации заклинаний, изучая их требования и эффекты. Чтобы помочь кому-то (мне) с определением выбора, я решила, что одной из самых важных задач является сортировка заклинаний по их классам. К изначальному коду, который я показывала на этапе разработке добавилась сортировка классов, чтобы исключить слипшиеся варианты. Также через matplotlib я нашла способ узнать доступные шрифты из моего компьютера (matplotlib.font_manager.get_font_names ()), один из которых в дальнейшем я использовала для оформление всех графиков. Я изменила не только шрифт, но и его жирность, размер и окрас. Проделала я это для каждого элемента графика, чтобы они сочетались между собой. Также в конце каждого кода я добавляла строку, которая в последствии позволила мне экспортировать полученный результат в формате pdf, чтобы не терять качество.
Через данную гистограмму можно легко сориентироваться в игровых классах и сколько заклинаний доступно для каждого из них (за исключением классов, у которых в целом отсутствует возможность использовать магию). Так, например, для игроков, которые хотят полностью погрузиться в магический мир, идеальным классом будет волшебник, которому доступны больше две третьих всех заклинаний. Для сбалансированного использования и магии и оружия лучше всего подойдет бард или же жрец, которые хоть и полагаются на спеллкастинг, но при этом все еще имеют и хорошие модификаторы для ведения ближнего боя. Для тех же, кто хочет в основном играть за персонажа с грубой силой, но все еще иметь возможность использовать заклинания хорошим выбором будет паладин.
Количество заклинаний на каждом уровне
Гистограмма с количеством заклинаний на каждом уровне показывает почти что прямую тенденцию с понижением количества с увеличением уровня. Так как нулевой круг, это заговоры, которые не требуют ячейки заклинаний для их сотворения, их количество значительно меньше того же первого, второго и третьего круга. При этом что удивительно на четвёртом уровне заклинаний меньше чем на пятом, хотя до этого их количество только уменьшалось. Между шестым и седьмым уровнем есть достаточно большой скачок между количеством, и дальше заклинаний становится только меньше.
При этом важно иметь в уме, что график выше показывает общее количество заклинаний, и в действительности для каждого класса это число будет в несколько раз меньше. Как пример я использовала количество заклинаний, доступное для бардов, так как я сама играю за данный игровой класс. В сравнении заметно, что параметры для барда несколько отличаются, чем общее значение. На первом и втором кругу количество заклинаний одинаковое. Значительное снижение можно наблюдать у заговоров и шестого уровня, которые по числу сравнились с более высокими кругами.
Чтобы получить следующие графики, я также воспользовалась помощью ChatGPT, который задал мне основу для обоих графиков. Шрифт же и общий визуал я меняла самостоятельно. Для сравнительной гистограммы мне пришлось создать две отдельные палитры: одна с более темными цветами, другая для явного контраста — светлыми. При этом все оттенки все еще являются частью viridis палитры.
промпты (ChatGPT): — сreate a horisontal bar plot with the number of spells at each level available for bards — compare each number of spells at each level availble for bards to the overal number of spells at each level for every class
Распределение школ заклинаний
Самой большой проблемой в создании круговой диаграммы оказалось изменение цвета надписей. По умолчанию шрифт имеет темный цвет, что являлось нечитаемым на темных оттенках палитры viridis. Однако при изменении параметра цвета, оказалось, что он меняет не только цвет внутри диаграммы, но и подписи с названиями, и с белым шрифтом на белом фоне они становились невидимыми. Данную ошибку мне не удалось решить с помощью искусственного интеллекта, однако решение нашлось в старых вопросах на stackoverflow.
Данная диаграмма позволяет понять распределение заклинаний по разным школам. Чтобы действительно понять этот график, нужно знать кая школа отвечает за какие заклинания. Так, например, наибольшее значение заклинаний приходится на воплощение, которая отвечает за все-возможные взрывы и манипуляции энергией. Из следующих данных можно смело сказать, что больше всего заклинаний в «D& D» являются враждебными, направленные на причинения вреда. Недалеко ушла и школа преобразования, которая помогает буквально преобразовывать мир вокруг персонажа, добавляя ему различные бонусы, такие как полет. На третьем же месте находится призыв, который позволяет вызывать существ и предметы из других измерений.
Компоненты для заклинаний
Следующие два графика показывают количество различных компонентов, которые требуются для заклинаний. Мне хотелось не только показать частоту использования отдельных элементов, но и то, как часто они используются одновременно, так как я знаю, что во многих заклинаниях нужен больше чем один компонент. Для того, чтобы сделать это в изначальную таблицу я добавила четыре новых столбца, каждый из которых отвечает за совместное использование элементов. Однако после того как я получила свою гистограмму я поняла, что она не совсем точно отображает данные, и наверняка есть способ их представить в другом, более читаемом виде. Для этого я пошла на сайт Python Graph Gallery, который содержит в себе информацию по всевозможным графикам для питона и, что более важно, то, как правильно написать код. На этом сайте я нашла диаграмму венна, которая идеально подходила для моей задачи. Для изменения цветов внутри графика я вновь воспользовалась помощью stackoverflow.
Как я уже сказала обе диаграммы иллюстрируют компоненты (вербальный, соматический, материальный), которые требуются для использование заклинаний. На них наглядно видно, что лишь маленькая часть заклинаний требует только один элемент, и для половины их них нужно одновременное использование двух или трех компонентов. При этом самым непопулярным элементом для магии является материальный, вербальный же наоборот, присутствует в 90% заклинаний.
Заключение и ссылки
Данные графики буду интересны для игроков «D& D» так как содержат в себе важную информацию про заклинания. Я знаю, что я вычленила далеко не всю полезную информацию из оригинальной таблицы, однако мне кажется, что финальный результат получился достаточно содержательный.
Ссылка на диск с таблицей (которая была взята с сайта kaggle) и файл в формате ipynb с кодом финальных графиков: — https://disk.yandex.ru/d/rkHu1DlxNQHLaw
Ссылка на ChatGPT, который был использован для написания кодов на языке программирования python: — https://openai.com/chatgpt/