Microsegment.ru
  • Главная страница
  • О проекте
  • Портфолио
  • Блог

Комплексный маркетинговый анализ игровой индустрии

Описание проекта

Из открытых источников доступны исторические данные о продажах игр, оценки пользователей и экспертов, жанры и платформы (например, Xbox или PlayStation). Вам нужно выявить определяющие успешность игры закономерности. Это позволит интернет-магазину «Стримчик» сделать ставку на потенциально популярный продукт и спланировать рекламные кампании.

Перед вами данные до 2016 года. Представим, что сейчас декабрь 2016 г., и вы планируете кампанию на 2017-й. Нужно отработать принцип работы с данными. Неважно, прогнозируете ли вы продажи на 2017 год по данным 2016-го или же 2027-й — по данным 2026 года.

Описание данных

  • Name — название игры
  • Platform — платформа
  • Year_of_Release — год выпуска
  • Genre — жанр игры
  • NA_sales — продажи в Северной Америке (миллионы проданных копий)
  • EU_sales — продажи в Европе (миллионы проданных копий)
  • JP_sales — продажи в Японии (миллионы проданных копий)
  • Other_sales — продажи в других странах (миллионы проданных копий)
  • Critic_Score — оценка критиков (максимум 100)
  • User_Score — оценка пользователей (максимум 10)
  • Rating — рейтинг от организации ESRB (англ. Entertainment Software Rating Board). Эта ассоциация определяет рейтинг компьютерных игр и присваивает им подходящую возрастную категорию.

Данные за 2016 год могут быть неполными.

Оглавление

  • 1  Шаг 1. Открытие файла с данными и изучение общей информации
    • 1.1  Анализ отдельных столбцов датафрейма
      • 1.1.1  Одновременные дубликаты в Name, Platform и Year_of_Release
      • 1.1.2  Пропуски в ‘Rating’ с рейтингом ESRB
    • 1.2  Итоги предварительного анализа данных
  • 2  Шаг 2. Подготовка данных
    • 2.1  Замените названия столбцов (приведите к нижнему регистру)
    • 2.2  Обработка пропусков
    • 2.3  Обработка строк с неявными дубликатами
    • 2.4  Преобразование данных в нужные типы
    • 2.5  Подсчет суммарных продаж игр во всех регионах в отдельном столбце датафрейма
    • 2.6  Итоги подготовки данных
  • 3  Шаг 3. Исследовательский анализ данных
    • 3.1  Количество игр, выпускаемых в разные годы
    • 3.2  Изменения продаж по платформам.
    • 3.3  Выбор данных за актуальный период
    • 3.4  Какие платформы лидируют по продажам, растут или падают?
    • 3.5  График «ящик с усами» по глобальным продажам игр в разбивке по платформам
    • 3.6  Влияние отзывов критиков и пользователей на продажи отдельно взятых платформ всех вместе
    • 3.7  Общее распределение игр по жанрам
    • 3.8  Итоги исследовательского анализа данных
  • 4  Шаг 4. Портрет пользователя каждого региона
    • 4.1  Самые популярные платформы (топ-5). Различия в долях от всего объема продаж
    • 4.2  Самые популярные жанры (топ-5)
    • 4.3  Влияет ли рейтинг ESRB на продажи в отдельном регионе?
    • 4.4  Итоги анализа портрета потребителя в разных регионах
  • 5  Шаг 5. Проверка гипотез
    • 5.1  Средние пользовательские рейтинги платформ Xbox One и PC одинаковые
    • 5.2  Средние пользовательские рейтинги жанров Action (англ. «действие», экшен-игры) и Sports (англ. «спортивные соревнования») разные
    • 5.3  Итоги проверки гипотез
  • 6  Шаг 6. Общий вывод

Шаг 1. Открытие файла с данными и изучение общей информации¶

In [1]:
# Датафреймы
import pandas as pd

# Математика для массивов
import numpy as np

# Факториалы
from math import factorial

# Статистика
from scipy import stats as st

# Графика
import matplotlib
%matplotlib inline
from matplotlib import pyplot as plt
from matplotlib import rcParams, rcParamsDefault
import seaborn as sns
In [2]:
# Отображение всех столбцов таблицы
pd.set_option('display.max_columns', None)
# Обязательно для нормального отображения графиков plt
rcParams['figure.figsize'] = 10, 6
%config InlineBackend.figure_format = 'svg'
# Дополнительно и не обязательно для декорирования графиков
factor = .8
default_dpi = rcParamsDefault['figure.dpi']
rcParams['figure.dpi'] = default_dpi * factor
In [3]:
try:
    games = pd.read_csv('/datasets/games.csv')
except:
    games = pd.read_csv('datasets/games.csv')
In [4]:
games.head()
Out[4]:
Name Platform Year_of_Release Genre NA_sales EU_sales JP_sales Other_sales Critic_Score User_Score Rating
0 Wii Sports Wii 2006.0 Sports 41.36 28.96 3.77 8.45 76.0 8 E
1 Super Mario Bros. NES 1985.0 Platform 29.08 3.58 6.81 0.77 NaN NaN NaN
2 Mario Kart Wii Wii 2008.0 Racing 15.68 12.76 3.79 3.29 82.0 8.3 E
3 Wii Sports Resort Wii 2009.0 Sports 15.61 10.93 3.28 2.95 80.0 8 E
4 Pokemon Red/Pokemon Blue GB 1996.0 Role-Playing 11.27 8.89 10.22 1.00 NaN NaN NaN

Названия столбцов выполнены не в «змеином стиле». В данных наблюдаются пропуски.

