Original size 880x1168

GAME OVER! Кто победитель на игровом рынке?

17

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

big
Original size 860x312

pac-man. bandai namco. entertainment inc. 1980

Я использовала датасет с сайта Kaggle, содержащий информацию о продажах видеоигр до начала 2015 года

В проекте используются столбчатые диаграммы, круговые диаграммы, линейные графики, а также наложение данных на карту с помощью geopandas. С помощью библиотек matplotlib и seaborn постаралась по возможности стилизовать графики под ретро-тематику: чёрный фон, основные цвета и градиенты неоновые, а также используются пиксельные шрифты (скачанные и вручную импортированные в код), а также отсылки к видеоиграм (круговая диаграмма представлена в виде Pac-Man). Где приходилось визуализировать множество разных данных, я использовала другие неоновые цвета.

big
Original size 1260x471

После загрузки датасета мы изучили его формат и типы данных

big
Original size 1240x557

Произвели подсчет пропусков и убраны основные пропуски из датасета, где их было больше всего

Добавляем библиотеки, которые будем использовать далее:

matplotlib.pyplot: основной модуль для построения графиков. matplotlib.font_manager: позволяет использовать сторонние (кастомные) шрифты. numpy: для числовых операций. Normalize, ScalarMappable, get_cmap: используются для создания цветового градиента и цветовой легенды.

Original size 1280x1160

Сортируем датафрейм df по колонке Global_Sales (продажи по миру) по убыванию. Потом берём первые 10 строк — это топ-10 самых продаваемых видеоигр. После этого загружаем кастомный пиксельный шрифт из файла и создаём цветовую карту:

get_cmap («plasma»): создаёт градиент от фиолетового к жёлтому (неоновый стиль). Normalize (…): нормализует значения продаж в диапазоне от минимального до максимального. colors (norm (…)): применяет градиент к значениям продаж — чем выше продажи, тем ярче цвет.

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

Original size 1299x790

Сначала группируем данные по жанру с помощью groupby («Genre») и суммируем глобальные продажи (Global_Sales) для каждого жанра. Затем сортируем их по возрастанию — это нужно, чтобы на графике жанры с меньшими продажами были внизу.

Устанавливаем тёмный фон и задаём размеры графика. Создаём горизонтальный столбчатый график, где каждый жанр — это строка, а длина столбца — общий объём продаж. Задаём цвет для каждого бара (bar_colors), добавляем неоновую голубую обводку и применяем стиль ретро-пиксельного шрифта к заголовку и подписям осей.

Original size 1525x1140

Цвета подписей осей выдержаны в неоновой палитре: фиолетовый заголовок, салатовая шкала. У названий жанров (ось Y) также используется пиксельный шрифт. Направо от каждого столбца выводим численное значение продаж (в миллионах), оформленное в том же стиле.

В конце добавляем вертикальную цветовую легенду (colorbar), которая показывает градиент в соответствии с объёмами продаж. Легенда оформлена в пиксельном стиле с белыми подписями. Всё аккуратно упаковывается с помощью tight_layout (), чтобы не было наложений.

Original size 1133x790

Сначала группируем данные по году выпуска игр (Year) и суммируем глобальные продажи (Global_Sales) — получаем общие продажи видеоигр по годам. Эти данные понадобятся для построения линии тренда.

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

— первый слой с широкой полупрозрачной линией (linewidth=4, alpha=0.2), — второй чуть уже и ярче (linewidth=2.5, alpha=0.5), — третий — тонкая линия с яркими маркерами (marker='o') цвета фуксии, создающая эффект пиксельных точек.

Original size 1280x786

Поверх графика добавляются горизонтальные линии-сетки в тёмно-сером цвете для визуального ритма, имитируя глитч или экран ЭЛТ-монитора (axhline).

Затем оформляется график в неоновой пиксельной эстетике: — заголовок и подписи осей выполнены пиксельным шрифтом, — цвета надписей — фиолетовый (заголовок) и салатовый (оси), — на оси X выводятся года с шагом 5 лет, все тики также оформлены в стиле ретро.

Сетка на фоне отключена, а tight_layout () используется для аккуратного размещения всех элементов без наложений. Получается стильный неоновый график, показывающий динамику продаж видеоигр по годам.

Original size 1280x727

Сначала подключаем библиотеки: geopandas — для работы с географическими картами и границами стран, ScalarMappable — импортируется, но в данном коде не используется (можно удалить).

Загружаем геоданные мира с сайта Natural Earth: это полигоны стран с названиями и геометрией. Создаём серию region_totals, где для каждого региона (NA, EU, JP, Other) считается сумма всех продаж видеоигр по соответствующей колонке в датафрейме df.

Затем считаем доли (в процентах) каждого региона от общего объёма продаж — это region_shares.

Создаём функцию assign_region, которая по названию страны присваивает регион:

—США, Канада, Мексика → «NA» —Япония → «JP» —страны Европы → «EU» —всё остальное → «Other»

Применяем эту функцию к каждой строке геодатафрейма world, чтобы добавить новую колонку «Region».

Original size 1215x1278

Создаём словарь base_colors, где каждому региону сопоставлен определённый яркий неоновый цвет.

По этому словарю создаём новую колонку «Color» — это цвет каждой страны на карте в зависимости от региона.

Далее настраиваем тёмную тему оформления графика. Рисуем границы стран (world.boundary.plot) и сами страны с нужным цветом (world.plot). Цвета берутся из world [«Color»], обводка — тёмно-серая.

Устанавливаем заголовок карты в пиксельном шрифте и отключаем оси (ax.axis («off»)), чтобы убрать лишнее.

В конце добавляем текстовую легенду на саму карту: указываем доли продаж для каждого региона в процентах. Цвет текста соответствует цвету региона.

Карта показывает, какой вклад в глобальные продажи видеоигр вносит каждый регион мира.

Original size 2560x1473

Добавляем библиотеки, которые будем использовать далее: matplotlib.pyplot — основной модуль для построения графиков, matplotlib.patches — нужен для создания дополнительных элементов (например, глаза Пакмана).

Сначала группируем датафрейм df по колонке Platform и суммируем значения продаж по всему миру (Global_Sales). Сортируем полученные значения по убыванию и берём только 6 самых продаваемых платформ.

Создаём списки labels и values— это названия платформ и соответствующие суммы продаж. Добавляем фиктивную категорию «Pac-Mouth» — она будет использоваться как «рот» Пакмана. Её значение задаётся как 15% от суммы остальных продаж, чтобы в круговой диаграмме появился визуальный разрыв.

Задаём цвета для всех секторов: для каждой платформы — неоновый цвет, а для «рта» — почти чёрный (#111111). Устанавливаем тёмную тему оформления графика.

Original size 1024x1020

Создаём фигуру и ось, строим круговую диаграмму (ax.pie). Устанавливаем:

  • направление по часовой стрелке,
  • «li»стартовый угол — 0°,
  • «li»обводку для секторов,
  • «li»подписи в пиксельном шрифте и неоновом цвете
Затем вручную добавляем на диаграмму «глаз» Пакмана: создаём две окружности — чёрный зрачок и маленький белый блик — и размещаем их поверх диаграммы в нужной позиции.

Устанавливаем заголовок графика «PLATFORM SALES AS PAC-MAN» в пиксельном шрифте и ярко-жёлтом цвете. Отключаем оси и задаём пропорции, чтобы диаграмма выглядела ровным кругом.

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

Original size 1274x1280

Выводы: Годы выпуска и продажи: Чем новее игра, тем больше у неё продаж (резкий спад в 2010 году может быть связан с особенностями датасета).

Жанры и топовые игры: Самый популярный жанр — экшн, но самая продаваемая игра с большим отрывом — Wii Sports (спортивный симулятор).

Региональные продажи: Практически половина всех игр продаётся в Северной Америке. В Японии — всего 14,5%, но с учётом размера страны, видеоигры там, вероятно, значительно популярнее.

Популярные платформы: PlayStation — самая популярная (~50% продаж). Далее идёт Nintendo (Wii — Wii Sports, Nintendo DS — Pokémon).

Происхождение брендов: И Nintendo, и PlayStation — японские компании. В 2000-х большинство топовых игр были из Японии.

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

Описание применения генеративной модели

Сhat gpt 4— для помощи с более сложными визуализациями: картой и круговой диаграммой в виде Pac man. С помощью него мне удалось понять, с помощью каких библиотек и методов реализовать более сложные, нестандартные визуализации

Reve image 1.0 — генерация изображения для обложки