Este projeto tem como objetivo explorar as tendências nas vendas globais de video games, buscando entender quais fatores têm maior impacto nessas vendas. Entre esses fatores, destacam-se o gênero do jogo, a plataforma em que ele foi lançado, a região onde foi mais vendido, e se o jogo foi lançado em mais de uma plataforma. A análise dessas variáveis permitirá identificar padrões e tendências importantes no mercado de games.
Para essa análise, utilizamos um dataset que contém informações sobre jogos que venderam mais de 100 mil cópias. Aplicamos técnicas de análise exploratória de dados (EDA) para examinar as relações entre as variáveis e extrair insights relevantes. Ao longo do processo, criamos novas colunas e analisamos tanto dados brutos quanto variáveis derivadas para obter uma visão mais detalhada do comportamento do mercado.
A abordagem proposta envolve segmentar os dados com base em variáveis como gênero, ano de lançamento, plataforma e região de vendas. Além disso, utilizaremos gráficos e tabelas resumidas para facilitar a visualização dos resultados e auxiliar na interpretação dos principais achados. Assim, a análise será clara e acessível, destacando os principais fatores que influenciam as vendas.
Com base nos resultados, será possível tomar decisões mais assertivas sobre o desenvolvimento de novos jogos, definir quais plataformas são mais promissoras e identificar as regiões com maior potencial de mercado. Isso permitirá uma alocação mais eficiente de recursos e uma estratégia de mercado melhor direcionada.
library(tidyverse)
library(ggplot2)
library(dplyr)
library(knitr)
library(plotly)
Os dados foram obtidos do dataset de vendas de video games, disponível publicamente em https://www.kaggle.com/datasets/gregorut/videogamesales.
O dataset contém informações sobre jogos que venderam mais de 100 mil cópias, ele foi gerado a partir de um scraper do site Video Game Charts (https://www.vgchartz.com/gamedb/), o scraper foi baseado no BeatifulSoup utilizando Python, os dados foram coletados em 2016, possui 11 variáveis, que incluem o nome do jogo, plataforma, ano de lançamento, gênero, estúdio que publicou o jogo, vendas por região (América do Norte, Europa, Japão, Outros) e vendas globais. Alguns valores não estavam presentes, pelos dados serem provenientes de um scraper, e portanto foram removidos.
Carregando os dados
dados <- read.csv("vgsales.csv", header=TRUE, stringsAsFactors=FALSE)
Removendo a coluna Rank, pois não é relevante para nossas análises
dados$Rank <- NULL
Remoção das linhas com ano N/A, 2017 ou 2020, removemos os dados de 2017 ou 2020 pois não temos entradas o suficiente para comparar com os outros anos.
dados <- dados[dados$Year != "N/A" & dados$Year != "2017" & dados$Year != "2020", ]
Definir ano como um fator
dados$Year <- factor(dados$Year)
# Primeiras 5 linhas
head(dados, 5)
## Name Platform Year Genre Publisher NA_Sales
## 1 Wii Sports Wii 2006 Sports Nintendo 41.49
## 2 Super Mario Bros. NES 1985 Platform Nintendo 29.08
## 3 Mario Kart Wii Wii 2008 Racing Nintendo 15.85
## 4 Wii Sports Resort Wii 2009 Sports Nintendo 15.75
## 5 Pokemon Red/Pokemon Blue GB 1996 Role-Playing Nintendo 11.27
## EU_Sales JP_Sales Other_Sales Global_Sales
## 1 29.02 3.77 8.46 82.74
## 2 3.58 6.81 0.77 40.24
## 3 12.88 3.79 3.31 35.82
## 4 11.01 3.28 2.96 33.00
## 5 8.89 10.22 1.00 31.37
# Últimas 5 linhas
tail(dados, 5)
## Name Platform Year Genre
## 16594 Woody Woodpecker in Crazy Castle 5 GBA 2002 Platform
## 16595 Men in Black II: Alien Escape GC 2003 Shooter
## 16596 SCORE International Baja 1000: The Official Game PS2 2008 Racing
## 16597 Know How 2 DS 2010 Puzzle
## 16598 Spirits & Spells GBA 2003 Platform
## Publisher NA_Sales EU_Sales JP_Sales Other_Sales Global_Sales
## 16594 Kemco 0.01 0.00 0 0 0.01
## 16595 Infogrames 0.01 0.00 0 0 0.01
## 16596 Activision 0.00 0.00 0 0 0.01
## 16597 7G//AMES 0.00 0.01 0 0 0.01
## 16598 Wanadoo 0.01 0.00 0 0 0.01
# Amostra aleatória de 5 linhas
set.seed(123)
sample_n(dados, 5)
## Name Platform Year Genre
## 1 The Price is Right Wii 2008 Misc
## 2 Pro Evolution Soccer 2010 X360 2009 Sports
## 3 Little League World Series Baseball 2008 Wii 2008 Sports
## 4 Return to PopoloCrois: A Story of Seasons Fairytale 3DS 2015 Simulation
## 5 Sumikko Gurashi: Mura o Tsukurundesu 3DS 2016 Misc
## Publisher NA_Sales EU_Sales JP_Sales Other_Sales
## 1 Ubisoft 0.77 0.00 0.00 0.06
## 2 Konami Digital Entertainment 0.12 0.58 0.03 0.08
## 3 Activision 0.09 0.00 0.00 0.01
## 4 Marvelous Entertainment 0.04 0.00 0.10 0.01
## 5 Nippon Columbia 0.00 0.00 0.06 0.00
## Global_Sales
## 1 0.83
## 2 0.81
## 3 0.10
## 4 0.15
## 5 0.06
# Resumo das principais estatísticas das variáveis numéricas
resumo_variaveis <- dados %>%
summarise(
Min_Year = min(as.numeric(as.character(Year)), na.rm = TRUE),
Max_Year = max(as.numeric(as.character(Year)), na.rm = TRUE),
Total_Jogos = n_distinct(Name),
Media_NA_Sales = mean(NA_Sales, na.rm = TRUE),
Media_EU_Sales = mean(EU_Sales, na.rm = TRUE),
Media_JP_Sales = mean(JP_Sales, na.rm = TRUE),
Media_Global_Sales = mean(Global_Sales, na.rm = TRUE)
)
kable(resumo_variaveis, caption = "Resumo das Variáveis Numéricas")
| Min_Year | Max_Year | Total_Jogos | Media_NA_Sales | Media_EU_Sales | Media_JP_Sales | Media_Global_Sales |
|---|---|---|---|---|---|---|
| 1980 | 2016 | 11357 | 0.2654635 | 0.1475905 | 0.0786773 | 0.5403431 |
tipos_variaveis <- dados %>%
summarise(
Total_Platforms = n_distinct(Platform),
Total_Genres = n_distinct(Genre),
Total_Publishers = n_distinct(Publisher)
)
kable(tipos_variaveis, caption = "Diversidade nas Variáveis Categóricas")
| Total_Platforms | Total_Genres | Total_Publishers |
|---|---|---|
| 31 | 12 | 577 |
O dataset contém informações sobre jogos lançados entre os anos 1980 e 2016. Ao todo, temos 11357 títulos distintos. As variáveis de vendas são distribuídas por regiões, com a média de vendas globais sendo de 0.54 milhões de unidades. Os jogos estão distribuídos por várias plataformas, com um total de 31 plataformas distintas, e gêneros, com 12 gêneros. Além disso, os jogos foram publicados por 577 diferentes estúdios.
Criar a coluna ‘Multiple_Platforms’ indicando se o jogo foi lançado em mais de uma plataforma e a coluna ‘Top_Platform’ indicando a plataforma com mais vendas para cada jogo
#Multiple_Platforms
dados$Multiple_Platforms <- ave(dados$Name, dados$Name, FUN = length) > 1
#Top_Platform
dados <- dados %>%
group_by(Name) %>%
mutate(Top_Platform = Platform[which.max(Global_Sales)]) %>%
ungroup()
# Vendas por gênero
genre_sales <- dados %>%
group_by(Genre) %>%
summarise(Total_Sales = sum(Global_Sales, na.rm = TRUE)) %>%
arrange(desc(Total_Sales)) %>%
rename(Gênero = Genre, `Total de Vendas` = Total_Sales)
kable(genre_sales, caption = "Total de Vendas por Gênero (em milhões)")
| Gênero | Total de Vendas |
|---|---|
| Action | 1722.87 |
| Sports | 1309.24 |
| Shooter | 1026.20 |
| Role-Playing | 923.80 |
| Platform | 829.15 |
| Misc | 797.62 |
| Racing | 726.77 |
| Fighting | 444.05 |
| Simulation | 389.87 |
| Puzzle | 242.22 |
| Adventure | 234.80 |
| Strategy | 173.43 |
# Vendas por plataforma
platform_sales <- dados %>%
group_by(Platform) %>%
summarise(Total_Sales = sum(Global_Sales)) %>%
arrange(desc(Total_Sales))
ggplot(platform_sales, aes(x = reorder(Platform, Total_Sales), y = Total_Sales)) +
geom_bar(stat = "identity", fill = "steelblue") +
coord_flip() +
labs(title = "Vendas Globais por Plataforma",
x = "Plataforma",
y = "Vendas Globais (milhões)")
Podemos observar no primeiro gráfico gerado acima, “Total de Vendas por Gênero (em milhões)”, que o gênero mais popular são para jogos de Ação, seguido de Esportes e após isso Shooters, mas isso é regra para todas as regiões e plataformas? Antes disso, observamos que no segundo gráfico, “Vendas Globais por Plataforma”, o Playstation 2 é a plataforma que mais vendeu jogos dentro do período de 1980 a 2016, seguido do Xbox 360 e em seguida o sucessor do primeiro colocado, o Playstation 3.
# Encontrar o gênero mais popular por plataforma
genre_by_platform <- dados %>%
group_by(Platform, Genre) %>%
summarise(Total_Sales = sum(Global_Sales, na.rm = TRUE)) %>%
ungroup() %>%
group_by(Platform) %>%
arrange(desc(Total_Sales)) %>%
slice(1) %>% # Selecionar o gênero mais popular para cada plataforma
ungroup()
# Gráfico de barras mostrando o gênero mais popular por plataforma
ggplot(genre_by_platform, aes(x = reorder(Platform, Total_Sales), y = Total_Sales, fill = Genre)) +
geom_bar(stat = "identity") +
coord_flip() +
labs(title = "Gênero Mais Popular por Plataforma",
x = "Plataforma",
y = "Vendas Totais (milhões)",
fill = "Gênero") +
theme_minimal()
Com base no gráfico acima podemos observar que cada plataforma tem seu gênero mais popular, e que no geral são bem diferentes dependendo de como é aquela plataforma, por exemplo, plataformas similares como Playstation 1, 2, 3 e 4 tem o gênero Ação como mais popular, já Xbox, Xbox 360 e Xbox One tem os Shooters como gênero mais popular, assim como o Nintendo Wii, que tem controles que utilizam o movimento do corpo, não apenas das mãos como a maioria das outras plataformas, o gênero de Esportes como mais popular, justamente pelas capacidades que a plataforma oferece.
# Comparar a média de vendas entre jogos que são ou não multi-plataforma
media_vendas_por_plataforma <- dados %>%
group_by(Multiple_Platforms) %>%
summarise(Media_Global_Sales = mean(Global_Sales))
# Gráfico de barras comparando a média de vendas
ggplot(media_vendas_por_plataforma, aes(x = Multiple_Platforms, y = Media_Global_Sales, fill = Multiple_Platforms)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Média de Vendas Globais por Jogo (Multi-Plataforma vs Não)",
x = "Multi-Plataforma",
y = "Média de Vendas Globais (milhões)") +
theme_minimal()
Podemos ver que um jogo lançado em mais de uma plataforma vende aproximadamente 22.83% mais que um jogo lançado em apenas uma plataforma.
# 1. Função para pegar o gênero mais vendido por ano e região
get_top_genre_per_year_region <- function(df, sales_column, region_name) {
df %>%
group_by(Year, Genre) %>%
summarise(Total_Sales = sum(!!sym(sales_column), na.rm = TRUE)) %>%
arrange(desc(Total_Sales)) %>%
slice(1) %>% # Seleciona o gênero mais vendido
mutate(Region = region_name) %>%
ungroup()
}
# 2. Aplicar a função para todas as regiões
na_sales <- get_top_genre_per_year_region(dados, "NA_Sales", "América do Norte")
eu_sales <- get_top_genre_per_year_region(dados, "EU_Sales", "Europa")
jp_sales <- get_top_genre_per_year_region(dados, "JP_Sales", "Japão")
other_sales <- get_top_genre_per_year_region(dados, "Other_Sales", "Outras regiões")
global_sales <- get_top_genre_per_year_region(dados, "Global_Sales", "Global")
# 3. Unir os dados de todas as regiões
all_top_genres <- bind_rows(na_sales, eu_sales, jp_sales, other_sales, global_sales)
# Ordenar por ano para melhor visualização
all_top_genres <- all_top_genres %>%
arrange(as.numeric(as.character(Year)))
# 4. Criar gráfico interativo com slider para o ano
plot_ly(
all_top_genres,
x = ~Region,
y = ~Total_Sales,
color = ~Genre,
type = "bar",
hoverinfo = "text",
text = ~paste("Ano:", Year, "<br>Gênero:", Genre, "<br>Vendas:", round(Total_Sales, 2), "milhões", "<br>Região:", Region),
frame = ~Year # Definir o controle do slider com base no ano
) %>%
layout(
title = "Gênero mais Vendido por Ano e Região",
xaxis = list(title = "Região"),
yaxis = list(title = "Vendas Totais (milhões)")
%>%
animation_opts(frame = 1000, easing = "linear", redraw = FALSE))
Algo muito curioso que podemos observar com o passar dos anos, é que o Japão, principalmente a partir dos anos 2000, geralmente segue a própria tendência, enquanto todas as outras regiões geralmente acompanham uma única tendência.
top_genres_na <- dados %>%
pivot_longer(NA_Sales, names_to = "NorthAmerica", values_to = "Sales") %>%
group_by(Genre) %>%
summarise(Total_Sales = sum(Sales, na.rm = TRUE)) %>%
arrange(desc(Total_Sales)) %>%
slice_head(n = 5) %>%
pull(Genre)
# Filtrar os dados para incluir apenas os 5 gêneros mais frequentes
genre_year_na <- dados %>%
pivot_longer(NA_Sales, names_to = "NorthAmerica", values_to = "Sales") %>%
group_by(Year, Genre, NorthAmerica) %>%
summarise(Total_Sales = sum(Sales, na.rm = TRUE)) %>%
filter(Genre %in% top_genres_na) %>%
ungroup()
# Criar o gráfico
ggplot(genre_year_na, aes(x = Year, y = Total_Sales, color = Genre, group = Genre)) +
geom_line() +
facet_wrap(~NorthAmerica) +
labs(title = "Tendência de Gêneros de Jogos na América do Norte (Top 5 Gêneros)",
x = "Ano",
y = "Vendas Totais (milhões)",
color = "Gênero") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Com esse gráfico com mostra o desempenho de vendas dos Top 5 Gêneros mais vendidos para a América do Norte, podemos ver que apesar de estar abaixo de outros em alguns momentos, principalmente após de 2001, o gênero de Ação passa a dominar o mercado Norte Americano.
top_genres_eu <- dados %>%
pivot_longer(EU_Sales, names_to = "Europe", values_to = "Sales") %>%
group_by(Genre) %>%
summarise(Total_Sales = sum(Sales, na.rm = TRUE)) %>%
arrange(desc(Total_Sales)) %>%
slice_head(n = 5) %>%
pull(Genre)
genre_year_eu <- dados %>%
pivot_longer(EU_Sales, names_to = "Europe", values_to = "Sales") %>%
group_by(Year, Genre, Europe) %>%
summarise(Total_Sales = sum(Sales, na.rm = TRUE)) %>%
filter(Genre %in% top_genres_eu) %>%
ungroup()
ggplot(genre_year_eu, aes(x = Year, y = Total_Sales, color = Genre, group = Genre)) +
geom_line() +
facet_wrap(~Europe) +
labs(title = "Tendência de Gêneros de Jogos na Europa (Top 5 Gêneros)",
x = "Ano",
y = "Vendas Totais (milhões)",
color = "Gênero") +
theme_minimal()+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Nesse gráfico é possível notar que a Europa segue uma tendência bem parecida com a da America do Norte, porém, sem o gênero de Plataforma nos 5 mais vendidos, e no lugar dele o gênero de jogos de corrida.
top_genres_jp <- dados %>%
pivot_longer(JP_Sales, names_to = "Japan", values_to = "Sales") %>%
group_by(Genre) %>%
summarise(Total_Sales = sum(Sales, na.rm = TRUE)) %>%
arrange(desc(Total_Sales)) %>%
slice_head(n = 5) %>%
pull(Genre)
genre_year_jp <- dados %>%
pivot_longer(JP_Sales, names_to = "Japan", values_to = "Sales") %>%
group_by(Year, Genre, Japan) %>%
summarise(Total_Sales = sum(Sales, na.rm = TRUE)) %>%
filter(Genre %in% top_genres_jp) %>%
ungroup()
ggplot(genre_year_jp, aes(x = Year, y = Total_Sales, color = Genre, group = Genre)) +
geom_line() +
facet_wrap(~Japan) +
labs(title = "Tendência de Gêneros de Jogos no Japão (Top 5 Gêneros)",
x = "Ano",
y = "Vendas Totais (milhões)",
color = "Gênero") +
theme_minimal()+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Já o Japão traz uma visualização bem diferente, os gêneros são bem parecidos com os da America do Norte e Europa, mas tem a incrível adição dos jogos Role-Playing, que praticamente dominam o mercado Japonês na grande parte dos anos.
top_genres_global <- dados %>%
pivot_longer(Global_Sales, names_to = "Global", values_to = "Sales") %>%
group_by(Genre) %>%
summarise(Total_Sales = sum(Sales, na.rm = TRUE)) %>%
arrange(desc(Total_Sales)) %>%
slice_head(n = 5) %>%
pull(Genre)
genre_year_Global <- dados %>%
pivot_longer(Global_Sales, names_to = "Global", values_to = "Sales") %>%
group_by(Year, Genre, Global) %>%
summarise(Total_Sales = sum(Sales, na.rm = TRUE)) %>%
filter(Genre %in% top_genres_global) %>%
ungroup()
ggplot(genre_year_Global, aes(x = Year, y = Total_Sales, color = Genre, group = Genre)) +
geom_line() +
facet_wrap(~Global) +
labs(title = "Tendência de Gêneros de Jogos Globalmente (Top 5 Gêneros)",
x = "Ano",
y = "Vendas Totais (milhões)",
color = "Gênero") +
theme_minimal()+
theme(axis.text.x = element_text(angle = 45, hjust = 1))
E a tendência Global nos mostra algumas coisas, a primeira delas é o impacto do mercado japonês no mundo, roleplaying fica em terceiro lugar gêneros mais vendidos dada o grande sucesso desse gênero no mercado oriental, mas que ainda assim, a tendência global tende mais para a América do Norte e Europa, tendo como mais famosos os já afirmados gêneros de Ação, Plataforma, Shooter e Esportes.
A análise realizada teve como objetivo entender as tendências nas vendas globais de video games, identificando quais fatores mais influenciam essas vendas. Exploramos o impacto do gênero dos jogos, das plataformas em que foram lançados, das regiões de vendas e se o jogo foi lançado em mais de uma plataforma.
Para abordar a questão, utilizamos um dataset abrangente com informações sobre jogos que venderam mais de 100 mil cópias. A metodologia incluiu técnicas de análise exploratória de dados (EDA), onde criamos novas colunas e investigamos a relação entre diferentes variáveis para obter uma visão detalhada do mercado de games.
A análise revelou vários insights interessantes: