O objetivo deste relatório é descrever, por meio de dados, o sucesso de Elden Ring na indústria dos jogos eletrônicos. Analisaremos a quantidade de buscas por palavras relacionadas ao tema, a média de jogadores nos games da FromSoftware, as avaliações dos consumidores e o histórico de preços dos jogos da FromSoftware. Elden Ring estabeleceu um marco histórico para o estúdio FromSoftware, consolidando a empresa como uma das mais relevantes e influentes entre os jogadores.
library(dplyr)
library(ggplot2)
library(patchwork)
library(rmarkdown)
library(plotly)
library(ggimage)
library(magick)
library(grid)
library(tidyr)
library(gridExtra)
library(scales)
As bases de dados foram coletadas do Google Trends (https://trends.google.com.br/trends/).
Os dados de buscas no Google Trends fornecem uma base para entender o engajamento em torno de uma palavra específica, com base na quantidade de vezes que essa palavra é pesquisada diariamente. Os termos analisados foram Dark Souls, Fromsoftware, Demon Souls, Sekiro, Soulslike e Elden Ring.
# Ler os arquivos CSV em DataFrames individuais, garantindo que a primeira coluna não seja tratada como row names
dfBusca_Elden_Ring <- read.csv(file.path(buscas_files_path, "EldenRingBuscas.csv"), row.names = NULL)
dfBusca_DarkSouls <- read.csv(file.path(buscas_files_path, "DarkSoulsBusca.csv"), row.names = NULL)
dfBusca_FromSoftware <- read.csv(file.path(buscas_files_path, "FromSoftwareBuscas.csv"), row.names = NULL)
dfBusca_Sekiro <- read.csv(file.path(buscas_files_path, "SekiroBusca.csv"), row.names = NULL)
dfBusca_Soulslike <- read.csv(file.path(buscas_files_path, "SoulsLike.csv"), row.names = NULL)
dfBusca_DemonSouls <- read.csv(file.path(buscas_files_path, "DemonSoulsBusca.csv"), row.names = NULL)
Os dados originais estão estruturados em duas colunas com a data e outra coluna com a quantidade de vezes que a palavra foi buscada.
head(dfBusca_Elden_Ring)
## row.names Categoria..Todas.as.categorias
## 1 Semana Elden Ring: (Brasil)
## 2 2019-12-29 <1
## 3 2020-01-05 <1
## 4 2020-01-12 <1
## 5 2020-01-19 <1
## 6 2020-01-26 <1
head(dfBusca_DarkSouls)
## row.names Categoria..Todas.as.categorias
## 1 Mês Dark Souls: (Brasil)
## 2 2018-01 90
## 3 2018-02 72
## 4 2018-03 62
## 5 2018-04 56
## 6 2018-05 74
head(dfBusca_FromSoftware)
## row.names Categoria..Todas.as.categorias
## 1 Mês FromSoftware: (Brasil)
## 2 2004-01 0
## 3 2004-02 0
## 4 2004-03 0
## 5 2004-04 0
## 6 2004-05 0
head(dfBusca_Sekiro)
## row.names Categoria..Todas.as.categorias
## 1 Mês Sekiro: (Brasil)
## 2 2018-01 0
## 3 2018-02 0
## 4 2018-03 0
## 5 2018-04 0
## 6 2018-05 0
head(dfBusca_Soulslike)
## row.names Categoria..Todas.as.categorias
## 1 Mês Soulslike: (Brasil)
## 2 2018-01 0
## 3 2018-02 0
## 4 2018-03 0
## 5 2018-04 0
## 6 2018-05 0
head(dfBusca_DemonSouls)
## row.names Categoria..Todas.as.categorias
## 1 Mês Demon Souls: (Brasil)
## 2 2018-01 17
## 3 2018-02 16
## 4 2018-03 12
## 5 2018-04 11
## 6 2018-05 15
Durante a análise dos dados originais, identificamos a necessidade de tratá-los adequadamente. Além disso, adicionamos uma nova coluna chamada ‘Categoria’, que recebeu os nomes das palavras analisadas e com a criação dessa nova coluna, foi possível construir um único conjunto de dados, com todos os dados agrupados.
# Função para adicionar a coluna de categoria
adicionar_categoria <- function(df, categoria) {
df$Categoria <- categoria
return(df)
}
# Adicionando a coluna de categoria a cada dataframe
dfBusca_Elden_Ring <- adicionar_categoria(dfBusca_Elden_Ring, "EldenRing")
dfBusca_DarkSouls <- adicionar_categoria(dfBusca_DarkSouls, "DarkSouls")
dfBusca_FromSoftware <- adicionar_categoria(dfBusca_FromSoftware, "FromSoftware")
dfBusca_Sekiro <- adicionar_categoria(dfBusca_Sekiro, "Sekiro")
dfBusca_Soulslike <- adicionar_categoria(dfBusca_Soulslike, "Soulslike")
dfBusca_DemonSouls <- adicionar_categoria(dfBusca_DemonSouls, "DemonSouls")
# Remover a primeira linha do cabeçalho das tabelas adicionais
dfBusca_Elden_Ring <- dfBusca_Elden_Ring[-1, ]
dfBusca_Sekiro <- dfBusca_Sekiro[-1, ]
dfBusca_DarkSouls <- dfBusca_DarkSouls[-1, ]
dfBusca_FromSoftware <- dfBusca_FromSoftware[-1, ]
dfBusca_Soulslike <- dfBusca_Soulslike[-1, ]
dfBusca_DemonSouls <- dfBusca_DemonSouls[-1, ]
# Combinando todos os dataframes em um único dataframe
df_combinadoBuscas <- rbind(dfBusca_Elden_Ring, dfBusca_Sekiro, dfBusca_DarkSouls, dfBusca_FromSoftware, dfBusca_Soulslike, dfBusca_DemonSouls)
# Novos nomes para colunas
nv_nm_clmn_Busa <- c("Data","Buscas","Games")
# Atribuir ao Data Frame
colnames(df_combinadoBuscas) <- nv_nm_clmn_Busa
# Converter a coluna "Buscas" para numérica
df_combinadoBuscas$Buscas <- as.numeric(df_combinadoBuscas$Buscas)
## Warning: NAs introduzidos por coerção
# Substituir NA por 0 na coluna "Buscas"
df_combinadoBuscas$Buscas[is.na(df_combinadoBuscas$Buscas)] <- 0
# Adicionar o primeiro dia do mês e converter para o formato de data
df_combinadoBuscas$Data <- as.Date(paste(df_combinadoBuscas$Data, "-01", sep = ""), format = "%Y-%m-%d")
# Garantir que a coluna "Data" está no formato de data
df_combinadoBuscas$Data <- as.Date(df_combinadoBuscas$Data, format="%Y-%m-%d") # Ajuste o formato conforme necessário
# Mostrar os Dados
glimpse(df_combinadoBuscas)
## Rows: 867
## Columns: 3
## $ Data <date> 2019-12-29, 2020-01-05, 2020-01-12, 2020-01-19, 2020-01-26, 20…
## $ Buscas <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ Games <chr> "EldenRing", "EldenRing", "EldenRing", "EldenRing", "EldenRing"…
# Mostrar todos os dados
paged_table(df_combinadoBuscas)
# Filtrar os dados para mostrar apenas de 2020 em diante
df_combinado_2020_Buscas <- df_combinadoBuscas %>%
filter(as.Date(Data) >= as.Date("2020-01-01"))
# Adicionar as datas de lançamento e anúncio do Elden Ring
data_lancamento <- as.Date("2022-02-25")
data_anuncio <- as.Date("2024-06-21")
# Criar o gráfico de linha com nome das categorias no final das linhas
grafico <- ggplot(df_combinado_2020_Buscas, aes(x = as.Date(Data), y = as.numeric(Buscas), color = Games, group = Games)) +
geom_line(size = 1) +
geom_text(data = df_combinado_2020_Buscas %>% group_by(Games) %>% filter(as.Date(Data) == max(as.Date(Data))),
aes(label = Games, text = paste("Nome Completo: ", Games)), hjust = -2, vjust = -5, nudge_x = 10, size = 3) +
geom_vline(xintercept = as.numeric(data_lancamento), linetype = "dashed", color = "red") + # Linha vertical para o lançamento
geom_vline(xintercept = as.numeric(data_anuncio), linetype = "dotted", color = "blue") + # Linha vertical para o anúncio
annotate("text", x = data_lancamento, y = Inf, label = "Lançamento Elden Ring", vjust = -1, hjust = 1.1, color = "red") + # Texto de anotação para o lançamento
annotate("text", x = data_anuncio, y = Inf, label = "Anúncio Elden Ring", vjust = -1, hjust = 1.1, color = "blue") + # Texto de anotação para o anúncio
labs(title = "Gráfico de Linhas Buscas de Palavras por Mês",
x = "Data", y = NULL) +
theme_minimal() +
theme(
legend.position = "none",
plot.margin = margin(10, 40, 10, 10),
plot.title = element_text(size = 20),
axis.title.x = element_text(size = 12),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
axis.title.y = element_text(size = 12)
)
# Transformar o gráfico ggplot2 em um gráfico plotly interativo
grafico_interativo <- ggplotly(grafico, tooltip = c("text"))
# Definir as dimensões do gráfico interativo
grafico_interativo <- grafico_interativo %>%
layout(width = 950, height = 500)
# Criar o gráfico de linha suavizada com o ggplot2
grafico <- ggplot(df_combinado_2020_Buscas, aes(x = as.Date(Data), y = as.numeric(Buscas), color = Games, group = Games)) +
geom_smooth(method = "loess", size = 1, se = FALSE) + # Suavizar as linhas com LOESS e aumentar a grossura
labs(title = "Gráfico de Linha Suavizada Buscas de Palavras por Mês", # Novo título
x = "Data",
y = "Buscas") +
theme_minimal() +
theme(
plot.margin = margin(10, 40, 10, 10),
plot.title = element_text(size = 20),
axis.title.x = element_text(size = 12),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
axis.title.y = element_text(size = 12)
) # Usar um tema minimalista
# Transformar o gráfico ggplot2 em um gráfico plotly interativo
grafico_interativo1 <- ggplotly(grafico)
# Definir as dimensões do gráfico interativo
grafico_interativo1 <- grafico_interativo1 %>%
layout(width = 950, height = 400) # Ajustar a largura e a altura
O gráfico mostra que, próximo ao lançamento (representada pela linha
pontilhada vertical vermelha) do jogo Elden Ring, houve um aumento
significativo nas buscas por termos como Dark Souls,
FromSoftware e o próprio Elden Ring.
Esse ciclo se repetiu com o lançamento da expansão Shadow of the Erdtree
(representada pela linha pontilhada vertical azul), impulsionando também
as buscas por Demon’s Souls. O sucesso dos lançamentos
e as estratégias de marketing elevaram a visibilidade tanto do estúdio
quanto de seus outros jogos.
Uma descoberta notável que podemos visualizar facilmente com o
gráfico de linhas suavizadas é a popularização do termo ‘Soulslike’,
usado para descrever jogos que adotam mecânicas empregadas nos títulos
da FromSoftware. Embora Elden Ring não tenha sido o que motivou a criar
o termo, ele certamente ajudou a disseminá-lo, consolidando ‘Soulslike’
como um gênero de jogo reconhecido hoje.
Os dados coletados de jogadores dos jogos da FromSoftware refletem o crescimento da empresa, a consolidação de uma base de fãs leais ao estilo dos jogos e a elevação das expectativas em relação ao estúdio.
# Base de Dados de Players na Steam As bases de dados foram
coleatadas na Steam DB (https://steamdb.info/), estando limitadas a dados de
jogadores apenas da plataforma PC.
# Definir os caminhos completos para os arquivos CSV específicos
dfPlayers_Elden_Ring <- read.csv(file.path(players_files_path, "PlayersEldenRing.csv"), row.names = NULL)
dfPlayers_DarkSouls <- read.csv(file.path(players_files_path, "PlayersDarkSoulsRemas.csv"), row.names = NULL)
dfPlayers_PlayersDarkSouls2 <- read.csv(file.path(players_files_path, "PlayersDarkSouls2.csv"), row.names = NULL)
dfPlayers_PlayersDarkSouls3 <- read.csv(file.path(players_files_path, "PlayersDarkSouls3.csv"), row.names = NULL)
dfPlayers_Sekiro <- read.csv(file.path(players_files_path, "PlayersSekiro.csv"), row.names = NULL)
Os dados originais estão estruturados em duas colunas data com a hora e outra coluna com a quantidade de players por dia.
head(dfPlayers_Elden_Ring)
## DateTime.Players.Average.Players
## 1 2022-02-24 00:00:00;559624;
## 2 2022-02-25 00:00:00;764835;
## 3 2022-02-26 00:00:00;861538;
## 4 2022-02-27 00:00:00;891638;
## 5 2022-02-28 00:00:00;819143;
## 6 2022-03-01 00:00:00;828001;
head(dfPlayers_DarkSouls)
## DateTime.Players.Average.Players
## 1 2017-08-13 00:00:00;4;
## 2 2017-08-14 00:00:00;12;
## 3 2017-08-15 00:00:00;8;
## 4 2017-08-16 00:00:00;22;
## 5 2017-08-17 00:00:00;21;
## 6 2017-08-18 00:00:00;21;
head(dfPlayers_PlayersDarkSouls2)
## DateTime.Players.Average.Players
## 1 2014-03-01 00:00:00;18;
## 2 2014-03-02 00:00:00;;
## 3 2014-03-03 00:00:00;;
## 4 2014-03-04 00:00:00;;
## 5 2014-03-05 00:00:00;;
## 6 2014-03-06 00:00:00;;
head(dfPlayers_Sekiro)
## DateTime.Players.Average.Players
## 1 2019-03-21 00:00:00;52358;
## 2 2019-03-22 00:00:00;108985;
## 3 2019-03-23 00:00:00;125315;
## 4 2019-03-24 00:00:00;124408;
## 5 2019-03-25 00:00:00;100204;
## 6 2019-03-26 00:00:00;94277;
head(dfPlayers_PlayersDarkSouls3)
## DateTime.Players.Average.Players
## 1 2015-12-08 00:00:00;1;
## 2 2015-12-09 00:00:00;1;
## 3 2015-12-10 00:00:00;;
## 4 2015-12-11 00:00:00;;
## 5 2015-12-12 00:00:00;;
## 6 2015-12-13 00:00:00;;
Considerando a base original de dados da steam para criação da análise, surgiu uma algumas necessidade de tratamento de dados, como diminuir a escala da analise de dias para meses considerando a medida de média de players no mês. Além disso, adicionamos uma nova coluna chamada ‘Categoria’, que recebeu os nomes dos jogos analisados. Com a criação dessa nova coluna, foi possível construir um único conjunto de dados, com todos os dados agrupados.
# Função para processar cada DataFrame
processar_df <- function(df, nome_categoria) {
colnames(df) <- c("Dados") # Renomeia a coluna
df <- df %>% separate(Dados, into = c("Data", "Players"), sep = ";", extra = "drop") # Divide pelos ";"
df$Players <- as.numeric(df$Players) # Converte a coluna de Players para numérica
df$Categoria <- nome_categoria # Adiciona a categoria correspondente
return(df)
}
# Carregar os arquivos CSV e processar os DataFrames
dfPlayers_Elden_Ring <- processar_df(dfPlayers_Elden_Ring, "Elden Ring")
dfPlayers_DarkSouls <- processar_df(dfPlayers_DarkSouls, "Dark Souls Remastered")
dfPlayers_DarkSouls2 <- processar_df(dfPlayers_PlayersDarkSouls2, "Dark Souls 2")
dfPlayers_DarkSouls3 <- processar_df(dfPlayers_PlayersDarkSouls3, "Dark Souls 3")
dfPlayers_Sekiro <- processar_df(dfPlayers_Sekiro, "Sekiro")
# Combinar todos os DataFrames em um único
dfPlayers_Completo <- bind_rows(dfPlayers_Elden_Ring, dfPlayers_DarkSouls, dfPlayers_DarkSouls2, dfPlayers_DarkSouls3, dfPlayers_Sekiro)
# Adicionar coluna de mês e ano
dfPlayers_Completo$MesAno <- format(as.Date(dfPlayers_Completo$Data), "%Y-%m")
# Calcular médias mensais e arredondar os valores
dfPlayers_MediaMensal <- dfPlayers_Completo %>%
group_by(MesAno, Categoria) %>%
summarize(Media_Players = round(mean(Players, na.rm = TRUE)))
## `summarise()` has grouped output by 'MesAno'. You can override using the
## `.groups` argument.
# Definir as datas de anúncio e lançamento
data_anuncio <- as.Date("2019-06-09")
data_lancamento <- as.Date("2022-02-25")
# Filtrar os dados de Elden Ring separadamente
dfEldenRing <- dfPlayers_MediaMensal %>% filter(Categoria == "Elden Ring")
dfOutrosJogos <- dfPlayers_MediaMensal %>% filter(Categoria != "Elden Ring")
# Verificar se há dados válidos antes de calcular o fator de ajuste
if (nrow(dfEldenRing) > 0 && nrow(dfOutrosJogos) > 0 &&
any(!is.na(dfEldenRing$Media_Players)) && any(!is.na(dfOutrosJogos$Media_Players))) {
factor_ajuste <- max(dfOutrosJogos$Media_Players, na.rm = TRUE) / max(dfEldenRing$Media_Players, na.rm = TRUE)
dfEldenRing$Media_Players_Ajustado <- dfEldenRing$Media_Players * factor_ajuste
}
# Remover valores ausentes
dfOutrosJogos <- na.omit(dfOutrosJogos)
dfEldenRing <- na.omit(dfEldenRing)
# Converter a coluna MesAno para Date
dfPlayers_MediaMensal$MesAno <- as.Date(paste0(dfPlayers_MediaMensal$MesAno, "-01"))
# Adicionar uma coluna com o ano
dfPlayers_MediaMensal$Ano <- format(dfPlayers_MediaMensal$MesAno, "%Y")
# Calcular a média anual dos jogadores por categoria
dfPlayers_MediaAnual <- dfPlayers_MediaMensal %>%
group_by(Ano, Categoria) %>%
summarize(Media_Anual_Players = mean(Media_Players, na.rm = TRUE))
## `summarise()` has grouped output by 'Ano'. You can override using the `.groups`
## argument.
## Rows: 443
## Columns: 4
## Groups: MesAno [132]
## $ MesAno <date> 2014-03-01, 2014-04-01, 2014-05-01, 2014-06-01, 2014-07…
## $ Categoria <chr> "Dark Souls 2", "Dark Souls 2", "Dark Souls 2", "Dark So…
## $ Media_Players <dbl> 18, 69874, 33965, 13484, 12369, 11819, 9647, 7777, 4853,…
## $ Ano <chr> "2014", "2014", "2014", "2014", "2014", "2014", "2014", …
# Fator de ajuste para o eixo secundário
factor_ajuste <- max(dfOutrosJogos$Media_Players, na.rm = TRUE) / max(dfEldenRing$Media_Players, na.rm = TRUE)
print(factor_ajuste)
## [1] 0.1193216
# Criar o gráfico de combinação com ggplot2
grafico_combBuscas <- ggplot() +
geom_bar(data = dfOutrosJogos, aes(x = as.Date(paste0(MesAno, "-01")), y = Media_Players, fill = Categoria),
stat = "identity") +
geom_line(data = dfEldenRing, aes(x = as.Date(paste0(MesAno, "-01")), y = Media_Players_Ajustado, group = 1),
color = "#007589", size = 2, linetype = "solid") +
geom_text(data = dfEldenRing %>% filter(MesAno == "2022-03"),
aes(x = as.Date(paste0(MesAno, "-01")), y = Media_Players_Ajustado, label = " Elden Ring"),
color = "#007589", vjust = -1, hjust = 0.5, size = 12) +
geom_point(aes(x = data_anuncio, y = 0), color = "darkred", shape = 15, size = 8) +
geom_text(aes(x = data_anuncio, y = 0, label = "Anúncio"), vjust = -1, color = "darkred", size = 12) +
geom_point(aes(x = data_lancamento, y = 0), color = "darkgreen", shape = 15, size = 8) +
geom_text(aes(x = data_lancamento, y = 0, label = "Lançamento"), vjust = -1, color = "darkgreen", size = 12) +
scale_x_date(date_breaks = "6 months", date_labels = "%Y-%m") +
scale_y_continuous(labels = scales::comma, sec.axis = sec_axis(~ . / factor_ajuste, name = "Jogadores Elden Ring")) +
labs(title = "Gráfico de Combinação Games Fromsoftware ",
x = "Mes",
y = "Media de Players",
fill = "Jogo") +
theme_minimal() +
theme( # Editando layout do gráfico
axis.text.x = element_blank(),
panel.grid.major.x = element_line(color = "gray50"),
panel.grid.major.y = element_line(color = "gray50"),
legend.position = "top",
legend.text = element_text(size = 26),
plot.margin = margin(30, 30, 30, 30),
axis.title.x = element_text(size = 26),
axis.text.y = element_text(size = 22),
axis.title.y = element_text(size = 26),
plot.title = element_text(size = 64),
axis.title.y.right = element_text(color = "#007589"),
axis.text.y.right = element_text(color = "#007589")
)
# Criar o gráfico de coluna empilhada com ggplot2
grafico_colunaEmpilhada <- ggplot() +
geom_bar(data = dfOutrosJogos, aes(x = as.Date(paste0(MesAno, "-01")), y = Media_Players, fill = Categoria,
text = paste("Data:", as.Date(paste0(MesAno, "-01")), "Quantidade:", Media_Players, "Game:", Categoria)),
stat = "identity") +
geom_point(aes(x = data_anuncio, y = 0), color = "darkred", shape = 15, size = 1) +
geom_text(aes(x = data_anuncio, y = 0, label = "Anúncio"), vjust = -1, color = "darkred", size = 4) +
geom_point(aes(x = data_lancamento, y = 0), color = "darkgreen", shape = 15, size = 1) +
geom_text(aes(x = data_lancamento, y = 0, label = "Lançamento"), vjust = -1, color = "darkgreen", size = 4) +
scale_x_date(date_breaks = "6 months", date_labels = "%Y-%m") +
labs(title = "Média de Players por Mês nos Games",
x = "Meses",
y = "Média de Players",
fill = "Jogo") +
theme_minimal() +
theme( # Editando layout do gráfico
axis.text.x = element_blank(),
legend.position = "none",
plot.margin = margin(10, 10, 10, 10),
axis.title.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
axis.title.y = element_text(size = 12),
plot.title = element_text(size = 24),
panel.grid.major.x = element_line(color = "gray50"),
panel.grid.major.y = element_line(color = "gray50"),
)
## Warning in geom_bar(data = dfOutrosJogos, aes(x = as.Date(paste0(MesAno, :
## Ignoring unknown aesthetics: text
# Transformar o gráfico em interativo com plotly
grafico_interativoCE <- ggplotly(grafico_colunaEmpilhada, tooltip = "text")
# Definir as dimensões do gráfico interativo
grafico_interativoCE <- grafico_interativoCE %>%
layout(width = 950, height = 550) # Ajustar a largura e a altura
## Warning: Specifying width/height in layout() is now deprecated.
## Please specify in ggplotly() or plot_ly()
# Criar o gráfico de coluna com ggplot2
grafico_Coluna <- ggplot() +
geom_col(data = dfEldenRing, aes(x = as.Date(paste0(MesAno, "-01")), y = Media_Players,
text = paste("Data:", as.Date(paste0(MesAno, "-01")), "<br>Quantidade:", Media_Players)),
color = "#007589") +
scale_x_date(date_breaks = "6 months", date_labels = "%Y-%m") +
scale_y_continuous(labels = scales::label_number(big.mark = ".", decimal.mark = ",")) +
labs(title = "Media de Players por Mes no Elden Ring",
x = "Meses",
y = "Média de Players",
fill = "Jogo") +
theme_minimal() +
theme( # Editando layout do gráfico
axis.text.x = element_blank(),
plot.margin = margin(10, 10, 10, 10),
axis.title.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
axis.title.y = element_text(size = 12),
plot.title = element_text(size = 24),
panel.grid.major.x = element_line(color = "gray50"),
panel.grid.major.y = element_line(color = "gray50")
)
# Transformar o gráfico em interativo com plotly
grafico_interativoCOL <- ggplotly(grafico_Coluna, tooltip = "text")
# Definir as dimensões do gráfico interativo
grafico_interativoCOL <- grafico_interativoCOL %>%
layout(width = 950, height = 550) # Ajustar a largura e a altura
# Criar o gráfico de colunas empilhadas
grafico_colunaEmpilhadaAno <- ggplot(dfPlayers_MediaAnual, aes(x = Ano, y = Media_Anual_Players, fill = Categoria,
text = paste("Ano:", Ano, "<br>Média de Players:", Media_Anual_Players, "<br>Categoria:", Categoria))) +
geom_bar(stat = "identity") +
labs(title = "Média Anual de Players por Categoria",
x = "Ano",
y = "Média de Players",
fill = "Categoria") + # Legenda
theme_minimal() + # Aplicar um tema minimalista
theme(
axis.text.x = element_text(angle = 45, hjust = 1), # Melhorar visualização do eixo X
panel.grid.major.x = element_blank(), # Remover linhas verticais do grid
legend.position = "top" # Legenda no topo
)
# Transformar o gráfico em interativo com plotly
grafico_interativocolunaEmpiAno <- ggplotly(grafico_colunaEmpilhadaAno, tooltip = "text")
# Definir as dimensões do gráfico interativo
grafico_interativocolunaEmpiAno <- grafico_interativocolunaEmpiAno %>%
layout(width = 950, height = 550) # Ajustar a largura e a altura
O gráfico ilustra a média mensal de jogadores começando em abril de 2014 com o lançamento de Dark Souls 2, e se estendendo até fevereiro de 2025. Observamos que os picos de jogadores coincidem com os meses de lançamento dos jogos, destacando o sucesso imediato que esses títulos alcançam. Sekiro, por exemplo, vencedor do The Game Awards de 2019, mostra um aumento significativo na quantidade de jogadores logo após o seu lançamento. Além disso, podemos ver uma consolidação da base de jogadores após alguns meses do anúncio de Elden Ring, indicando um crescente interesse e antecipação pelo novo título.
________________________________________________________________________________________________________________________
O sucesso de Elden Ring é inegável. Sua média de jogadores mensais se
manteve acima de 500 mil jogadores por dois meses consecutivos,
alcançando uma quantidade de jogadores sete vezes maior do que os
títulos anteriores da FromSoftware. Além disso, o lançamento da DLC The
Shadow of Erdtree contribuiu significativamente para um aumento na taxa
de jogadores em junho e julho de 2024, demonstrando a capacidade
contínua do jogo de atrair e manter uma grande base de fãs.
_______________________________________________________________________________________________________________________
O visual aborda a queda no número de jogadores nos outros jogos da
FromSoftware, causada pela migração dos jogadores para Elden Ring. A
escala dos valores dos jogadores no Elden Ring é sete vezes maior do que
a média de jogadores em outros títulos da FromSoftware. Além da migração
dos jogadores já fidelizados, também observamos um crescimento
significativo de novos jogadores, atraídos pela qualidade e fidelidade
constante da FromSoftware.
________________________________________________________________________________________________________________________
O crescimento de players anuais da Fromsoftware ganhou proporções muito
grande após o lançamento do Elden Ring, em 2022 a
Fromsoftware alcançou a marca de 200mil players em sua média anual
enquanto antes do lançamento do Elden Ring não passavam
de uma média 50mil players anuais.
#Editar nome de variáveis para continuar o projeto