In [5]:
games.info() 
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 16715 entries, 0 to 16714
Data columns (total 11 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   Name             16713 non-null  object 
 1   Platform         16715 non-null  object 
 2   Year_of_Release  16446 non-null  float64
 3   Genre            16713 non-null  object 
 4   NA_sales         16715 non-null  float64
 5   EU_sales         16715 non-null  float64
 6   JP_sales         16715 non-null  float64
 7   Other_sales      16715 non-null  float64
 8   Critic_Score     8137 non-null   float64
 9   User_Score       10014 non-null  object 
 10  Rating           9949 non-null   object 
dtypes: float64(6), object(5)
memory usage: 1.4+ MB

В датафрейме всего 11 столбцов и 16715 строк. 7 столбцов содержат пропуски. Вес датафрейма 1.4 Мб. Возможно, использованы неоптимальные типы данных в столбцах.

In [6]:
games.describe()
Out[6]:
Year_of_Release NA_sales EU_sales JP_sales Other_sales Critic_Score
count 16446.000000 16715.000000 16715.000000 16715.000000 16715.000000 8137.000000
mean 2006.484616 0.263377 0.145060 0.077617 0.047342 68.967679
std 5.877050 0.813604 0.503339 0.308853 0.186731 13.938165
min 1980.000000 0.000000 0.000000 0.000000 0.000000 13.000000
25% 2003.000000 0.000000 0.000000 0.000000 0.000000 60.000000
50% 2007.000000 0.080000 0.020000 0.000000 0.010000 71.000000
75% 2010.000000 0.240000 0.110000 0.040000 0.030000 79.000000
max 2016.000000 41.360000 28.960000 10.220000 10.570000 98.000000

Можно изменить типы данных столбцов:

  • Year_of_Release на uint16, т.к. года являются четырёхзначными натуральными числами;
  • NA_sales, EU_sales, JP_sales, Other_sales, Critic_Score и User_Score на float16, т.к. в этих столбцах использованы рациональные числа небольшой размерности.

Анализ отдельных столбцов датафрейма¶

Одновременные дубликаты в Name, Platform и Year_of_Release¶

In [7]:
# Поиск дубликатов по ключевым столбцам 
# с названием игры, платформы и годом выпуска
games.loc[games.duplicated(['Name', 'Platform', 'Year_of_Release'])]
Out[7]:
Name Platform Year_of_Release Genre NA_sales EU_sales JP_sales Other_sales Critic_Score User_Score Rating
14244 NaN GEN 1993.0 NaN 0.0 0.00 0.03 0.0 NaN NaN NaN
16230 Madden NFL 13 PS3 2012.0 Sports 0.0 0.01 0.00 0.0 83.0 5.5 E

Найдено два дубликата по столбцам с названием игры, платформы и годом выпуска. Требуется проверка повторяющихся строк.

In [8]:
games.loc[
    ((games['Name'].isna()) & 
    (games['Platform'] == 'GEN') & 
    (games['Year_of_Release'] == 1993)) | 
    ((games['Name'] == 'Madden NFL 13') & 
    (games['Platform'] == 'PS3') & 
    (games['Year_of_Release'] == 2012))
]
Out[8]:
Name Platform Year_of_Release Genre NA_sales EU_sales JP_sales Other_sales Critic_Score User_Score Rating
604 Madden NFL 13 PS3 2012.0 Sports 2.11 0.22 0.00 0.23 83.0 5.5 E
659 NaN GEN 1993.0 NaN 1.78 0.53 0.00 0.08 NaN NaN NaN
14244 NaN GEN 1993.0 NaN 0.00 0.00 0.03 0.00 NaN NaN NaN
16230 Madden NFL 13 PS3 2012.0 Sports 0.00 0.01 0.00 0.00 83.0 5.5 E

Строки с пропуском в названии игры требуется удалить, т.к. во многих аттрибутах этих объектов пропуски. Строки с игрой Madden NFL 13, выпущенной в 2012 году на платформе PS3 желательно объеденить.

Пропуски в ‘Rating’ с рейтингом ESRB¶

Для анализа столбца с рейтингом ESRB (Entertainment Software Rating Board) требуется выявиться существующие позиции этого рейтинга. (https://www.ph4.ru/pal_picto.php?p=ratings-esrb&titl=ESRB, 2023):

  • EC — Early childhood (Для детей младшего возраста). Игра подходит для детей от 3 лет и старше и не содержит материалов, которые родители могли бы счесть неподходящими. Продукты, получившие данный рейтинг, изначально разрабатываются для детей и обычно представляют собой развивающие игры. Некоторые усложнённые развивающие игры могут иметь рейтинг Everyone».
  • E — Everyone (Для всех). Содержание вполне подходит для возрастной категории от 6 лет и старше
  • E10+ — Everyone 10 and older (Для всех старше 10 лет). Возрастная категория — от 10 лет. Проекты с данным рейтингом могут содержать немного больше мультипликационного или мягкого насилия, или несколько откровенные сцены или минимальное количество крови. Рейтинг был принят ESRB 2 марта 2005 года. Первой игрой, которая получила данный рейтинг, стала Donkey Kong: Jungle Beat.
  • T — Teen (Подросткам). Игра подходит для лиц от 13 лет и старше. Проекты из данной категории могут содержать насилие, непристойные сцены, грубый юмор, в меру откровенное сексуальное содержимое, кровь или нечастое использование ненормативной лексики.
  • M — Mature (От 17 лет). Материалы игры не подходят для подростков младше 17 лет. Проекты с данным рейтингом могут содержать достаточно жестокое насилие, большое количество крови с расчленением, непристойные сексуальные сцены или грубую ненормативную лексику, нежелательную для младшей аудитории. Некоторые торговые сети не продают игры с таким рейтингом несовершеннолетним без согласия родителей.
  • AO — Adults Only 18+ (Только для взрослых). Содержание игры только для взрослых. Продукты из данной категории могут содержать длительные сцены жестокого насилия и/или очень откровенное сексуальное содержимое, а также сцены с обнажением. В 2006-м году данный рейтинг получили 22 продукта, большинство из которых предназначены для персональных компьютеров под управлением Windows и Apple Macintosh. Рейтинг Только для взрослых» является предметом
  • RP — Rating Pending (Рейтинг ожидается). Продукт был отправлен в ESRB и ожидает присвоения рейтинга. Данный логотип используется только на рекламных презентациях и в демо-версиях игр до официального релиза.
  • K-A — Kids to Adults (Для детей и взрослых). Содержание игры вполне подходит для возрастной категории от 6 лет и старше. Такие игры подходят для всех возрастов. Они могут содержать минимальное насилие или немного грубый разговорный язык. Этот рейтинг был заменён на Everyone.

Рейтинг ESRB (Википедия, 2023):

  • «EC» («Early childhood») — «Для детей младшего возраста»: Игра подходит для детей от 3 лет и не содержит материалов, которые родители могли бы счесть неподходящими. Продукты, получившие данный рейтинг, изначально разрабатываются для детей и обычно представляют собой развивающие игры.
  • «E» («Everyone») — «Для всех»: Содержание вполне подходит для всех возрастов. Такие игры могут понравиться и взрослым. Игры с этим рейтингом могут содержать минимальное насилие, в основном «мультяшного» характера. Первоначально «K-A» («Kids to Adults»).
  • «E10+» («Everyone 10 and older») — «Для всех от 10 лет и старше»: Проекты с данным рейтингом могут содержать больше мультипликационного или мягкого насилия, или несколько откровенные сцены, или минимальное количество крови. Рейтинг был принят ESRB 2 марта 2005 года.
  • «T» («Teen») — «Подросткам»: Игра подходит для лиц от 13 лет. Проекты из данной категории могут содержать насилие, непристойные сцены, грубый юмор, в меру откровенное сексуальное содержимое, кровь или нечастое использование ненормативной лексики.
  • «M» («Mature») — «Для взрослых»: Материалы игры не подходят для лиц младше 17 лет. Проекты с данным рейтингом могут содержать жестокое насилие, большое количество крови с расчленением, непристойные сексуальные сцены или грубую ненормативную лексику.
  • «AO» («Adults Only 18+») — «Только для взрослых»: Содержание игры только для взрослых старше 18 лет. Продукты из данной категории могут содержать длительные сцены жестокого насилия и/или очень откровенное сексуальное содержимое.
  • «RP» («Rating Pending») — «Рейтинг ожидается»: Продукт был отправлен в ESRB и ожидает присвоения рейтинга. Данный логотип используется только на рекламных презентациях и в демо-версиях игр до официальной даты выпуска в продажу.
  • «RP 17+» («Rating Pending») — «Рейтинг ожидается — примерно 17+»: Продукт отправлен ESRB на оценку, но примерное содержание близко к рейтингу «M». Данная маркировка была введена с 2021 г. и распространяется на демо или презентационный вариант.
In [9]:
print('Позиции рейтинга ESRB в датафрейме:')
print(games['Rating'].unique())
Позиции рейтинга ESRB в датафрейме:
['E' nan 'M' 'T' 'E10+' 'K-A' 'AO' 'EC' 'RP']

В рейтингах присутствуют пропуски и устаревшее значение K-A, которое для актуализации требуется заменить на E. Также есть пропуски, которые, возможно, относятся к RP (Rating Pending — Рейтинг ожидается).

In [10]:
print('Количество значений "K-A" в столбце с рейтингом:', games.loc[games['Rating'] == 'K-A', 'Rating'].count())
Количество значений "K-A" в столбце с рейтингом: 3
In [11]:
print('Количество пропусков в столбце с рейтингом:', games['Rating'].isna().sum())
print(f"Эти пропуски составляют {round((games['Rating'].isna().sum() / (games['Rating'].count() + games['Rating'].isna().sum())) * 100, 2)}% от всего количества значений с рейтингом")
print('Примеры строк с пропусками в столбце с рейтингом:')
games.loc[games['Rating'].isna()].head(10)
Количество пропусков в столбце с рейтингом: 6766
Эти пропуски составляют 40.48% от всего количества значений с рейтингом
Примеры строк с пропусками в столбце с рейтингом:
Out[11]:
Name Platform Year_of_Release Genre NA_sales EU_sales JP_sales Other_sales Critic_Score User_Score Rating
1 Super Mario Bros. NES 1985.0 Platform 29.08 3.58 6.81 0.77 NaN NaN NaN
4 Pokemon Red/Pokemon Blue GB 1996.0 Role-Playing 11.27 8.89 10.22 1.00 NaN NaN NaN
5 Tetris GB 1989.0 Puzzle 23.20 2.26 4.22 0.58 NaN NaN NaN
9 Duck Hunt NES 1984.0 Shooter 26.93 0.63 0.28 0.47 NaN NaN NaN
10 Nintendogs DS 2005.0 Simulation 9.05 10.95 1.93 2.74 NaN NaN NaN
12 Pokemon Gold/Pokemon Silver GB 1999.0 Role-Playing 9.00 6.18 7.20 0.71 NaN NaN NaN
18 Super Mario World SNES 1990.0 Platform 12.78 3.75 3.54 0.55 NaN NaN NaN
20 Pokemon Diamond/Pokemon Pearl DS 2006.0 Role-Playing 6.38 4.46 6.04 1.36 NaN NaN NaN
21 Super Mario Land GB 1989.0 Platform 10.83 2.71 4.18 0.42 NaN NaN NaN
22 Super Mario Bros. 3 NES 1988.0 Platform 9.54 3.44 3.84 0.46 NaN NaN NaN

Всего наблюдается 6766 пропусков в столбце Rating, что составляет 40.48% от всего количества значений. Вывод части датафрейма показал, что пропуски в столбце Critic_Score иногда совпадают с пропусками в столбцах Critic_Score и User_Score.

In [12]:
# Датафрейс содержащий одновременные пропуски 
# в столбцах 'Rating', 'Critic_Score' и 'User_Score'
rating_isna = games.loc[
    (games['Rating'].isna()) &
    (games['Critic_Score'].isna()) &
    (games['User_Score'].isna())
]

rating_isna.head()
Out[12]:
Name Platform Year_of_Release Genre NA_sales EU_sales JP_sales Other_sales Critic_Score User_Score Rating
1 Super Mario Bros. NES 1985.0 Platform 29.08 3.58 6.81 0.77 NaN NaN NaN
4 Pokemon Red/Pokemon Blue GB 1996.0 Role-Playing 11.27 8.89 10.22 1.00 NaN NaN NaN
5 Tetris GB 1989.0 Puzzle 23.20 2.26 4.22 0.58 NaN NaN NaN
9 Duck Hunt NES 1984.0 Shooter 26.93 0.63 0.28 0.47 NaN NaN NaN
10 Nintendogs DS 2005.0 Simulation 9.05 10.95 1.93 2.74 NaN NaN NaN
In [13]:
print('Количество пропусков с стобцах с рейтингом и оценками:')
print(rating_isna.isna().sum())
Количество пропусков с стобцах с рейтингом и оценками:
Name                  2
Platform              0
Year_of_Release      85
Genre                 2
NA_sales              0
EU_sales              0
JP_sales              0
Other_sales           0
Critic_Score       6621
User_Score         6621
Rating             6621
dtype: int64

В 85 строках пропуски в столбцах Rating, Critic_Score и User_Score совпадают с пропусками в столбце Year_of_Release. В двух строках из них они совпадают с пропусками в Name.

In [14]:
print("Уникальные значения различных столбцов в строках с пропусками в 'Rating', 'Critic_Score' и 'User_Score'")
print()
print(f"Столбец 'Name' ({len(rating_isna['Name'].unique())} уникальных значений из {len(games['Name'].unique())}):")
print(rating_isna['Name'].unique())
print()
print(f"Столбец 'Platform' ({len(rating_isna['Platform'].unique())} уникальных значений из {len(games['Platform'].unique())}):")
print(rating_isna['Platform'].unique())
print()
print(f"Столбец 'Year_of_Release' ({len(rating_isna['Year_of_Release'].unique())} уникальных значений из {len(games['Year_of_Release'].unique())}):")
print(rating_isna['Year_of_Release'].unique())
print()
print(f"Столбец 'Genre' ({len(rating_isna['Genre'].unique())} уникальных значений из {len(games['Genre'].unique())}):")
print(rating_isna['Genre'].unique())
Уникальные значения различных столбцов в строках с пропусками в 'Rating', 'Critic_Score' и 'User_Score'

Столбец 'Name' (5732 уникальных значений из 11560):
['Super Mario Bros.' 'Pokemon Red/Pokemon Blue' 'Tetris' ...
 'Woody Woodpecker in Crazy Castle 5' 'LMA Manager 2007'
 'Haitaka no Psychedelica']

Столбец 'Platform' (31 уникальных значений из 31):
['NES' 'GB' 'DS' 'SNES' 'GBA' 'PS4' '3DS' 'N64' 'X360' 'Wii' '2600' 'PS'
 'XOne' 'GC' 'PS3' 'GEN' 'PC' 'PSP' 'WiiU' 'PS2' 'XB' 'DC' 'PSV' 'SAT'
 'SCD' 'WS' 'NG' 'TG16' '3DO' 'GG' 'PCFX']

Столбец 'Year_of_Release' (38 уникальных значений из 38):
[1985. 1996. 1989. 1984. 2005. 1999. 1990. 2006. 1988. 2002. 2010. 1998.
 2015. 2013. 2009. 2014. 1992. 1993. 2004. 1994. 1997. 2012. 2007. 1982.
 2016. 2003. 2011. 1986. 2000. 2001. 1995. 2008. 1991. 1981. 1987. 1980.
 1983.   nan]

Столбец 'Genre' (13 уникальных значений из 13):
['Platform' 'Role-Playing' 'Puzzle' 'Shooter' 'Simulation' 'Action'
 'Adventure' 'Racing' 'Misc' 'Sports' 'Fighting' 'Strategy' nan]

Не обнаружено какой-либо зависимости пропусков в Rating, Critic_Score и User_Score от значений в столбцах Name, Platform, Year_of_Release или Genre. Согласно мнению пользователей (не экспертов) ресурса gaming.stackexchange.com отсутствие рейтинга может свидетельствовать о нежелании владельцев рейтинга ESRB устанавливать метки со своим рейтингом на играх, которые имеют очень разнообразное содержание для разных возрастных групп, которое зависит от определенных условий использования игры (https://gaming.stackexchange.com/questions/27940/why-doesnt-esrb-rate-online-games, 2023). Строки с подобными пропусками можно оставить в датафрейме для дальнейшего анализа. Отсутствие данных в них — это информация о том, что ни рейтинговое агентство ESRB, ни эксперты, ни пользователи, не захотели или не смогли охарактеризовать эти игры.

In [15]:
print("Медианные значения продаж в разных регионах при пропусках в 'Rating', 'Critic_Score', 'User_Score' и 'Year_of_Release'")
print()
print('Продажи в Северной Америке:', rating_isna.loc[rating_isna['Year_of_Release'].isna(), 'NA_sales'].median())
print('Продажи в Европе:', rating_isna.loc[rating_isna['Year_of_Release'].isna(), 'EU_sales'].median())
print('Продажи в Японии:', rating_isna.loc[rating_isna['Year_of_Release'].isna(), 'JP_sales'].median())
print('Продажи в других регионах:', rating_isna.loc[rating_isna['Year_of_Release'].isna(), 'Other_sales'].median())
Медианные значения продаж в разных регионах при пропусках в 'Rating', 'Critic_Score', 'User_Score' и 'Year_of_Release'

Продажи в Северной Америке: 0.01
Продажи в Европе: 0.0
Продажи в Японии: 0.0
Продажи в других регионах: 0.0

В тех же случаях, где пропуски в Rating, Critic_Score и User_Score совпадают с пропусками в Year_of_Release, это может означать, что игра еще не выпущена в продажу. Это подтверждается нулевыми медианными продажами почти во всех регионах. Наличие медианных продаж в Северной Америке в размере 10 тыс. копий игр может означать их продажу с целью изучения рынка. Строкам с подобными данными можно дать рейтинг no_ESRB, что даст возможность анализировать эти строки. Либо, удалить их из датафрейма, т.к. можно оспорить их полезность для дальнейшего анализа.

Итоги предварительного анализа данных¶

В датафрейме всего 11 столбцов и 16715 строк. 7 столбцов содержат пропуски. Вес датафрейма 1.4 Мб. В данных наблюдаются пропуски. Строки с пропуском в названии игры требуется удалить, т.к. во многих аттрибутах этих объектов пропуски. Строки с игрой Madden NFL 13, выпущенной в 2012 году на платформе PS3 желательно объеденить, т.к. данные в них частично дополняют друг друга. Названия столбцов в датафрейме выполнены не в «змеином» стиле. Можно изменить типы данных столбцов:

  • Year_of_Release на uint16, т.к. года являются четырёхзначными натуральными числами;
  • NA_sales, EU_sales, JP_sales, Other_sales, Critic_Score и User_Score на float16, т.к. в этих столбцах использованы рациональные числа небольшой размерности.

О столбце ‘Rating’

В рейтингах присутствуют пропуски и устаревшее значение K-A, которое для актуализации требуется заменить на E.

Всего наблюдается 6766 пропусков в столбце Rating, что составляет 40.48% от всего количества значений. Вывод части датафрейма показал, что пропуски в столбце Critic_Score иногда совпадают с пропусками в столбцах Critic_Score и User_Score.

Не обнаружено какой-либо зависимости пропусков в Rating, Critic_Score и User_Score от значений в столбцах Name, Platform, Year_of_Release или Genre. Согласно мнению пользователей (не экспертов) ресурса gaming.stackexchange.com отсутствие рейтинга может свидетельствовать о нежелании владельцев рейтинга ESRB устанавливать метки со своим рейтингом на играх, которые имеют очень разнообразное содержание для разных возрастных групп, которое зависит от определенных условий использования игры (https://gaming.stackexchange.com/questions/27940/why-doesnt-esrb-rate-online-games, 2023). Строки с подобными пропусками можно оставить в датафрейме для дальнейшего анализа. Отсутствие данных в них — это информация о том, что ни рейтинговое агентство ESRB, ни эксперты, ни пользователи, не захотели или не смогли охарактеризовать эти игры.

В тех же случаях, где пропуски в Rating, Critic_Score и User_Score совпадают с пропусками в Year_of_Release, это может означать, что игра еще не выпущена в продажу. Это подтверждается нулевыми медианными продажами почти во всех регионах. Наличие медианных продаж в Северной Америке в размере 10 тыс. копий игр может означать их продажу с целью изучения рынка. Строкам с подобными данными можно дать рейтинг no_ESRB, что даст возможность анализировать эти строки. Либо, удалить их из датафрейма, т.к. можно оспорить их полезность для дальнейшего анализа.

Шаг 2. Подготовка данных¶

Замените названия столбцов (приведите к нижнему регистру)¶

In [16]:
games.columns = games.columns.str.lower()
In [17]:
games.head() 
Out[17]:
name platform year_of_release genre na_sales eu_sales jp_sales other_sales critic_score user_score rating
0 Wii Sports Wii 2006.0 Sports 41.36 28.96 3.77 8.45 76.0 8 E
1 Super Mario Bros. NES 1985.0 Platform 29.08 3.58 6.81 0.77 NaN NaN NaN
2 Mario Kart Wii Wii 2008.0 Racing 15.68 12.76 3.79 3.29 82.0 8.3 E
3 Wii Sports Resort Wii 2009.0 Sports 15.61 10.93 3.28 2.95 80.0 8 E
4 Pokemon Red/Pokemon Blue GB 1996.0 Role-Playing 11.27 8.89 10.22 1.00 NaN NaN NaN

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

Обработка пропусков¶

In [18]:
games['year_of_release'].unique() 
Out[18]:
array([2006., 1985., 2008., 2009., 1996., 1989., 1984., 2005., 1999.,
       2007., 2010., 2013., 2004., 1990., 1988., 2002., 2001., 2011.,
       1998., 2015., 2012., 2014., 1992., 1997., 1993., 1994., 1982.,
       2016., 2003., 1986., 2000.,   nan, 1995., 1991., 1981., 1987.,
       1980., 1983.])

В year_of_release есть пропуски nan, которые вызовут ошибку при конвертации в uint16. Также строки с nan в year_of_release неинформативны для анализа. В том числе, это связано с тем, пропуски в столбце year_of_release одновременно совпадают со строками, содеражщими пропуски в rating, critic_score и user_score, в которых, вероятнее всего, содержаться данные об играх, которые еще не поступили в полномасштабную продражу. Подобные данные не требуются для дальнейшего анализа.

In [19]:
(games['year_of_release'].isna().count() - games['year_of_release'].dropna().count()) / games['year_of_release'].isna().count()
Out[19]:
0.01609332934489979

Если удалить строки с пропусками в year_of_release, то будет потерено всего 1.61% строк с данными. Это не является кричтиным для анализа и потому, эти строки будут удалены.

In [20]:
games = games.dropna(subset=['year_of_release'])
print(games['year_of_release'].unique())
print()
print(games.info())
[2006. 1985. 2008. 2009. 1996. 1989. 1984. 2005. 1999. 2007. 2010. 2013.
 2004. 1990. 1988. 2002. 2001. 2011. 1998. 2015. 2012. 2014. 1992. 1997.
 1993. 1994. 1982. 2016. 2003. 1986. 2000. 1995. 1991. 1981. 1987. 1980.
 1983.]

<class 'pandas.core.frame.DataFrame'>
Int64Index: 16446 entries, 0 to 16714
Data columns (total 11 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   name             16444 non-null  object 
 1   platform         16446 non-null  object 
 2   year_of_release  16446 non-null  float64
 3   genre            16444 non-null  object 
 4   na_sales         16446 non-null  float64
 5   eu_sales         16446 non-null  float64
 6   jp_sales         16446 non-null  float64
 7   other_sales      16446 non-null  float64
 8   critic_score     7983 non-null   float64
 9   user_score       9839 non-null   object 
 10  rating           9768 non-null   object 
dtypes: float64(6), object(5)
memory usage: 1.5+ MB
None

В столбце year_of_release после удаления пропусков остались только информативные строки с указанием года релиза игр.

In [21]:
games['user_score'].unique() 
Out[21]:
array(['8', nan, '8.3', '8.5', '6.6', '8.4', '8.6', '7.7', '6.3', '7.4',
       '8.2', '9', '7.9', '8.1', '8.7', '7.1', '3.4', '5.3', '4.8', '3.2',
       '8.9', '6.4', '7.8', '7.5', '2.6', '7.2', '9.2', '7', '7.3', '4.3',
       '7.6', '5.7', '5', '9.1', '6.5', 'tbd', '8.8', '6.9', '9.4', '6.8',
       '6.1', '6.7', '5.4', '4', '4.9', '4.5', '9.3', '6.2', '4.2', '6',
       '3.7', '4.1', '5.8', '5.6', '5.5', '4.4', '4.6', '5.9', '3.9',
       '3.1', '2.9', '5.2', '3.3', '4.7', '5.1', '3.5', '2.5', '1.9', '3',
       '2.7', '2.2', '2', '9.5', '2.1', '3.6', '2.8', '1.8', '3.8', '0',
       '1.6', '9.6', '2.4', '1.7', '1.1', '0.3', '1.5', '0.7', '1.2',
       '2.3', '0.5', '1.3', '0.2', '0.6', '1.4', '0.9', '1', '9.7'],
      dtype=object)

В столбце user_score есть значение tbd, которое вызовет ошибку при конвертации в float16.

In [22]:
# Замена 'tbd' на 'np.nan' 
# для конвертации столбца в 'float16'
games['user_score'] = pd.to_numeric(
    games['user_score'].replace('tbd', np.nan), 
    downcast='float'
)
In [23]:
games.head() 
Out[23]:
name platform year_of_release genre na_sales eu_sales jp_sales other_sales critic_score user_score rating
0 Wii Sports Wii 2006.0 Sports 41.36 28.96 3.77 8.45 76.0 8.0 E
1 Super Mario Bros. NES 1985.0 Platform 29.08 3.58 6.81 0.77 NaN NaN NaN
2 Mario Kart Wii Wii 2008.0 Racing 15.68 12.76 3.79 3.29 82.0 8.3 E
3 Wii Sports Resort Wii 2009.0 Sports 15.61 10.93 3.28 2.95 80.0 8.0 E
4 Pokemon Red/Pokemon Blue GB 1996.0 Role-Playing 11.27 8.89 10.22 1.00 NaN NaN NaN

После обработки пропусков данные отображаются корректно.

In [24]:
# Удаление пропусков в столбце 'name'
games = games.dropna(subset=['name'])
In [25]:
games.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 16444 entries, 0 to 16714
Data columns (total 11 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   name             16444 non-null  object 
 1   platform         16444 non-null  object 
 2   year_of_release  16444 non-null  float64
 3   genre            16444 non-null  object 
 4   na_sales         16444 non-null  float64
 5   eu_sales         16444 non-null  float64
 6   jp_sales         16444 non-null  float64
 7   other_sales      16444 non-null  float64
 8   critic_score     7983 non-null   float64
 9   user_score       7463 non-null   float32
 10  rating           9768 non-null   object 
dtypes: float32(1), float64(6), object(4)
memory usage: 1.4+ MB

После удаления пропусков сравнялось количество объектов без пропусков в основных аттрибутах.

In [26]:
# Пропущенные рейтинги заменяются на
# рейтинг RP (Rating Pending - Рейтинг ожидается)
games['rating'] = games['rating'].fillna('no_ESRB')
games.loc[games['rating'] == 'RP'].info() 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1 entries, 14270 to 14270
Data columns (total 11 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   name             1 non-null      object 
 1   platform         1 non-null      object 
 2   year_of_release  1 non-null      float64
 3   genre            1 non-null      object 
 4   na_sales         1 non-null      float64
 5   eu_sales         1 non-null      float64
 6   jp_sales         1 non-null      float64
 7   other_sales      1 non-null      float64
 8   critic_score     1 non-null      float64
 9   user_score       1 non-null      float32
 10  rating           1 non-null      object 
dtypes: float32(1), float64(6), object(4)
memory usage: 92.0+ bytes

Пропущенные рейтинги заменены на значение no_ESRB. Данная «заглушка» для пропусков нужна для анализа строк с этим рейтингом.

Результаты удаления пропусков

В датасете заменены или удалены критичные пропуски в данных, которые не позволили бы конвертировать столбцы в более приемлемые типы данных, а также не нужны были при дальнейшем анализе. Так, в year_of_release пропуски nan были удалены, что позволило избавиться от строк с данными об играх, которые еще не поступили в полномасштабную продажу, а в user_score значения tbd заменены на np.nan. Также удалены объекты с пропусками в аттрибуте name.

Пропущенные рейтинги заменены на рейтинг RP (Rating Pending — Рейтинг ожидается). Исходим из того, что не классифицированная по рейтингу игра и ожидающая рейтинга — это одно и тоже.

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

Обработка строк с неявными дубликатами¶

In [27]:
# Просмотр строк с неявными дубликатами, 
# выявленными при первичном анализе данных
games.loc[
    ((games['name'] == 'Madden NFL 13') & 
    (games['platform'] == 'PS3') & 
    (games['year_of_release'] == 2012))
]
Out[27]:
name platform year_of_release genre na_sales eu_sales jp_sales other_sales critic_score user_score rating
604 Madden NFL 13 PS3 2012.0 Sports 2.11 0.22 0.0 0.23 83.0 5.5 E
16230 Madden NFL 13 PS3 2012.0 Sports 0.00 0.01 0.0 0.00 83.0 5.5 E

Строку 16230 с неявным дубликатом удалять нельзя, т.к. она содержит данные о продаже в Европе. Для объединения данных строк с неявными дубликатами требуется значение eu_sales из строки 16230 прибавить к значению eu_sales в строке 604. После этого строку 16230 требуется удалить.

In [28]:
# Сложение значений 'eu_sales' в строках с неявными дубликатами
#games.loc[games.index == 604, 'eu_sales'] += games.loc[games.index == 16230, 'eu_sales']
games.loc[games.index == 604, 'eu_sales'].add(games.loc[games.index == 16230, 'eu_sales'])
#games.loc[games.index == 604, 'eu_sales'] = games.loc[games.index == 604, 'eu_sales'] + games.loc[games.index == 16230, 'eu_sales']

# Удаление строки дубликата
games = games.loc[games.index != 16230]
# Проверка наличия дубликата
games.loc[
    (games['name'] == 'Madden NFL 13') & 
    (games['platform'] == 'PS3') & 
    (games['year_of_release'] == 2012)
]
Out[28]:
name platform year_of_release genre na_sales eu_sales jp_sales other_sales critic_score user_score rating
604 Madden NFL 13 PS3 2012.0 Sports 2.11 0.22 0.0 0.23 83.0 5.5 E

Неявные дубликаты строк с игрой Madden NFL 13 на платформе PS3, выпущенной в 2012 году, обработаны путем сложения данных о продажах в Европе и удаления второй повторяющейся строки.

Далее будут обработаны рейтинги со значениями K-A и E.

In [29]:
# Проверка количества значений 'E' в столбце 'rating'
print('Изначальное количество значений "E" в столбце "rating":', games.loc[games['rating'] == 'E', 'rating'].count())

# Замена устаревших значений 'K-A' на 'E' в столбце 'rating'
games.loc[games['rating'] == 'K-A', 'rating'] = 'E'

# Повторная проверка количества значений 'E' в столбце 'rating'
print('Количество значений "E" в столбце "rating" после замены "K-A":', games.loc[games['rating'] == 'E', 'rating'].count())
Изначальное количество значений "E" в столбце "rating": 3920
Количество значений "E" в столбце "rating" после замены "K-A": 3923

Три устаревших значения рейтинга K-A в столбце rating заменено на E.

Преобразование данных в нужные типы¶

При первичном анализа данных были выявлены 7 столбцов, в которых можно понизить разрядность данных, путем их конвертации.

In [30]:
# Конвертация в 'uint16' 
games['year_of_release'] = games['year_of_release'].astype('uint16') 
#games['year_of_release'] = pd.DatetimeIndex(games['year_of_release']).year

# Конвертация в 'float16'
for i in ['na_sales', 'eu_sales', 'jp_sales', 'other_sales', 'critic_score', 'user_score']:
    games[i] = games[i].astype('float16') 
In [31]:
games.info() 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 16443 entries, 0 to 16714
Data columns (total 11 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   name             16443 non-null  object 
 1   platform         16443 non-null  object 
 2   year_of_release  16443 non-null  uint16 
 3   genre            16443 non-null  object 
 4   na_sales         16443 non-null  float16
 5   eu_sales         16443 non-null  float16
 6   jp_sales         16443 non-null  float16
 7   other_sales      16443 non-null  float16
 8   critic_score     7982 non-null   float16
 9   user_score       7462 non-null   float16
 10  rating           16443 non-null  object 
dtypes: float16(6), object(4), uint16(1)
memory usage: 867.1+ KB

Типы данных в 7 столбцах изменены. Размер датафрейма уменьшен почти в 2 раза до 867.1 Кб.

In [32]:
games.head()
Out[32]:
name platform year_of_release genre na_sales eu_sales jp_sales other_sales critic_score user_score rating
0 Wii Sports Wii 2006 Sports 41.375000 28.953125 3.769531 8.453125 76.0 8.000000 E
1 Super Mario Bros. NES 1985 Platform 29.078125 3.580078 6.808594 0.770020 NaN NaN no_ESRB
2 Mario Kart Wii Wii 2008 Racing 15.679688 12.757812 3.789062 3.289062 82.0 8.296875 E
3 Wii Sports Resort Wii 2009 Sports 15.609375 10.929688 3.279297 2.949219 80.0 8.000000 E
4 Pokemon Red/Pokemon Blue GB 1996 Role-Playing 11.273438 8.890625 10.218750 1.000000 NaN NaN no_ESRB

Значения в столбцах с измененным типом данных — приемлемые.

Подсчет суммарных продаж игр во всех регионах в отдельном столбце датафрейма¶

In [33]:
# Миллионов проданных копий игр
games['total_sales'] = games.loc[:, [
    'na_sales', 
    'eu_sales', 
    'jp_sales', 
    'other_sales'
]].sum(axis=1) 
# Корректировка типа данных для дальнейших расчетов
games['total_sales'] = games['total_sales'].astype('float64')
In [34]:
games.head() 
Out[34]:
name platform year_of_release genre na_sales eu_sales jp_sales other_sales critic_score user_score rating total_sales
0 Wii Sports Wii 2006 Sports 41.375000 28.953125 3.769531 8.453125 76.0 8.000000 E 82.500
1 Super Mario Bros. NES 1985 Platform 29.078125 3.580078 6.808594 0.770020 NaN NaN no_ESRB 40.250
2 Mario Kart Wii Wii 2008 Racing 15.679688 12.757812 3.789062 3.289062 82.0 8.296875 E 35.500
3 Wii Sports Resort Wii 2009 Sports 15.609375 10.929688 3.279297 2.949219 80.0 8.000000 E 32.750
4 Pokemon Red/Pokemon Blue GB 1996 Role-Playing 11.273438 8.890625 10.218750 1.000000 NaN NaN no_ESRB 31.375
In [35]:
games.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 16443 entries, 0 to 16714
Data columns (total 12 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   name             16443 non-null  object 
 1   platform         16443 non-null  object 
 2   year_of_release  16443 non-null  uint16 
 3   genre            16443 non-null  object 
 4   na_sales         16443 non-null  float16
 5   eu_sales         16443 non-null  float16
 6   jp_sales         16443 non-null  float16
 7   other_sales      16443 non-null  float16
 8   critic_score     7982 non-null   float16
 9   user_score       7462 non-null   float16
 10  rating           16443 non-null  object 
 11  total_sales      16443 non-null  float64
dtypes: float16(6), float64(1), object(4), uint16(1)
memory usage: 995.6+ KB

Успешно добавлен стобец с total_sales с типом данных float64, содержащий суммы всех продаж каждого релиза по всем регионам, включая other_sales, измеряемая в миллионах копий игр.

Итоги подготовки данных¶

В датафрейме заменены и удалены критичные пропуски в данных, которые не позволили бы конвертировать столбцы в более приемлемые типы данных. Так, в user_score значения tbd заменены на np.nan, а в year_of_release пропуски nan были удалены. Последнее позволило избавиться от строк с данными об играх, которые еще не поступили в полномасштабную продажу. Также удалены строки с пропусками в столбце name. После удаления строк с пропусками потеряно только 1.6% всех строк датафрейма, что не является критичным для анализа. В остальных столбцах пропуски не изменены для корректного общего представления о данных при расчётах. В каждом отдельном случае можно исключить из расчётов строки с пропусками в столбцах, участвующих в расчётах.

Пропущенные рейтинги заменены на рейтинг RP (Rating Pending — Рейтинг ожидается). Исходим из того, что не классифицированная по рейтингу игра и ожидающая рейтинга — это одно и тоже.

Неявные дубликаты строк с игрой Madden NFL 13 на платформе PS3, выпущенной в 2012 году, обработаны путем сложения данных о продажах в Европе и удаления второй повторяющейся строки. Три устаревших значения рейтинга K-A в столбце rating заменено на E.

Типы данных в 7 столбцах изменены. Благодаря этому размер датафрейма уменьшен почти в 2 раза до 867.3 Кб. Успешно добавлен стобец с total_sales с типом данных float64, содержащий суммы всех продаж каждого релиза по всем регионам, включая other_sales, измеряемая в миллионах копий игр. Все названия столбцов датафрейма привередны к нижнему регистру для соответствия «змеиному стилю».

Причины появления пропусков

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

Одновременные пропуски в столбцах name и platform, вероятнее всего вызваны ошибкой ввода данных, т.к. в этом случае объект не возможно идентифицировать и его наличие бессмысленно.

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

In [36]:
# Комментарий ревьюера
# Посмотрим, что осталось
temp = games.copy() 
list_c = ['name', 'platform', 'year_of_release', 'genre', 'critic_score', 'user_score', 'rating']
print(temp.info())
for col_l in list_c:
  print('-'* 25)
  print(col_l, temp[col_l].sort_values().unique())
  print(col_l,': кол-во NaN',temp[col_l].isna().sum(),
        ', процент NaN', round(temp[col_l].isna().mean()*100,2),'%') 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 16443 entries, 0 to 16714
Data columns (total 12 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   name             16443 non-null  object 
 1   platform         16443 non-null  object 
 2   year_of_release  16443 non-null  uint16 
 3   genre            16443 non-null  object 
 4   na_sales         16443 non-null  float16
 5   eu_sales         16443 non-null  float16
 6   jp_sales         16443 non-null  float16
 7   other_sales      16443 non-null  float16
 8   critic_score     7982 non-null   float16
 9   user_score       7462 non-null   float16
 10  rating           16443 non-null  object 
 11  total_sales      16443 non-null  float64
dtypes: float16(6), float64(1), object(4), uint16(1)
memory usage: 995.6+ KB
None
-------------------------
name [' Beyblade Burst' ' Fire Emblem Fates' " Frozen: Olaf's Quest" ...
 'uDraw Studio' 'uDraw Studio: Instant Artist'
 '¡Shin Chan Flipa en colores!']
name : кол-во NaN 0 , процент NaN 0.0 %
-------------------------
platform ['2600' '3DO' '3DS' 'DC' 'DS' 'GB' 'GBA' 'GC' 'GEN' 'GG' 'N64' 'NES' 'NG'
 'PC' 'PCFX' 'PS' 'PS2' 'PS3' 'PS4' 'PSP' 'PSV' 'SAT' 'SCD' 'SNES' 'TG16'
 'WS' 'Wii' 'WiiU' 'X360' 'XB' 'XOne']
platform : кол-во NaN 0 , процент NaN 0.0 %
-------------------------
year_of_release [1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993
 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007
 2008 2009 2010 2011 2012 2013 2014 2015 2016]
year_of_release : кол-во NaN 0 , процент NaN 0.0 %
-------------------------
genre ['Action' 'Adventure' 'Fighting' 'Misc' 'Platform' 'Puzzle' 'Racing'
 'Role-Playing' 'Shooter' 'Simulation' 'Sports' 'Strategy']
genre : кол-во NaN 0 , процент NaN 0.0 %
-------------------------
critic_score [13. 17. 19. 20. 21. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71.
 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89.
 90. 91. 92. 93. 94. 95. 96. 97. 98. nan]
critic_score : кол-во NaN 8461 , процент NaN 51.46 %
-------------------------
user_score [0.  0.2 0.3 0.5 0.6 0.7 0.9 1.  1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.
 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.  3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8
 3.9 4.  4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.  5.1 5.2 5.3 5.4 5.5 5.6
 5.7 5.8 5.9 6.  6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7.  7.1 7.2 7.3 7.4
 7.5 7.6 7.7 7.8 7.9 8.  8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 9.  9.1 9.2
 9.3 9.4 9.5 9.6 9.7 nan]
user_score : кол-во NaN 8981 , процент NaN 54.62 %
-------------------------
rating ['AO' 'E' 'E10+' 'EC' 'M' 'RP' 'T' 'no_ESRB']
rating : кол-во NaN 0 , процент NaN 0.0 %

Шаг 3. Исследовательский анализ данных¶

Датасет содержит данные за несколько десятилетий. Важны ли данные за все периоды? Предположим, что существует 2 подхода к анализу исторических данных.

Первый подход. История циклична и требуется проанализировать исторические данные для выявления закономерностей и циклов.

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

Объединяя оба подхода можно прийти к идее о том, что информацию о закономерности и цикличности значений во времени, полученную в результате анализа исторических данных, а также информацию о текущих анамалиях, можно использовать с определенной долей вероятностей при прогнозировании будущих значений данных. Иключением являются строки с пропусками в year_of_release, которые удалены из датафрейма.

Количество игр, выпускаемых в разные годы¶

In [37]:
# Диаграммы свродных данных о продажах 
# (количество релизов, общая сумма продаж, медиана продаж)
games.pivot_table(
    index='year_of_release', 
    values='total_sales', 
    aggfunc=('count', 'sum', 'median') 
).rename(columns={
    'count':'количество релизов',
    'sum':'общая сумма колличества продаж (млн.)',
    'median':'медиана колличества продаж одного релиза (млн.)'
}).plot(
    subplots=True,
    layout=(3, 1), 
    grid=True,
    xlabel='Годы релизов'
);
2023-09-22T11:12:04.939479 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Наблюдается плавный рост количества релизов игр от года к году с 1980 по 2008 год. Затем наблюдается спад. Аналогично ведёт себя общее количество продаж копий игр в исследуемых регионах.

Однако, этой тенденции не подвержены медианные значения миллионов проданных копий игр одного релиза в год. До 1990 наблюдалась оносительно высокая волотильность. Затем до 1995 года был резкий спад с коррекцией. После этого наблюдается стагнация с очень медленным спадом.

Изменения продаж по платформам.¶

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

In [38]:
# Количество релизов игр в зависимости от платформы и года
total_relaese = games.sort_values(by='total_sales').pivot_table(
    index='platform', 
    columns='year_of_release', 
    values='total_sales', 
    aggfunc='count'
)
In [39]:
# Тепловая карта количества релизов игр на разных платформах в разные годы
ax = sns.heatmap(total_relaese)
ax.set(
    title='Тепловая карта количества релизов игр на разных платформах в разные годы', 
    ylabel='Платформы', 
    xlabel='Годы'
);
2023-09-22T11:12:05.959426 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Из полученной тепловой карты следует:

  1. Разные платформы имеют разную продолжительность существования. Например, максимальная продолжительность существования у платформы PC, которая суммарно вместе с перерывами просуществовала 26 лет. Минимальная продолжительность существования в 1 год у платформы TG16.
  2. Некоторые платформы имеют перерывы активности. Например, DC, DS, GB, PC. Так PC имеет три периода активности по году с интервалами в 2, 3 и 1 год, после чего она имеет самую большую непрерывную продолжительность активности 23 года с 1994 по 2016 годы.
  3. На некоторых платформах со средней продолжительностью существования около 11 лет имеется ярко выраженное увеличение количества релизов в середине периода существования. Причем, пик приходится на первую треть-середину периода существования платформы. Например, это ярко выражено на платформах DC, PS, PS2, Wii.
  4. Исходя из утверждения в предыдущем пункте, можно предположить, что платформы PS4 и XOne находятся в середине своего срока существования. Зафикированный в датафрейме период их активности 4 года, обрывающийся в 2016 году, когда данные прекратили собирать. С начала существования этих платфом наблюдается постепенное увеличение количества релизов, которое обрывается из-за обрыва истории данных. Если утверждение в этом пункте верное, то в начале-середине 2020-х годов можно ожидать снижение до минимума количества релизов на платформах PS4 и XOne и их прекращение их существования.
In [40]:
# Анализ выброса количества релизов на платформе 'DS' в 1985
games.loc[
    (games['platform'] == 'DS') 
    & (1984 <= games['year_of_release'])
    & (games['year_of_release'] <= 2005)
].sort_values(by='year_of_release').head(20)
Out[40]:
name platform year_of_release genre na_sales eu_sales jp_sales other_sales critic_score user_score rating total_sales
15957 Strongest Tokyo University Shogi DS DS 1985 Action 0.000000 0.000000 0.020004 0.000000 NaN NaN no_ESRB 0.020004
4007 Spider-Man 2 DS 2004 Action 0.409912 0.020004 0.029999 0.040009 61.0 5.000000 E 0.500000
4421 The Urbz: Sims in the City (all regions sales) DS 2004 Simulation 0.399902 0.010002 0.020004 0.000000 NaN NaN no_ESRB 0.429932
8465 Zoo Keeper DS 2004 Puzzle 0.099976 0.010002 0.049988 0.010002 74.0 7.500000 E 0.169922
13463 Cocoto Kart Racer DS 2004 Racing 0.040009 0.000000 0.000000 0.000000 NaN NaN E 0.040009
12367 Sprung — A Game Where Everyone Scores DS 2004 Adventure 0.059998 0.000000 0.000000 0.000000 NaN NaN no_ESRB 0.059998
3414 Asphalt: Urban GT DS 2004 Racing 0.310059 0.219971 0.000000 0.059998 60.0 7.500000 E 0.590332
8897 Ridge Racer DS DS 2004 Racing 0.140015 0.000000 0.000000 0.010002 63.0 6.699219 E 0.150024
6063 Feel the Magic XY/XX DS 2004 Puzzle 0.170044 0.000000 0.099976 0.020004 75.0 8.101562 T 0.290039
2668 Pokemon Dash DS 2004 Racing 0.209961 0.140015 0.379883 0.040009 46.0 5.898438 E 0.770020
8984 Tiger Woods PGA Tour DS 2004 Sports 0.130005 0.000000 0.000000 0.010002 64.0 7.398438 E 0.140015
13095 Tennis no Oji-Sama: 2005 Crystal Drive DS 2004 Sports 0.000000 0.000000 0.049988 0.000000 NaN NaN no_ESRB 0.049988
6164 The Urbz: Sims In the City (US weekly sales) DS 2004 Simulation 0.260010 0.000000 0.000000 0.020004 NaN NaN no_ESRB 0.280029
14087 Mahjong Taikai DS 2004 Misc 0.000000 0.000000 0.040009 0.000000 NaN NaN no_ESRB 0.040009
9148 Mr. Driller: Drill Spirits DS 2004 Puzzle 0.080017 0.000000 0.049988 0.010002 70.0 8.898438 E 0.140015
691 WarioWare Touched! DS 2004 Puzzle 0.509766 0.449951 1.209961 0.130005 NaN NaN no_ESRB 2.300781
7902 Daigasso! Band Brothers DS 2004 Misc 0.000000 0.000000 0.189941 0.000000 NaN NaN no_ESRB 0.189941
6578 Madden NFL 2005 DS 2004 Sports 0.239990 0.000000 0.000000 0.020004 68.0 7.699219 E 0.260010
59 Super Mario 64 DS 2004 Platform 5.011719 3.070312 1.250000 0.970215 NaN NaN no_ESRB 10.296875
10073 Ping Pals DS 2004 Misc 0.099976 0.000000 0.000000 0.010002 28.0 3.900391 E 0.109985
In [41]:
# Поиск возможных ремейков игры 'Strongest Tokyo University Shogi DS'
games.loc[games['name'] == 'Strongest Tokyo University Shogi DS']
Out[41]:
name platform year_of_release genre na_sales eu_sales jp_sales other_sales critic_score user_score rating total_sales
15957 Strongest Tokyo University Shogi DS DS 1985 Action 0.0 0.0 0.020004 0.0 NaN NaN no_ESRB 0.020004

Отдельно проанализирован выброс количества релизов на платформе DS в 1985. Можно предположить, что после неуспешного выпуска одного релиза игры Strongest Tokyo University Shogi DS в Японии, о платформе DS забыли на 19 лет. После чего ее возродили и начали продажи игр на ней во всех анализируемых регионах. Это распространенный подход, когда спустя много лет возрождаются давно забытые, но в настроящем потенциально успешные технологии.

Требуется обратиться к поставщику данных за разъяснениями о происхождении этого и других выбросов.

In [42]:
# Миллионы проданных копий игр в зависимости от платформы и года
total_sales = games.sort_values(by='total_sales').pivot_table(
    index='platform', 
    columns='year_of_release', 
    values='total_sales', 
    aggfunc='sum'
)
In [43]:
# Тепловая карта миллионов проданных копий игр в зависимости от платформы и года
ax = sns.heatmap(total_sales)
ax.set(
    title='Тепловая карта миллионов проданных копий игр в зависимости от платформы и года', 
    ylabel='Платформы', 
    xlabel='Годы'
);
2023-09-22T11:12:07.285607 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Данные из этой тепловой карты вторят данным из тепловой карты количества релизов. Активность продаж по годам и платформам совпадает с количеством релизов, но в некоторых случаях наблюдаются более явные изменения. Например, на платформе PS2 продажи в 2002-2004 годах существенно возрасли, а количество релизов увеличилось менее выражено. Еще пример. В 2006 году в начале существования платформы WiiU продаж было много, а количество релизов относительно небольшое. После пика продаж и количества релизов в 2009 году количество продаж и релизов постепенно синизилось до минимальных значений.

In [44]:
# Создание сводной таблицы информации по платформам
games_platform_total = pd.DataFrame()

# Миллионы продаж
games_platform_total['total_sales'] = total_sales.sum(axis=1) 
games_platform_total = games_platform_total.sort_values(by='total_sales', ascending=False) 

# Медиана продаж
games_platform_total['median_sales'] = games.sort_values(by='total_sales').pivot_table(
    index='platform', 
    columns='year_of_release', 
    values='total_sales', 
    aggfunc='median'
).median(axis=1) 

# Количество релизов
games_platform_total['total_release'] = total_relaese.sum(axis=1) 

# Количество лет активности платформы
games_platform_total['total_years'] = games.sort_values(by='total_sales').pivot_table(
    index='year_of_release', 
    columns='platform', 
    values='total_sales', 
    aggfunc='count'
).count()

# Начало функционирования платформы
games_platform_total['min_years'] = games.pivot_table(
    index='platform', 
    values='year_of_release', 
    aggfunc=('min')
)

# Окончание функционирование платформы
games_platform_total['max_years'] = games.groupby('platform')['year_of_release'].agg('max')

games_platform_total.rename(columns={
    'total_sales':'Количество продаж (млн.)', 
    'median_sales':'Медиана продаж (млн.)', 
    'total_release':'Количество релизов', 
    'total_years':'Общее количество лет существования',
    'min_years':'Год создания платформы',
    'max_years':'Последний год существования платформы'
})
Out[44]:
Количество продаж (млн.) Медиана продаж (млн.) Количество релизов Общее количество лет существования Год создания платформы Последний год существования платформы
platform
PS2 1233.543427 0.222534 2127.0 12 2000 2011
X360 961.179657 0.267517 1232.0 12 2005 2016
PS3 931.361649 0.310059 1305.0 11 2006 2016
Wii 891.116653 0.190063 1286.0 11 2006 2016
DS 802.765686 0.109985 2121.0 11 1985 2013
PS 727.562515 0.270020 1190.0 10 1994 2003
PS4 314.140610 0.390076 392.0 4 2013 2016
GBA 312.872353 0.154999 811.0 8 2000 2007
PSP 289.533401 0.075012 1193.0 12 2004 2015
3DS 257.818977 0.095001 512.0 6 2011 2016
PC 255.759705 0.050003 957.0 26 1985 2016
GB 254.420227 0.900146 97.0 13 1988 2001
XB 251.571350 0.150024 803.0 9 2000 2008
NES 251.034668 1.269531 98.0 12 1983 1994
N64 218.001938 0.310059 316.0 7 1996 2002
SNES 200.022865 0.292542 239.0 10 1990 1999
GC 196.757355 0.150024 542.0 7 2001 2007
XOne 159.311836 0.342468 247.0 4 2013 2016
2600 86.464722 0.409912 116.0 10 1980 1989
WiiU 82.190422 0.219971 147.0 5 2012 2016
PSV 53.812134 0.082520 429.0 6 2011 2016
SAT 33.590530 0.105011 173.0 6 1994 1999
GEN 28.348358 1.850098 27.0 5 1990 1994
DC 15.945816 0.119995 52.0 7 1998 2008
SCD 1.860016 0.779999 6.0 2 1993 1994
NG 1.439926 0.080009 12.0 4 1993 1996
WS 1.419891 0.230042 6.0 3 1999 2001
TG16 0.160019 0.080009 2.0 1 1995 1995
3DO 0.100006 0.030003 3.0 2 1994 1995
GG 0.040009 0.040009 1.0 1 1992 1992
PCFX 0.029999 0.029999 1.0 1 1996 1996

Лидером продаж игр является платформа PS2. На ней продано суммарно более 1233.57 млн. копий игр. Эта же платформа является лидером по количеству релизов игр (2127 релизов), но не по медиане продаж копий игр одного релиза (223 тыс. копий). Далее по количеств продаж следуют X360 (961.24 млн. копий), PS3 (931.11 млн. копий), Wii (891.19 млн. копий), DS (802.78 млн. копий) и PS (727.56 млн. копий). Далее с разрывом почти в 400 млн. копий следует PS4. Замыкает список платформа PCFX 30 тыс. проданных копий игр.

In [45]:
games_platform_total.loc[:, 
    ['total_sales', 
    'median_sales', 
    'total_release', 
    'total_years']
].rename(columns={
    'total_sales':'Количество продаж (млн.)', 
    'median_sales':'Медиана продаж (млн.)', 
    'total_release':'Количество релизов', 
    'total_years':'Общее количество лет существования'
}).plot(
    kind='bar',
    subplots=True,
    layout=(4, 1),
    xlabel='Платформы'
);
2023-09-22T11:12:08.667965 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Исходя из приведенных здесь графиков, перечисленные в них параметры имеют слабую корреляцию. И всё же количество продаж имее зависимость от количества релизов. Это подтверждается наличие одного и того же лидера PS2 по обоим параметрам. Наиболее непредсказуемы медианны продаж копий игр одного релиза по платформам. Наблюдается незначительная обратная зависимость к другим показателям.

In [46]:
# Матрица корреляции Пирсона
games_platform_total.rename(columns={
    'total_sales':'Количество продаж (млн.)', 
    'median_sales':'Медиана продаж (млн.)', 
    'total_release':'Количество релизов', 
    'total_years':'Общее количество лет существования',
    'min_years':'Год создания платформы',
    'max_years':'Последний год существования платформы'
}).corr()
Out[46]:
Количество продаж (млн.) Медиана продаж (млн.) Количество релизов Общее количество лет существования Год создания платформы Последний год существования платформы
Количество продаж (млн.) 1.000000 -0.077077 0.899286 0.504278 0.167441 0.524750
Медиана продаж (млн.) -0.077077 1.000000 -0.241157 0.034879 -0.314785 -0.338127
Количество релизов 0.899286 -0.241157 1.000000 0.565986 0.133384 0.608907
Общее количество лет существования 0.504278 0.034879 0.565986 1.000000 -0.269425 0.405698
Год создания платформы 0.167441 -0.314785 0.133384 -0.269425 1.000000 0.709808
Последний год существования платформы 0.524750 -0.338127 0.608907 0.405698 0.709808 1.000000

Исходя из матрицы корреляции Пирсона количество продаж имет наибольшую зависимость с количеством релизов. Следом с большим отрывом по корреляции с количеством продаж идут последний год существования платформы и общее количество лет существования платформы. Почти полное отсутствие корреляции с годом создания платформы. Незначительнюу обратную корреляцию почти со всеми показателями имеет медиана продаж.

In [47]:
games_platform_total.describe()
Out[47]:
total_sales median_sales total_release total_years min_years max_years
count 31.000000 31.000000 31.000000 31.000000 31.000000 31.000000
mean 284.328281 0.309924 530.419355 7.677419 1997.645161 2005.258065
std 343.945292 0.394507 617.325618 5.081910 9.094131 9.273503
min 0.029999 0.029999 1.000000 1.000000 1980.000000 1989.000000
25% 22.147087 0.088760 39.500000 4.000000 1992.500000 1996.000000
50% 200.022865 0.190063 247.000000 7.000000 1996.000000 2007.000000
75% 301.202877 0.310059 884.000000 11.000000 2004.500000 2016.000000
max 1233.543427 1.850098 2127.000000 26.000000 2013.000000 2016.000000

Средняя продолжительность жизни платформы 7.7 лет, медианная 7 лет. Минимальная продолжительность жизни платформы 1 год, максимальная 26 лет. Медианное количество релизов 247, всех продаж по платформам 200 млн. копий, а медиан по каждому релизу 310 тыс. копий.

Предварительные выводы о платформах

Лидером продаж игр является платформа PS2. На ней продано суммарно более 1233.57 млн. копий игр. Эта же платформа является лидером по количеству релизов игр (2127 релизов), но не по медиане продаж копий игр одного релиза (223 тыс. копий). Далее по количеств продаж следуют X360 (961.24 млн. копий), PS3 (931.11 млн. копий), Wii (891.19 млн. копий), DS (802.78 млн. копий) и PS (727.56 млн. копий). Далее с разрывом почти в 400 млн. копий следует PS4.

Разные платформы имеют разную продолжительность существования. Например, максимальная продолжительность существования у платформы PC, которая суммарно вместе с перерывами просуществовала 26 лет. Минимальная продолжительность существования в 1 год у платформы ‘TG16’. Некоторые платформы имеют перерывы активности. Например, DC, DS, GB, PC. PC имеет три периода активности по году с интервалами в 2, 3 и 1 год, после чего она имеет самую большую непрерывную продолжительность активности 23 года с 1994 по 2016 годы. Средняя продолжительность жизни платформы 7.6 лет, медианная 7 лет. Минимальная продолжительность жизни платформы 1 год, максимальная 26 лет. Медианное количество релизов 247, всех продаж по платформам 200 млн. копий, а медиан по каждому релизу 310 тыс. копий.

На некоторых платформах со средней продолжительностью существования около 11 лет имеется ярко выраженное увеличение количества релизов в середине периода существования. Также на тех ж платформах в этот период наблюдается рост продаж, но более ярко выражено. Например, на платформе PS2 продажи в 2002-2004 годах существенно возрасли, а количество релизов увеличилось менее выражено. Пик роста количества релизов и продаж приходится на первую треть-середину периода существования платформы. Например, это наглядно на платформах DC, PS, PS2, Wii.

Исходя из вышесказанного, можно предположить, что платформы PS4 и XOne находятся в середине своего срока существования. Зафикированный в датафрейме период их активности 5-6 лет, обрывающийся в 2016 году, когда данные прекратили собирать. С начала существования этих платфом наблюдается постепенное увеличение количества релизов, которое обрывается из-за обрыва истории данных. Если утверждение в этом пункте верное, то в начале-середине 2020-х годов можно ожидать снижение до минимума количества релизов на платформах PS4 и XOne и их прекращение их существования.

Выбор данных за актуальный период¶

Актуальный период определяется самостоятельно в результате исследования предыдущих вопросов. Основной фактор — эти данные помогут построить прогноз на 2017 год. Не учитываются в работе данные за предыдущие годы.

In [48]:
# Актуальный период для прогноза продаж (текущий 
# срок существования наиболее перспективных платформ 'PS4' и 'XOne')
actual_years = [2013, 2014, 2015, 2016]
In [49]:
# Продажи за актуальный период
actual_sales = total_sales.loc[:, actual_years].dropna(how='all')

actual_sales
Out[49]:
year_of_release 2013 2014 2015 2016
platform
3DS 56.573982 43.766342 27.779579 15.136314
DS 1.539917 NaN NaN NaN
PC 12.377724 13.281830 8.518822 5.250160
PS3 113.268341 47.759399 16.822273 3.599861
PS4 25.987915 99.995705 118.903877 69.253113
PSP 3.140205 0.240036 0.120026 NaN
PSV 10.590317 11.902092 6.250443 4.250237
Wii 8.590233 3.750084 1.140221 0.179932
WiiU 21.648422 22.029816 16.350273 4.600388
X360 88.579224 34.735878 11.959328 1.520279
XOne 18.960632 54.067703 60.134880 26.148621

Учитывая тот факт, что мидана продолжительности существования платформы 7 лет, этот мериод можно считать показательным для прогнозирования дальнейшего развития игровой индустрии. Однако, для целей анализа выбран период в 4 года, которые существуют наиболее перспективные платформы PS4 и XOne. Из анализа исключены платформы, на которых не было активности за полседние 4 лет.

Какие платформы лидируют по продажам, растут или падают?¶

Выберите несколько потенциально прибыльных платформ.

In [50]:
# Лидеры продаж 
actual_sales.sum(axis=1).sort_values(ascending=False)
Out[50]:
platform
PS4     314.140610
PS3     181.449875
XOne    159.311836
3DS     143.256218
X360    136.794708
WiiU     64.628899
PC       39.428535
PSV      32.993088
Wii      13.660469
PSP       3.500267
DS        1.539917
dtype: float64

За последние 4 года осуществляли продажи около трети всех проанализированных платформ. Только 11 из 31 платформы. Лидером суммарных продаж за последние 4 года является платформа PS4 (314.14 млн. проданных копий игр). Далее с большим отрывом следует PS3 (181.43 млн. проданных копий игр). Замыкает тройку лидеров платформа XOne (159.31 млн. проданных копий игр). Платформа-долгожитель PC входит в десятку лидиров продаж (39.43 млн. проданных копий игр).

In [51]:
actual_sales[2016].sort_values(ascending=False)
Out[51]:
platform
PS4     69.253113
XOne    26.148621
3DS     15.136314
PC       5.250160
WiiU     4.600388
PSV      4.250237
PS3      3.599861
X360     1.520279
Wii      0.179932
DS            NaN
PSP           NaN
Name: 2016, dtype: float64

В 2016 году только 9 платформ продавали копии игр. Лидером среди них являлась платформа PS4 (69.25 млн. проданных копий игр). Следом с большим отрывом идут XOne (26.15 млн. проданных копий игр) и 3DS (15.14 млн. проданных копий игр). В 2016 году платформа-долгожитель PC вошла в пятерку лидиров продаж (5.25 млн. проданных копий игр). Постепенно за последние годы сошли с дистанции продаж DS и PSP.

In [52]:
actual_sales.sum()
Out[52]:
year_of_release
2013    361.256912
2014    331.528885
2015    267.979721
2016    129.938904
dtype: float64

С каждым годом снижается количество проданных копий игр. В 2016 году самые низкие продажи (129.94 млн. проданных копий игр) за последние 4 года. Если это тенденция, то в 2017 году можно ожидать продолжение снижения количества проданных копий игр.

In [53]:
# Тепловая карта миллионов проданных копий игр в зависимости от платформы за последние 4 года
ax = sns.heatmap(actual_sales, annot=True)
ax.set(
    title='Тепловая карта миллионов проданных копий игр в зависимости от платформы за последние 4 года',
    ylabel='Платформы', 
    xlabel='Годы'
);
2023-09-22T11:12:09.721161 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Платформа PS4 является лидером последние 3 года анализа. Это не смотря на снижение продаж в 2 раза в 2016 году, относительно 2015 года. Если развитие PS4 будет подчиненно медианной продолжительности существования всех проанализированных платформ, то PS4 сможет просуществовать еще 3 года, а может и более. Аналогичная ситуация с платформой XOne, но с отрывом более чем в 2 раза, относительно PS4.

Предварительный прогноз на 2017 год.

В 2017 году вероятнее всего снизится общее количество продаваемых копий игр. Прдолжат существовать игровые платформы PS4, XOne, 3DS, PC, WiiU, PSV, PS3, X360 и Wii. При этом, PS4 и XOne до 2016 года набирали обороты продаж и, еще не достигли медианного возраста всех платформ. Значит они в 2017 году вероятно продолжат существовать и лидировать в родажах. Также, вероятно, продолжатся продажи на платформе PC, хоть и с отставанием от лидеров. Остальные платформы, на которых продажи осуществлялись в 2016 году постепенно от года к году снижают количество продаж и могут в любой момент уйти с рынка. Особенно это характерно для PS3, X360 и Wii, т.к. они из безусловных лидеров в 2010 превратились в аутсайдеров в 2016 году, а срок их существования больше медианного.

График «ящик с усами» по глобальным продажам игр в разбивке по платформам¶

In [54]:
# Для дальнейшего анализа использовать только актуальные 4 года
games_actual = games.loc[games['year_of_release'] >= 2013]

print('Общая информация из копии датафрейма "games" с данными за последние 4 года')
print()
print(games_actual.info())
print()
print(games_actual.describe())

games_actual.sort_values(by='total_sales', ascending=False).head()
Общая информация из копии датафрейма "games" с данными за последние 4 года

<class 'pandas.core.frame.DataFrame'>
Int64Index: 2233 entries, 16 to 16714
Data columns (total 12 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   name             2233 non-null   object 
 1   platform         2233 non-null   object 
 2   year_of_release  2233 non-null   uint16 
 3   genre            2233 non-null   object 
 4   na_sales         2233 non-null   float16
 5   eu_sales         2233 non-null   float16
 6   jp_sales         2233 non-null   float16
 7   other_sales      2233 non-null   float16
 8   critic_score     991 non-null    float16
 9   user_score       1192 non-null   float16
 10  rating           2233 non-null   object 
 11  total_sales      2233 non-null   float64
dtypes: float16(6), float64(1), object(4), uint16(1)
memory usage: 135.2+ KB
None

       year_of_release     na_sales     eu_sales     jp_sales  other_sales  \
count      2233.000000  2233.000000  2233.000000  2233.000000  2233.000000   
mean       2014.477385     0.196167     0.175781     0.063049     0.053772   
std           1.089439     0.547852     0.512695     0.234009     0.165649   
min        2013.000000     0.000000     0.000000     0.000000     0.000000   
25%        2014.000000     0.000000     0.000000     0.000000     0.000000   
50%        2014.000000     0.020004     0.029999     0.010002     0.010002   
75%        2015.000000     0.150024     0.130005     0.049988     0.040009   
max        2016.000000     9.656250     9.093750     4.351562     3.960938   

       critic_score   user_score  total_sales  
count     991.00000  1192.000000  2233.000000  
mean            inf     6.582031     0.488448  
std        12.84375     1.610352     1.235331  
min        13.00000     0.199951     0.010002  
25%        66.00000     5.800781     0.029999  
50%        74.00000     7.000000     0.109985  
75%        81.00000     7.800781     0.400146  
max        97.00000     9.296875    21.062500  
Out[54]:
name platform year_of_release genre na_sales eu_sales jp_sales other_sales critic_score user_score rating total_sales
16 Grand Theft Auto V PS3 2013 Action 7.019531 9.093750 0.979980 3.960938 97.0 8.203125 M 21.062500
23 Grand Theft Auto V X360 2013 Action 9.656250 5.140625 0.059998 1.410156 97.0 8.101562 M 16.265625
31 Call of Duty: Black Ops 3 PS4 2015 Shooter 6.031250 5.859375 0.360107 2.380859 NaN NaN no_ESRB 14.632812
33 Pokemon X/Pokemon Y 3DS 2013 Role-Playing 5.281250 4.191406 4.351562 0.779785 NaN NaN no_ESRB 14.601562
42 Grand Theft Auto V PS4 2014 Action 3.960938 6.308594 0.379883 1.969727 97.0 8.296875 M 12.617188

За последние 4 года было выпущено 2233 релиза игр. Продажи копий игр этих релизов распределены не равномерно между всеми аналзируемыми регионами. Медианные продажи по всем регионам зафиксированы на уровне 4 млн. копий игр. Лидером по по общему количеству продаж является игра Grand Theft Auto V, выпущенная в 2013 году на платформе PS3. Было продано 21.05 млн. копий этой игры. Эта же игра на платформе X360 в том же году стала лидером по продажам среди регионов. В Северной Америке было продано 9.66 млн копий.

In [55]:
# Графики "Ящик с усами" от 'pandas' 
# для анализа распределений продаж игр за последние 4 года
sns.boxplot(
    x=games_actual.rename(columns={
        'platform':'Платформа'
    })['Платформа'], 
    y=games_actual.rename(columns={
        'total_sales':'Продажи млн. копий игр'
    })['Продажи млн. копий игр']
);
plt.title('Продажи млн. копий игр одного релиза по всем регионам с учётом выбросов')
plt.show()

sns.boxplot(
    x=games_actual.rename(columns={
        'platform':'Платформа'
    })['Платформа'], 
    y=games_actual.rename(columns={
        'total_sales':'Продажи млн. копий игр'
    })['Продажи млн. копий игр'], 
    showfliers=False
);
plt.title('Продажи млн. копий игр одного релиза по всем регионам без учёта выбросов')
plt.show()
2023-09-22T11:12:10.136462 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2023-09-22T11:12:10.409022 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

В актуальный период третьи квартили только платформ Wii и X360 преодолели планку в 700 тыс. продаж копий игр одного релиза. При этом, самая высоквая медиана продаж у X360. Эта же платформа имеет один из самых больших единичных выбросов в 15 млн. проданных копий игр, уступив в этом только платформе PS3 с выбросом в 20 млн. продаж. Наиболее перспективные с точки зрения возможного начала жизненного цикла платформы PS4 и XOne входят в пятерку платформ с максимальным третьим квартилем и медианой продаж копий игр одного релиза.

Предварительный вывод об игровых платфомах в актуальный период

Наиболее перспективные с точки зрения возможного начала многолетнего жизненного цикла платформы PS4 и XOne входят в пятерку платформ с максимальным третьим квартилем и медианой продаж копий игр одного релиза. Это означает, что платформы PS4 и XOne наиоболее выгодны с точки зрения среднесрочных инвестиционных вложений.

Влияние отзывов критиков и пользователей на продажи отдельно взятых платформ всех вместе¶

In [56]:
# Матрицы диаграмм рассеяния для отслеживания зависимости между количеством 
# проданных млн. копий игр, оценками критиков и пользователей
# для каждой платформы отдельно

fig, axes = plt.subplots(
    len(games_actual['platform'].unique()), 
    2
)

r = 0
for i in games_actual['platform'].unique():
    c = 0
    for j in ['Оценки критиков', 'Оценки пользователей']:
        games_actual.loc[
            games_actual['platform'] == i
        ].rename(columns={
            'total_sales':'Продано млн. копий игр',
            'critic_score':'Оценки критиков',
            'user_score':'Оценки пользователей'
        }).plot.scatter(
            x=j, 
            y='Продано млн. копий игр', 
            alpha=.3, 
            ax=axes[r, c], 
            figsize=(7, 50), 
            title=i
        );
        c += 1
    r += 1

fig.tight_layout() # автоматическая регулировка расстояния между пографиками
plt.show()
2023-09-22T11:12:13.374524 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

На графиках все значения «прижимаются» к осям координат. Значит, корреляция слабая.

Графики рассейния подтверждают выводы о небольшой зависимости количества продаж от оценок экспертов и пользователей. С ростом значений параметров увеличивается их разброс. Имеются выбросы.

In [57]:
# Таблица корреляции Пирсона между количеством 
# проданных млн. копий игр, оценками критиков и пользователей
# для каждой платформы отдельно

games_actual.loc[
    :, 
    ['platform', 
     'total_sales', 
     'critic_score', 
     'user_score']
].rename(columns={
    'platform':'Платформа',
    'total_sales':'Продано млн. копий игр',
    'critic_score':'Оценки критиков',
    'user_score':'Оценки пользователей'
}).pivot_table(
    index='Платформа',
    values=['Продано млн. копий игр', 'Оценки критиков', 'Оценки пользователей'],
    aggfunc='corr'
)
Out[57]:
Оценки критиков Оценки пользователей Продано млн. копий игр
Платформа
3DS Продано млн. копий игр 0.357087 0.241371 1.000000
Оценки критиков 1.000000 0.769661 0.357087
Оценки пользователей 0.769661 1.000000 0.241371
DS Продано млн. копий игр NaN NaN 1.000000
PC Продано млн. копий игр 0.195984 -0.094016 1.000000
Оценки критиков 1.000000 0.429521 0.195984
Оценки пользователей 0.429521 1.000000 -0.094016
PS3 Продано млн. копий игр 0.334198 0.002497 1.000000
Оценки критиков 1.000000 0.600016 0.334198
Оценки пользователей 0.600016 1.000000 0.002497
PS4 Продано млн. копий игр 0.406580 -0.032015 1.000000
Оценки критиков 1.000000 0.557659 0.406580
Оценки пользователей 0.557659 1.000000 -0.032015
PSP Продано млн. копий игр NaN -1.000000 1.000000
Оценки пользователей NaN 1.000000 -1.000000
PSV Продано млн. копий игр 0.254687 0.000919 1.000000
Оценки критиков 1.000000 0.611548 0.254687
Оценки пользователей 0.611548 1.000000 0.000919
Wii Продано млн. копий игр NaN 0.682841 1.000000
Оценки пользователей NaN 1.000000 0.682841
WiiU Продано млн. копий игр 0.376352 0.419424 1.000000
Оценки критиков 1.000000 0.721421 0.376352
Оценки пользователей 0.721421 1.000000 0.419424
X360 Продано млн. копий игр 0.350403 -0.011692 1.000000
Оценки критиков 1.000000 0.520877 0.350403
Оценки пользователей 0.520877 1.000000 -0.011692
XOne Продано млн. копий игр 0.416974 -0.069075 1.000000
Оценки критиков 1.000000 0.472404 0.416974
Оценки пользователей 0.472404 1.000000 -0.069075

Почти все коэффициенты корреляции количества проданных копий игр с оценками экспертов и пользователей, кроме одного, на каждой отдельно взятых платформах по модулю не превышают 0.5. Только на платформе Wii этот коэффициент больше и равен 0.682841. Часть корреляций отрицательная, но также не значительная по модулю. Например, продажи копий игр на платформе PC с оценками пользователей имеет корреляцию -0.093991.

In [58]:
# Коэффициент корреляции между 'total_sales' (млн. проданных копий игр) 
# и 'critic_score' (отзывы критиков) на всех платформах
print('Коэффициент корреляции между количеством всех проданных копий игр одного релиза и \
оценкой критиков на всех платформах:')
print(games_actual['total_sales'].corr(games_actual['critic_score']))

print()

# Коэффициент корреляции между 'total_sales' (млн. проданных копий игр) 
# и 'user_score' (отзывы пользователей) на всех платформах
print('Коэффициент корреляции между количеством всех проданных копий игр одного релиза и \
оценкой пользователей на всех платформах:')
print(games_actual['total_sales'].corr(games_actual['user_score']))
Коэффициент корреляции между количеством всех проданных копий игр одного релиза и оценкой критиков на всех платформах:
0.31367473012747243

Коэффициент корреляции между количеством всех проданных копий игр одного релиза и оценкой пользователей на всех платформах:
-0.0025974006973781623

Коэффициенты корреляции количества продаж с оценками экспертов и пользователей на отдельных платформах соотносятся со значенями по всем платформам. Коэффициент корреляции между количеством продаж и оценками экспертов больше по модулю, чем с оценками пользователей, последний имеет отрицательное значение. На смотря на это, в обоих случаях коэффциенты не значительные.

Промежуточные выводы. Отсутствует статистически значимая корреляция между отзывами критиков и пользователей с продажами на всех и отдельно взятых платформах. Т.е. продажи от них почти независимы.

Общее распределение игр по жанрам¶

Что можно сказать о самых прибыльных жанрах? Выделяются ли жанры с высокими и низкими продажами?

In [59]:
# Распределение количества продаж по жанрам игр
games_actual.rename(columns={
    'genre':'Жанр'
}).pivot_table(
    index='Жанр',
    values='total_sales',
    aggfunc=('sum', 'median', 'count')
).rename(columns={
    'sum':'Сумма млн. продаж',
    'median':'Медиана продаж',
    'count':'Количество релизов'
}).sort_values(by='Сумма млн. продаж', ascending=False)
Out[59]:
Количество релизов Медиана продаж Сумма млн. продаж
Жанр
Action 766 0.109985 321.881523
Shooter 187 0.449951 232.982071
Sports 214 0.239990 150.636368
Role-Playing 292 0.125031 145.890526
Misc 155 0.099976 62.828140
Platform 74 0.224976 42.632034
Racing 85 0.119995 39.895241
Fighting 80 0.125000 35.310120
Adventure 245 0.029999 23.639168
Simulation 62 0.100006 21.759521
Strategy 56 0.080017 10.080208
Puzzle 17 0.059998 3.169502

Самый большой объем рынка игр в жанре Action. На этот рынок приходится 321.86 млн. всех продаж. Людям интересны игры в жанре Action и об этом знают создатели игр, потому данный рынок и самый высококонкурентный. В рамках него создано 766 релизов игр. Более чем в других жанрах. Далее в тройке лидиров по объему рынка с большим отрывом расположились игры в жанрах Shooter (232.99 млн. продаж копий игр) и Sports (150.64 млн. продаж копий игр).

Из трех перечисленных жанров более интересен Shooter. На рынке этого жанра самая высокая медиана продаж на один релиз (450 тыс. копий игр) и не самая высокая активность по созданию релизов (187 релизов — это 5 место по количеству релизов).

In [60]:
# Графики "Ящик с усами" от 'pandas' 
# для анализа распределений продаж игр за последние 4 года
sns.boxplot(
    x=games_actual.rename(columns={
        'genre':'Жанр'
    })['Жанр'], 
    y=games_actual.rename(columns={
        'total_sales':'Продажи млн. копий игр'
    })['Продажи млн. копий игр']
);
plt.title('Продажи млн. копий игр одного релиза по всем регионам с учётом выбросов')
plt.show()

sns.boxplot(
    x=games_actual.rename(columns={
        'genre':'Жанр'
    })['Жанр'], 
    y=games_actual.rename(columns={
        'total_sales':'Продажи млн. копий игр'
    })['Продажи млн. копий игр'], 
    showfliers=False
);
plt.title('Продажи млн. копий игр одного релиза по всем регионам без учёта выбросов')
plt.show()
2023-09-22T11:12:14.548605 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2023-09-22T11:12:14.894367 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Медиана продаж копий игр Shooter превосходит третий квартиль большинства продаж копий игр других жанров. Третий квартиль Shooter превосходит 1 млн. продаж, что больше третьих квартилей продаж копий игр других жанров. Для полноты выводов требуется анализ развития рынка этого жанра игр во времени относительно других жанров.

In [61]:
# Таблица корреляции всех продаж с годами релизов по жанрам
genre_years = games_actual.pivot_table(
    index='genre',
    values=['total_sales', 'year_of_release'], 
    aggfunc='corr'
)

# Вывод только корреляционных значений по жанрам 
# в единичном экземпляере с сортировкой
genre_years.loc[genre_years['total_sales'] < 1, 'total_sales'].sort_values(ascending=False)
Out[61]:
genre                        
Adventure     year_of_release   -0.008960
Shooter       year_of_release   -0.009209
Fighting      year_of_release   -0.054020
Role-Playing  year_of_release   -0.067652
Sports        year_of_release   -0.088469
Simulation    year_of_release   -0.173719
Action        year_of_release   -0.184171
Misc          year_of_release   -0.195254
Platform      year_of_release   -0.223892
Racing        year_of_release   -0.250244
Puzzle        year_of_release   -0.263163
Strategy      year_of_release   -0.336985
Name: total_sales, dtype: float64

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

Итоги исследовательского анализа данных¶

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

О продажах в целом

Наблюдается плавный рост количества релизов игр от года к году с 1980 по 2008 год. Затем наблюдается спад. Аналогично ведёт себя общее количество продаж копий игр в исследуемых регионах. Однако, этой тенденции не подвержены медианные значения миллионов проданных копий игр одного релиза в год. До 1990 наблюдалась оносительно высокая волотильность. Затем до 1995 года был резкий спад с коррекцией. После этого наблюдается стагнация с очень медленным спадом.

О платформах в целом

Лидером продаж игр является платформа PS2. На ней продано суммарно более 1233.57 млн. копий игр. Эта же платформа является лидером по количеству релизов игр (2127 релизов), но не по медиане продаж копий игр одного релиза (223 тыс. копий). Далее по количеств продаж следуют X360 (961.24 млн. копий), PS3 (931.11 млн. копий), Wii (891.19 млн. копий), DS (802.78 млн. копий) и PS (727.56 млн. копий). Далее с разрывом почти в 400 млн. копий следует PS4.

Разные платформы имеют разную продолжительность существования. Например, максимальная продолжительность существования у платформы PC, которая суммарно вместе с перерывами просуществовала 26 лет. Минимальная продолжительность существования в 1 год у платформы ‘TG16’. Некоторые платформы имеют перерывы активности. Например, DC, DS, GB, PC. PC имеет три периода активности по году с интервалами в 2, 3 и 1 год, после чего она имеет самую большую непрерывную продолжительность активности 23 года с 1994 по 2016 годы. Средняя продолжительность жизни платформы 7.6 лет, медианная 7 лет. Минимальная продолжительность жизни платформы 1 год, максимальная 26 лет. Медианное количество релизов 247, всех продаж по платформам 200 млн. копий, а медиан по каждому релизу 310 тыс. копий.

На некоторых платформах со средней продолжительностью существования около 11 лет имеется ярко выраженное увеличение количества релизов в середине периода существования. Также на тех ж платформах в этот период наблюдается рост продаж, но более ярко выражено. Например, на платформе PS2 продажи в 2002-2004 годах существенно возрасли, а количество релизов увеличилось менее выражено. Пик роста количества релизов и продаж приходится на первую треть-середину периода существования платформы. Например, это наглядно на платформах DC, PS, PS2, Wii.

Исходя из вышесказанного, можно предположить, что платформы PS4 и XOne находятся в середине своего срока существования. Зафикированный в датафрейме период их активности 5-6 лет, обрывающийся в 2016 году, когда данные прекратили собирать. С начала существования этих платфом наблюдается постепенное увеличение количества релизов, которое обрывается из-за обрыва истории данных. Если утверждение в этом пункте верное, то в начале-середине 2020-х годов можно ожидать снижение до минимума количества релизов на платформах PS4 и XOne и их прекращение их существования.

О влиянии разных факторов на продажи в целом

Важное влияние на продажи имеет жанр игры. Так, игры в жанре Action являются лидерами продаж. На этот жанр приходится 1716.52 млн. проданных копий игр. Далее в тройке лидиров с большим отрывом расположились игры в жанрах Sports (1309.55 млн. продаж копий игр) и Shooter (1041.35 млн. продаж копий игр). Замыкает рейтинг жанров Strategy (172.57 млн. продаж копий игр). В отличии от жанров игр, от отзывов критиков продажи почти независимы. Это следует из отсутствия статистически значимой корреляция между отзывами критиков и пользователей с продажами на всех и отдельно взятых платформах. Важная особенность — не зависимо от оценки критиков большое количество значений продаж стремиться к минимуму.

Актуальный период для анализа

Учитывая тот факт, что мидана продолжительности существования платформы 7 лет, этот мериод можно считать показательным для прогнозирования дальнейшего развития игровой индустрии. Однако, для целей анализа выбран период в 4 года, которые существуют наиболее перспективные платформы PS4 и XOne. Из анализа исключены платформы, на которых не было активности за полседние 4 лет.

Игровые платфомы в актуальный период

Наиболее перспективные с точки зрения возможного начала многолетнего жизненного цикла платформы PS4 и XOne входят в пятерку платформ с максимальным третьим квартилем и медианой продаж копий игр одного релиза. Это означает, что платформы PS4 и XOne наиоболее выгодны с точки зрения среднесрочных инвестиционных вложений.

Жанры в актуальный период

Наиболее интересный рынок игр в жанре Shooter. Этот рынок входит в тройку по объему продаж и составляет 232.99 млн. проданных копий игр. На рынке этого жанра самая высокая медиана продаж на один релиз (450 тыс. копий игр) и не самая высокая активность по созданию релизов (187 релизов — это 5 место по количеству релизов).

Оценки критиков и пользователей в актуальный период Отсутствует статистически значимая корреляция между отзывами критиков и пользователей с продажами на всех и отдельно взятых платформах. Т.е. продажи от них почти независимы.

Шаг 4. Портрет пользователя каждого региона¶

Определение прортета для пользователя каждого региона (NA, EU, JP)

Самые популярные платформы (топ-5). Различия в долях от всего объема продаж¶

In [62]:
# Датафрейм с долями продаж по регионам
regions_sales_percent = pd.DataFrame()

regions_sales_percent['platform'] = games_actual['platform']
regions_sales_percent['na_sales'] = games_actual['na_sales'].fillna(0) / games_actual['total_sales'].fillna(0).sum()
regions_sales_percent['eu_sales'] = games_actual['eu_sales'].fillna(0) / games_actual['total_sales'].fillna(0).sum()
regions_sales_percent['jp_sales'] = games_actual['jp_sales'].fillna(0) / games_actual['total_sales'].fillna(0).sum()
regions_sales_percent['other_sales'] = games_actual['other_sales'].fillna(0) / games_actual['total_sales'].fillna(0).sum()
In [63]:
# Датафрейм с долями продаж по регионам
regions_sales_percent = pd.DataFrame()

regions_sales_percent['platform'] = games_actual['platform']
regions_sales_percent['na_sales'] = games_actual['na_sales'] / games_actual['total_sales'].sum()
regions_sales_percent['eu_sales'] = games_actual['eu_sales'] / games_actual['total_sales'].sum()
regions_sales_percent['jp_sales'] = games_actual['jp_sales'] / games_actual['total_sales'].sum()
regions_sales_percent['other_sales'] = games_actual['other_sales'] / games_actual['total_sales'].sum()
In [64]:
games_actual.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 2233 entries, 16 to 16714
Data columns (total 12 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   name             2233 non-null   object 
 1   platform         2233 non-null   object 
 2   year_of_release  2233 non-null   uint16 
 3   genre            2233 non-null   object 
 4   na_sales         2233 non-null   float16
 5   eu_sales         2233 non-null   float16
 6   jp_sales         2233 non-null   float16
 7   other_sales      2233 non-null   float16
 8   critic_score     991 non-null    float16
 9   user_score       1192 non-null   float16
 10  rating           2233 non-null   object 
 11  total_sales      2233 non-null   float64
dtypes: float16(6), float64(1), object(4), uint16(1)
memory usage: 199.7+ KB
In [65]:
# Датафрейм с топ-5 платформ по долям продаж в каждом регионе

# Создание датафрейма
top5_platform_regions = pd.DataFrame(index=games_actual.platform.unique())

# Доли продаж в Северной Америке
top5_platform_regions['na_sales'] = regions_sales_percent.pivot_table(
    index=regions_sales_percent.platform,
    values='na_sales', 
    aggfunc='sum'
)['na_sales'].sort_values(
    #by='na_sales', 
    ascending=False
).head(5)

# Доли продаж в Европе
top5_platform_regions['eu_sales'] = regions_sales_percent.pivot_table(
    index=regions_sales_percent.platform,
    values='eu_sales', 
    aggfunc='sum'
).sort_values(
    by='eu_sales', 
    ascending=False
).head(5)

# Доли продаж в Японии
top5_platform_regions['jp_sales'] = regions_sales_percent.pivot_table(
    index=regions_sales_percent.platform,
    values='jp_sales', 
    aggfunc='sum'
).sort_values(
    by='jp_sales', 
    ascending=False
).head(5)

# Доли продаж в других регионах
top5_platform_regions['other_sales'] = regions_sales_percent.pivot_table(
    index=regions_sales_percent.platform,
    values='other_sales', 
    aggfunc='sum'
).sort_values(
    by='other_sales', 
    ascending=False
).head(5)

# Удаление из списка платформ тех, что не вошли в топ-5
top5_platform_regions = top5_platform_regions.dropna(how='all')

# Переименование столбцов для наглядности вывода и их сортировка
top5_platform_regions = top5_platform_regions.rename(columns={
    'na_sales':'Северная Америка', 
    'eu_sales':'Европа', 
    'jp_sales':'Япония', 
    'other_sales':'Другие регионы'
}).sort_values(by='Северная Америка', ascending=False)

top5_platform_regions
Out[65]:
Северная Америка Европа Япония Другие регионы
PS4 0.099670 0.129272 0.014633 0.044312
XOne 0.085327 0.047272 NaN 0.013077
X360 0.074829 0.038971 NaN 0.011101
PS3 0.058197 0.062164 0.021408 0.024536
3DS 0.035004 0.028381 0.062164 0.005756
WiiU NaN NaN 0.009972 NaN
PSV NaN NaN 0.017044 NaN

Разные платформы пользуются популярностью в разных регионах. Некоторые платформы популярны только в определенных регионах. Так, например, WiiU популярна только в Японии. Некотоыре платформы входят в топ-5 всех исследуемых регионов, как, например, PS4, занимающая большую долю продаж во всех исследуемых регионах.

In [66]:
print('Максимум:', top5_platform_regions.max().max())
print('Медиана :', top5_platform_regions.median().median())
print('Минимум :', top5_platform_regions.min().min())
Максимум: 0.1293
Медиана : 0.03217
Минимум : 0.005756

Медианная доля использования платформ из топ-5 в 3.22% приходится на использование платформы 3DS в Северной Америке и Европе. Максимальная доля приходится в 12.93% приходится на PS4 в Европе. Минимальная доля в 0.57% приходится на 3DS в других регионах.

In [67]:
top5_platform_regions.sum(axis=1).sort_values(ascending=False)
Out[67]:
PS4     0.287842
PS3     0.166260
XOne    0.145630
3DS     0.131348
X360    0.124878
PSV     0.017044
WiiU    0.009972
dtype: float16

Самая популярная платформа во всех трех регионах PS4. На нее приходится в общем 28.78% всех продаж.

In [68]:
# Тепловая карта топ-5 платформ по продажам в каждом регионе 
ax = sns.heatmap(top5_platform_regions, annot=True)
ax.set(
    ylabel='Платформы', 
    xlabel='Регионы', 
    title='Топ-5 платформ по объёму продаж в разных регионах' 
);
2023-09-22T11:12:16.122754 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Данный хитпэп подтвреждает ранее сделанный вывод о том, что PS4 лидирует почти во всех регионах по количеству продаж.

Выводы о топ-5 игровых платформ

Разные платформы пользуются популярностью в разных регионах. Некоторые платформы популярны только в определенных регионах. Так, например, WiiU популярна только в Японии. Некотоыре платформы входят в топ-5 всех исследуемых регионов, как, например, PS4, занимающая большую долю продаж во всех исследуемых регионах. Платформа PS4 самая популярная почти во всех анализируемых регионах. На нее приходится в общем 28.78% всех продаж.

Самые популярные жанры (топ-5)¶

In [69]:
# Датафрейм с топ-5 жанров по продажам в каждом регионе

# Создание датафрейма
top5_genre_regions = pd.DataFrame(index=games_actual.genre.unique())

# Жанры-лидеры в Северной Америке
top5_genre_regions['na_sales'] = games_actual.pivot_table(
    index='genre',
    values=('na_sales'), 
    aggfunc='sum'
)['na_sales'].sort_values(
    #by='na_sales', 
    ascending=False
).head(5)

# Жанры-лидеры в Европе
top5_genre_regions['eu_sales'] = games_actual.pivot_table(
    index='genre',
    values=('eu_sales'), 
    aggfunc='sum'
).sort_values(
    by='eu_sales', 
    ascending=False
).head(5)

# Жанры-лидеры в Японии
top5_genre_regions['jp_sales'] = games_actual.pivot_table(
    index='genre',
    values=('jp_sales'), 
    aggfunc='sum'
).sort_values(
    by='jp_sales', 
    ascending=False
).head(5)

# Жанры-лидеры в других регионах
top5_genre_regions['other_sales'] = games_actual.pivot_table(
    index='genre',
    values=('other_sales'), 
    aggfunc='sum'
).sort_values(
    by='other_sales', 
    ascending=False
).head(5)

# Удаление жанров, не вошедшиж в топ-5 регионов
top5_genre_regions = top5_genre_regions.dropna(how='all')

# Переименование столбцов для наглядности вывода
top5_genre_regions = top5_genre_regions.rename(columns={
    'na_sales':'Северная Америка', 
    'eu_sales':'Европа', 
    'jp_sales':'Япония', 
    'other_sales':'Другие регионы'
})

top5_genre_regions
Out[69]:
Северная Америка Европа Япония Другие регионы
Action 126.062500 118.12500 40.500000 37.187500
Shooter 109.750000 87.87500 6.609375 28.765625
Role-Playing 46.406250 36.96875 51.031250 11.476562
Misc 27.484375 NaN 9.203125 6.089844
Sports 65.250000 60.53125 NaN 19.453125
Fighting NaN NaN 7.648438 NaN
Racing NaN 20.18750 NaN NaN

3 жанра входят в топ-5 по объёму продаж во всех анализируемых регионов: Action, Sports, Role-Playing. При этом, игры в жанре Action лидируют по объёмам продаж в Северной Америке (126.06 млн. продаж), Европе (118.13 млн. копий) и «других» регионах. Самые «экзотичные» жанры Fighting, который популярен только в Японии (7.65 млн. копий игр), и Racing только в Европе (20.19 млн. копий игр).

In [70]:
print('Максимум:', top5_genre_regions.max().max())
print('Медиана :', top5_genre_regions.median().median())
print('Минимум :', top5_genre_regions.min().min())
Максимум: 126.06
Медиана : 40.0
Минимум : 6.09

Жанр Action, входящий в топ-5 всех исследуемых регионов, максимально популярен в Северной Америке. Там продано 126.06 млн. копий игр в этом жанре за все время исследований. Продажи игр в жанре Misc в других регионах замыкает рейтинг жанров, входящих в топ-5 всех регионов.

In [71]:
top5_genre_regions.sum(axis=1).sort_values(ascending=False)
Out[71]:
Action          322.000000
Shooter         233.000000
Role-Playing    145.875000
Sports          145.250000
Misc             42.781250
Racing           20.187500
Fighting          7.648438
dtype: float16

Самым популярным жанром игр во всех анализируемых регионах является Action. На него приходится 322 млн. проданных копий игр за актуальные четыре голов исследований.

In [72]:
# Тепловая карта топ-5 жанров по продажам в регионах
ax = sns.heatmap(top5_genre_regions, annot=True)
ax.set(
    ylabel='Жанры', 
    xlabel='Регионы', 
    title='Топ-5 жанров по объёму продаж в разных регионах' 
);
2023-09-22T11:12:16.865141 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

3 жанра входят в топ-5 объёма продаж во всех рассматриваемых регионах: Action, Shooter, Role-Playing. 2 жанра популярны только в одном регионе. Так Racing популярен только в Европе, а Fighting в Японии. Жанр Action, входящий в топ-3 всех исследуемых регионов, максимально популярен в Северной Америке. Там продано 1.3 млн. копий игр в этом жанре, что является абсолютным максимум за актуальный период.

In [73]:
# Пироги для наглядности
for i in top5_genre_regions.columns:
    plot = top5_genre_regions[i].plot.pie(
        y='genre', 
        #figsize=(2, 2),
        subplots=True, 
        autopct='%.2f'
    )
    plt.show() 
2023-09-22T11:12:17.073021 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2023-09-22T11:12:17.181139 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2023-09-22T11:12:17.300793 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/
2023-09-22T11:12:17.409165 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Общая доля количества продаж игр в жанре Action во всех регионах большая. Общая доля продаж в жанрах Role-Playing и Shooter кратно отличается в разных регионах.

Выводы о топ-5 жанров игр

3 жанра входят в топ-5 по объёму продаж во всех анализируемых регионов: Action, Sports, Role-Playing. При этом, игры в жанре Action лидируют по объёмам продаж в Северной Америке (126.06 млн. продаж), чуть менее в Европе (118.13 млн. копий) и «других» регионах. Всего на него приходится 322 млн. проданных копий игр.

2 жанра популярны только в одном регионе. Так Racing популярен только в Европе, а Fighting в Японии. Самые «экзотичные» жанры Fighting, который популярен только в Японии (7.65 млн. копий игр), и Racing только в Европе (20.19 млн. копий игр).

Влияет ли рейтинг ESRB на продажи в отдельном регионе?¶

In [74]:
# Датафрейм с топ-5 рейтинга ESRB по долям продаж в каждом регионе

# Создание датафрейма
top5_rating_regions = pd.DataFrame(index=games_actual.rating.unique())

# Количство разных рейтинговых значений в Севрной Америке
top5_rating_regions['na_sales'] = games_actual.pivot_table(
    index='rating',
    values=('na_sales'), 
    aggfunc='sum'
)['na_sales'].sort_values(
    #by='na_sales', 
    ascending=False
).head(5)

# Количство разных рейтинговых значений в Европе
top5_rating_regions['eu_sales'] = games_actual.pivot_table(
    index='rating',
    values=('eu_sales'), 
    aggfunc='sum'
).sort_values(
    by='eu_sales', 
    ascending=False
).head(5)

# Количство разных рейтинговых значений в Японии
top5_rating_regions['jp_sales'] = games_actual.pivot_table(
    index='rating',
    values=('jp_sales'), 
    aggfunc='sum'
).sort_values(
    by='jp_sales', 
    ascending=False
).head(5)

# Количство разных рейтинговых значений в других регионах
top5_rating_regions['other_sales'] = games_actual.pivot_table(
    index='rating',
    values=('other_sales'), 
    aggfunc='sum'
).sort_values(
    by='other_sales', 
    ascending=False
).head(5)

print(top5_rating_regions.head())

# Удаление из списка платформ тех, что не вошли в топ-5
top5_rating_regions = top5_rating_regions.dropna(how='all')

# Переименование столбцов для наглядности вывода
top5_rating_regions = top5_rating_regions.rename(columns={
    'na_sales':'Северная Америка', 
    'eu_sales':'Европа', 
    'jp_sales':'Япония', 
    'other_sales':'Другие регионы' 
})

top5_rating_regions
          na_sales  eu_sales   jp_sales  other_sales
M        165.25000  145.3750  14.109375    47.031250
no_ESRB   89.43750   78.9375  85.062500    23.468750
E         79.06250   83.3750  15.140625    22.609375
T         49.78125   41.9375  20.593750    14.289062
E10+      54.25000   42.6875   5.890625    12.570312
Out[74]:
Северная Америка Европа Япония Другие регионы
M 165.25000 145.3750 14.109375 47.031250
no_ESRB 89.43750 78.9375 85.062500 23.468750
E 79.06250 83.3750 15.140625 22.609375
T 49.78125 41.9375 20.593750 14.289062
E10+ 54.25000 42.6875 5.890625 12.570312

Топ-5 рейтинга: M (Mature — Для взрослых), no_ESRB (игр без рейтинга), E (Everyone — Для всех), T (Teen — Подросткам) и E10+ (Everyone 10 and older — Для всех от 10 лет и старше). Во всех регионах, кроме Японии, по объёмам продаж лидируют игры с рейтингом M. В Японии лидируют продажи игр с без рейтинга (no_ESRB).

In [75]:
# Топ-5 значений рейтинга ESRB с продажами по всем платформам
top5_rating_regions.sum(axis=1).sort_values(ascending=False)
Out[75]:
M          371.5000
no_ESRB    277.0000
E          200.2500
T          126.6875
E10+       115.3750
dtype: float16

Самые продоваемые игры имеют рейтинг M. С его маркировкой во всех анализируемых регионах продано 371.5 млн. копий игр. Игры без рейтинга (no_ESRB) находимся на втором месте по продаваемости.

In [76]:
# Тепловая карта топ-5 значений рейтинга ESRB по продажам в регионах
ax = sns.heatmap(top5_rating_regions, annot=True)
ax.set(
    ylabel='Рейтинг ESRB', 
    xlabel='Регионы', 
    title='Топ-5 значений рейтинга ESRB по продажам в регионах'
);
2023-09-22T11:12:17.909520 image/svg+xml Matplotlib v3.3.4, https://matplotlib.org/

Выводы о топ-5 рейтинга

Подажи игр с маркировкой M (Mature — Для взрослых) в Серной Америке и Европе значительно превосходят игры других категорий и в других регионах. Аналогичная контрастов, но только в Японии, наблюдается с проводами игр без маркировки (no_ESRB).

In [77]:
# Комментарий ревьюера
temp = games.copy()
print(temp.rating.isna().sum(), temp.rating.isna().sum()/len(temp))
temp.rating.value_counts()
0 0.0
Out[77]:
no_ESRB    6676
E          3923
T          2905
M          1536
E10+       1393
EC            8
RP            1
AO            1
Name: rating, dtype: int64

Итоги анализа портрета потребителя в разных регионах¶

Топ-5 игровых платформ

Разные платформы пользуются популярностью в разных регионах. Некоторые платформы популярны только в определенных регионах. Так, например, WiiU популярна только в Японии. Некотоыре платформы входят в топ-5 всех исследуемых регионов, как, например, PS4, занимающая большую долю продаж во всех исследуемых регионах. Платформа PS4 самая популярная почти во всех анализируемых регионах. На нее приходится в общем 28.78% всех продаж.

Топ-5 жанров

3 жанра входят в топ-5 всех трех регионов: Action, Sports, Misc. 2 жанра популярны только в одном регионе. Так Racing популярен только в Европе, а Role-Playing в Японии. Жанр Action, входящий в топ-5 всех исследуемых регионов, максимально популярен в Северной Америке. Там продано 863 млн. копий игр в этом жанре за все время исследований, а во всех трех регионах 1534 млн. копий. Продажи игр в жанре Misc в Японии замыкает рейтинг жанров, входящих в топ-5 всех регионов.

Топ-5 рейтинга Топ-5 рейтинга: M (Mature — Для взрослых), no_ESRB (игры без рейтинга), E (Everyone — Для всех), T (Teen — Подросткам) и E10+ (Everyone 10 and older — Для всех от 10 лет и старше). Во всех регионах, кроме Японии, по объёмам продаж лидируют игры с рейтингом M. В Японии лидируют продажи игр с без рейтинга (RP).

Самые продоваемые игры имеют рейтинг M. С его маркировкой во всех анализируемых регионах продано 371.5 млн. копий игр. Игры без рейтинга (no_ESRB) находимся на втором месте по продаваемости.

Подажи игр с маркировкой M (Mature — Для взрослых) в Серной Америке и Европе значительно превосходят игры других категорий и в других регионах. Аналогичная контрастов, но только в Японии, наблюдается с проводами игр без маркировки (no_ESRB).

Портреты пользователей

Пользователь из Северной Америки в 2016 году предпочитает игры по мере уменьшения интереса в жанрах Action, Shooter, Sports, Role-Playing, Misc с рейтингом M, no_ESRB, E, E10+, T на платформах PS4, XOne, X360, PS3, 3DS.

Пользователь из Европы в 2016 году предпочитает игры по мере уменьшения интереса в жанрах Action, Shooter, Sports, Role-Playing, Racing, с рейтингом M, E, no_ESRB, E10+, T на платформах PS2, PS3, X360, Wii, PS.

Пользователь из Японии в 2016 году предпочитает игры по мере уменьшения интереса в жанрах Role-Playing, Action, Misc, Fighting, Shooter с рейтингом no_ESRB, T, E, M, E10+ на платформах 3DS, PS3, PSV, PS4, WiiU.

Пользователь из других регионов в 2016 году предпочитает игры по мере уменьшения интереса в жанрах Action, Shooter, Sports, Role-Playing, Misc с рейтингом M, no_ESRB, E, T, E10+ на платформах PS4, PS3, XOne, X360, 3DS.

Шаг 5. Проверка гипотез¶

В качестве нулевой гипотезы в обоих ниже приведенных задачах будет проверяться равенство срендних значений двух параметров. В качестве альтернативной гипотезы отсутствие их равенства. В качестве критерия проверки гипотезы будет использоваться пороговое значение $\alpha = 0.5$. Подобное значение выбрано из двух общепринятых 0.1 и 0.5, в свзи с тем, что проверяются значения не требующие высокой точности.

Средние пользовательские рейтинги платформ Xbox One и PC одинаковые¶

Нулевая и альтернативная гипотезы:
Гипотеза Н0: Средние пользовательские рейтинги платформ Xbox One и PC одинаковые.
Гипотеза Н1: Средние пользовательские рейтинги платформ Xbox One и PC не одинаковые.

In [78]:
results = st.ttest_ind(
    games_actual.loc[games_actual['platform'] == 'XOne', 'user_score'].dropna(),
    games_actual.loc[games_actual['platform'] == 'PC', 'user_score'].dropna(),
    equal_var=False,
    alternative='two-sided'
)

print(results.pvalue)
if results.pvalue < .05:
    print('Отвергаем нулевую гипотезу')
else:
    print('Не получилось отвергнуть нулевую гипотезу')
0.14414213365247552
Не получилось отвергнуть нулевую гипотезу

Вывод. Не получилось отвергнуть нулевую гипотезу о том, что средние пользовательские рейтинги платформ Xbox One и PC одинаковые.

Средние пользовательские рейтинги жанров Action (англ. «действие», экшен-игры) и Sports (англ. «спортивные соревнования») разные¶

Нулевая и альтернативная гипотезы:
Гипотеза Н0: Средние пользовательские рейтинги жанров Action и Sports одинаковые.
Гипотеза Н1: Средние пользовательские рейтинги платформ Action и Sports не одинаковые.

In [79]:
results = st.ttest_ind(
    games_actual.loc[games_actual['genre'] == 'Action', 'user_score'].dropna(),
    games_actual.loc[games_actual['genre'] == 'Sports', 'user_score'].dropna(),
    equal_var=False,
    alternative='two-sided'
)

print(results.pvalue)
if results.pvalue < .05:
    print('Отвергаем нулевую гипотезу')
else:
    print('Не получилось отвергнуть нулевую гипотезу')
1.5566794221869148e-20
Отвергаем нулевую гипотезу

Вывод. Отвергаем нулевую гипотезу о том, что средние пользовательские рейтинги жанров Action и Sports одинаковые.

In [80]:
# Визуализация результата задачи
games.loc[
    (games['genre'] == 'Action') | 
    (games['genre'] == 'Sports')
].astype({
    'user_score':'float64'
}).pivot_table(
    index='platform', 
    columns='genre',
    values='user_score', 
    aggfunc='mean'
)
Out[80]:
genre Action Sports
platform
3DS 6.555897 5.783529
DC NaN 6.000000
DS 6.522830 7.380469
GBA 7.379936 7.841694
GC 7.544298 7.792682
PC 7.035785 5.875686
PS 7.426855 8.087402
PS2 7.637054 7.653393
PS3 6.901560 6.166070
PS4 6.933194 5.757394
PSP 7.174121 6.966514
PSV 7.178773 6.510959
Wii 6.798373 6.746998
WiiU 6.933464 5.756975
X360 6.848961 6.291492
XB 7.239496 8.009671
XOne 6.708653 5.567498

Итоги проверки гипотез¶

Гипотеза о том, что средние пользовательские рейтинги платформ Xbox One и PC одинаковые, не отергнута. Это значит, что с высокой вероятностью средние пользовательские рейтинги этих платформ одинаковые. Гипотезу о том, что средние пользовательские рейтинги жанров Action и Sports одинаковые, удалось отвергнуть. Из этого следует, что есть вероятность того, что средние пользовательские рейтинги жанров Action и Sports разные.

Шаг 6. Общий вывод¶

В датафрейме всего 11 столбцов и 16715 строк. 7 столбцов содержат пропуски. Вес датафрейма 1.4 Мб. В данных наблюдаются пропуски. Строки с пропуском в названии игры требуется удалить, т.к. во многих аттрибутах этих объектов пропуски. Названия столбцов в датафрейме выполнены не в «змеином» стиле. Можно изменить типы данных столбцов:

  • Year_of_Release на uint16, т.к. года являются четырёхзначными натуральными числами;
  • NA_sales, EU_sales, JP_sales, Other_sales, Critic_Score и User_Score на float16, т.к. в этих столбцах использованы рациональные числа небольшой размерности.

О столбце с рейтингом ESRB

В рейтингах присутствуют пропуски и устаревшее значение K-A, которое для актуализации требуется заменить на E.

Всего наблюдается 6766 пропусков в столбце Rating, что составляет 40.48% от всего количества значений. Вывод части датафрейма показал, что пропуски в столбце Critic_Score иногда совпадают с пропусками в столбцах Critic_Score и User_Score.

Не обнаружено какой-либо зависимости пропусков в Rating, Critic_Score и User_Score от значений в столбцах Name, Platform, Year_of_Release или Genre. Согласно мнению пользователей (не экспертов) ресурса gaming.stackexchange.com отсутствие рейтинга может свидетельствовать о нежелании владельцев рейтинга ESRB устанавливать метки со своим рейтингом на играх, которые имеют очень разнообразное содержание для разных возрастных групп, которое зависит от определенных условий использования игры (https://gaming.stackexchange.com/questions/27940/why-doesnt-esrb-rate-online-games, 2023). Строки с подобными пропусками можно оставить в датафрейме для дальнейшего анализа. Отсутствие данных в них — это информация о том, что ни рейтинговое агентство ESRB, ни эксперты, ни пользователи, не захотели или не смогли охарактеризовать эти игры.

В тех же случаях, где пропуски в Rating, Critic_Score и User_Score совпадают с пропусками в Year_of_Release, это может означать, что игра еще не выпущена в продажу. Это подтверждается нулевыми медианными продажами почти во всех регионах. Наличие медианных продаж в Северной Америке в размере 10 тыс. копий игр может означать их продажу с целью изучения рынка. Строкам с подобными данными можно дать рейтинг no_ESRB (игры без рейтинга), что будет уместно. Либо, удалить их из датафрейма, т.к. они не несут в себе полезной информации для дальнейшего анализа.

Результаты обработки данных

В датафрейме заменены и удалены критичные пропуски в данных, которые не позволили бы конвертировать столбцы в более приемлемые типы данных. Так, в user_score значения tbd заменены на np.nan, а в year_of_release пропуски nan были удалены. Последнее позволило избавиться от строк с данными об играх, которые еще не поступили в полномасштабную продажу. Также удалены строки с пропусками в столбце name. После удаления строк с пропусками потеряно только 1.6% всех строк датафрейма, что не является критичным для анализа. В остальных столбцах пропуски не изменены для корректного общего представления о данных при расчётах. В каждом отдельном случае можно исключить из расчётов строки с пропусками в столбцах, участвующих в расчётах.

Пропущенные рейтинги заменены на рейтинг RP (Rating Pending — Рейтинг ожидается). Исходим из того, что не классифицированная по рейтингу игра и ожидающая рейтинга — это одно и тоже.

Неявные дубликаты строк с игрой Madden NFL 13 на платформе PS3, выпущенной в 2012 году, обработаны путем сложения данных о продажах в Европе и удаления второй повторяющейся строки. Три устаревших значения рейтинга K-A в столбце rating заменено на E.

Типы данных в 7 столбцах изменены. Благодаря этому размер датафрейма уменьшен почти в 2 раза до 867.3 Кб. Успешно добавлен стобец с total_sales с типом данных float64, содержащий суммы всех продаж каждого релиза по всем регионам, включая other_sales, измеряемая в миллионах копий игр. Все названия столбцов датафрейма привередны к нижнему регистру для соответствия «змеиному стилю».

Результаты исследовательского анализа данных

За все время анализа наблюдается плавный рост количества релизов игр от года к году с 1980 по 2008 год. Затем наблюдается спад. Аналогично ведёт себя общее количество продаж копий игр в исследуемых регионах. Однако, этой тенденции не подвержены медианныые значения продаж копий игр в год.

Учитывая тот факт, что мидана продолжительности существования платформы 7 лет, этот мериод можно считать показательным для прогнозирования дальнейшего развития игровой индустрии. Однако, для целей анализа выбран период в 4 года, которые существуют наиболее перспективные с точки зрения возможного продолжения многолетнего жизненного цикла платформы PS4 и XOne. Эти перспективные платформы входят в пятерку платформ с максимальным третьим квартилем и медианой продаж копий игр одного релиза. Это означает, что платформы PS4 и XOne наиоболее выгодны с точки зрения среднесрочных инвестиционных вложений.

Для инвестиций важна не только платформа, но и жанр игры. Наиболее интересный рынок игр в жанре Shooter. Этот рынок входит в тройку по объему продаж и составляет 232.99 млн. проданных копий игр в актуальный период. На рынке этого жанра самая высокая медиана продаж на один релиз (450 тыс. копий игр) и не самая высокая активность по созданию релизов (187 релизов — это 5 место по количеству релизов). Можно сделать вывод о том, что в 2017 году наиболее перспективно развивать игры в жанре Shooter на платформах PS4 и XOne. При этом, не следует особого внимания уделять экспертным и пользователским оценкам, т.к. не обнаружена статистически значимая корреляция их с продажами на всех и отдельно взятых платформах.

Топ-5 игровых платформ

Разные платформы пользуются популярностью в разных регионах. Некоторые платформы популярны только в определенных регионах. Так, например, WiiU популярна только в Японии. Некотоыре платформы входят в топ-5 всех исследуемых регионов, как, например, PS4, занимающая большую долю продаж во всех исследуемых регионах. Платформа PS4 самая популярная почти во всех анализируемых регионах. На нее приходится в общем 28.78% всех продаж.

Топ-5 жанров

3 жанра входят в топ-5 всех трех регионов: Action, Sports, Misc. 2 жанра популярны только в одном регионе. Так Racing популярен только в Европе, а Role-Playing в Японии. Жанр Action, входящий в топ-5 всех исследуемых регионов, максимально популярен в Северной Америке. Там продано 863 млн. копий игр в этом жанре за все время исследований, а во всех трех регионах 1534 млн. копий. Продажи игр в жанре Misc в Японии замыкает рейтинг жанров, входящих в топ-5 всех регионов.

Топ-5 рейтинга

Топ-5 рейтинга: M (Mature — Для взрослых), no_ESRB (игры без рейтинга), E (Everyone — Для всех), T (Teen — Подросткам) и E10+ (Everyone 10 and older — Для всех от 10 лет и старше). Во всех регионах, кроме Японии, по объёмам продаж лидируют игры с рейтингом M. В Японии лидируют продажи игр с без рейтинга (no_ESRB).

Самые продоваемые игры имеют рейтинг M. С его маркировкой во всех анализируемых регионах продано 371.5 млн. копий игр. Игры без рейтинга (no_ESRB) находимся на втором месте по продаваемости.

Подажи игр с маркировкой M (Mature — Для взрослых) в Серной Америке и Европе значительно превосходят игры других категорий и в других регионах. Аналогичная контрастов, но только в Японии, наблюдается с проводами игр без маркировки (no_ESRB).

Портреты пользователей

Пользователь из Северной Америки в 2016 году предпочитает игры по мере уменьшения интереса в жанрах Action, Shooter, Sports, Role-Playing, Misc с рейтингом M, no_ESRB, E, E10+, T на платформах PS4, XOne, X360, PS3, 3DS.

Пользователь из Европы в 2016 году предпочитает игры по мере уменьшения интереса в жанрах Action, Shooter, Sports, Role-Playing, Racing, с рейтингом M, E, no_ESRB, E10+, T на платформах PS2, PS3, X360, Wii, PS.

Пользователь из Японии в 2016 году предпочитает игры по мере уменьшения интереса в жанрах Role-Playing, Action, Misc, Fighting, Shooter с рейтингом no_ESRB, T, E, M, E10+ на платформах 3DS, PS3, PSV, PS4, WiiU.

Пользователь из других регионов в 2016 году предпочитает игры по мере уменьшения интереса в жанрах Action, Shooter, Sports, Role-Playing, Misc с рейтингом M, no_ESRB, E, T, E10+ на платформах PS4, PS3, XOne, X360, 3DS.

Проверка гипотез

Гипотеза о том, что средние пользовательские рейтинги платформ Xbox One и PC одинаковые, не отергнута. Это значит, что с высокой вероятностью средние пользовательские рейтинги этих платформ одинаковые. Гипотезу о том, что средние пользовательские рейтинги жанров Action и Sports одинаковые, удалось отвергнуть. Из этого следует, что есть вероятность того, что средние пользовательские рейтинги жанров Action и Sports разные.

Коммерческое предложение

Предлагается развита игры в жанре Shooter с рейтингом M на платформах PS4 и XOne в Северной Америке или Европе.

Политика конфиденциальности

Продолжая использовать данный сайт вы подтверждаете свое согласие с условиями его политики конфиденциальности. Подробнее…




Администрация и владельцы данного информационного ресурса не несут ответственности за возможные последствия, связанные с использованием информации, размещенной на нем.


Все права защищены. При копировании материалов сайта обязательно указывать ссылку на © Microsegment.ru (2020-2025)