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 — генерация изображения для обложки

We use cookies to improve the operation of the HSE website and to enhance its usability. More detailed information on the use of cookies can be fou...
Show more