Contexto

League of Legends (abreviado como LoL) é um jogo eletrônico online gratuito, do gênero MOBA com conceitos de Tower Defense, desenvolvido e publicado pela Riot Games em 2009. No modo mais popular do jogo, em um modo multiplayer no formato 5x5, o objetivo de cada time é destruir o Nexus da equipe adversária, uma construção localizada na base e protegida por outras estruturas.

League of Legends foi bem recebido desde o seu lançamento e sua popularidade cresceu ao decorrer dos anos. Em julho de 2012, foi o jogo para computador mais jogado na América do Norte e Europa em termos de número de horas jogadas.Até janeiro de 2014, mais de 67 milhões de pessoas jogavam League of Legends por mês, 27 milhões por dia e mais de 7,5 milhões durante o horário de pico.

Introdução

“Welcome to Summoner’s Rift”

O modo mais popular do jogo se passa no mapa Summoner’s Rift, onde cada partida dura em média 30 minutos, o time Azul e Vermelho se enfrentam sem chance de empate, dividido em 3 rotas (Topo, Meio e Inferior), o objetivo é destruir o Nexus Inimigo localizado nas extremidades do mapa. Cada partida é única e possui diversas fatores que influenciam na vitória, como diversidade de campões com habilidades únicas, primeira torre destruída, número de abates, wards posionadas (ferramenta de permite visão e controle de mapa), além de objetivos neutros como Dragão e Baron.

Através de uma base de dados de jogos do elo Challenger (classificação dos melhores 0,01% jogadores do servidor), foram analisados dados de uma pespectiva do time azul.

Objetivo Principal

Através da base de dados de partidas do rank Challenger, o foco do estudo será analisar a interferência de vários pequenos objetivos no resultado final da partida.

Objetivos específicos

  1. O primeiro abate influencia no vencedor da partida?

  2. A primeira torre influencia no primeiro dragão?

  3. Existe relação entre Abates e Total de Ouro?

  4. Existe relação entre Wards colocadas e Abates?

  5. Destruir Wards influencia na destruição de Torres?

Carregando base de dados

A base pode ser encontrada através do link: https://www.kaggle.com/gyejr95/league-of-legends-challenger-ranked-games2020?select=Challenger_Ranked_Games.csv e a amostra utilizada é dos jogos do rank Challenger, sendo analisado os jogos de mais alto nível

library(readr)
Challenger <- read_csv("C:/Users/ferna/Desktop/Challenger.csv")
## 
## -- Column specification --------------------------------------------------------
## cols(
##   .default = col_double()
## )
## i Use `spec()` for the full column specifications.
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.2     v purrr   0.3.4
## v tibble  3.0.4     v stringr 1.4.0
## v tidyr   1.1.2     v forcats 0.5.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()

Mudança de tipos de variável

A seguir foram aplicadas mudanças nos tipos das variáveis para trata-las qualitativas para “factor”, além de mudanças em suas nomenclaturas, anteriormente descritas como “0” e “1”, foram postas como texto para uma melhor visualização.

#Alterar tipo de variáveis 
Challenger$blueWins <- as.factor(Challenger$blueWins)
Challenger$blueFirstBlood <- as.factor(Challenger$blueFirstBlood)
Challenger$blueFirstBaron <- as.factor (Challenger$blueFirstBaron)
Challenger$blueFirstTower <- as.factor (Challenger$blueFirstTower)
Challenger$blueFirstDragon <- as.factor (Challenger$blueFirstDragon)
#Alterar nome das variáveis qualitativas
Challenger$blueWins<-gsub(0, "Lose", Challenger$blueWins)
Challenger$blueWins<-gsub(1, "Win", Challenger$blueWins)
Challenger$blueFirstTower<-gsub(0, "Red Tower", Challenger$blueFirstTower)
Challenger$blueFirstTower<-gsub(1, "Blue Tower", Challenger$blueFirstTower)
Challenger$blueFirstBaron<-gsub(0, "Blue Baron", Challenger$blueFirstBaron)
Challenger$blueFirstBaron<-gsub(1, "Red Baron", Challenger$blueFirstBaron)
Challenger$blueFirstBlood<-gsub(0, "No", Challenger$blueFirstBlood)
Challenger$blueFirstBlood<-gsub(1, "Yes", Challenger$blueFirstBlood)
Challenger$blueFirstDragon<-gsub(0, "Red Dragon", Challenger$blueFirstDragon)
Challenger$blueFirstDragon<-gsub(1, "Blue Dragon", Challenger$blueFirstDragon)

Entendendo as variáveis

library(DT) 
datatable(Challenger)
## Warning in instance$preRenderHook(instance): It seems your data is too big
## for client-side DataTables. You may consider server-side processing: https://
## rstudio.github.io/DT/server.html

Vamos observar a seguir algumas peculiaridades em relaçaõ aos objetivos e ao lado de cada mapa.

par(mfrow = c (1, 2))
tabpizza<-table(Challenger$blueWins)
pie(tabpizza)

tab_ft<-table(Challenger$blueFirstTower)
barplot(tab_ft,
        ylim = c(0,15000),
        col = c("#0080FF", "#B40404"))

tab_drag<-table(Challenger$blueFirstDragon)
barplot(tab_drag,
        ylim = c(0,20000),
        col = c("#0080FF", "#B40404"))

tab_baron<-table(Challenger$blueFirstBaron)
barplot(tab_baron,
        ylim = c(0,20000),
        col = c("#0080FF", "#B40404"))

Notamos algumas particularidade em relação à distruição de objetivos pelo mapa. Percebemos que a amostra tem distruições equivalentes de Vitórias e Derrotas, e pouca vantagem do Azul em relação ao vermelho no que diz respeito à destruição da primeira torre. Contudo, notamos uma vantagem mais significante do time Vermelho no que diz respeito ao primeiro Dragão, e uma larga vantagem do Azul no quis respeito ao primeiro Dragão. Isto se deve em função, principalmente, do design do mapa de Summoners Rif’t, que apesar de quase espelhado, a localização e execução se torna mais segura pra um time ou outro.

Relação entre 2 variáveis qualitativas

O primeiro abate influencia no vencedor da partida?

A seguir vamos realizar o teste qui-quadrado de Pearson, para verificar se a hipótese é verdadeira para o caso destas duas variávies qualitativas.

H0: NÃO EXISTE ASSOCIAÇÃO ENTRE AS DUAS VARIÁVEIS

H1: EXISTE ASSOCIAÇÃO

VALOR ESPERADO MAIOR QUE 5

ALPHA = 0,05

SE pvalor <= alpha, rejeito H0

SE pvalor -> alpha, não rejeito H0

teste_qui1 <- chisq.test(Challenger$blueFirstBlood, Challenger$blueWins)
teste_qui1$expected
##                          Challenger$blueWins
## Challenger$blueFirstBlood     Lose      Win
##                       No  6677.507 6679.493
##                       Yes 6772.493 6774.507
options(scipen = 999)
teste_qui1$p.value
## [1] 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003716634

Como observado, os valores esperados são maiores que 5, condição para a utilização do teste de Pearson, então seguimos com o teste e encontramos o pvalor = 0,0000…37, valor menor que o nosso Alpha, ou seja, rejeitamos a hipótese H0, e ficamos com H1, sendo assim, concluímos que existe relação entre as essas 2 variáveis.

A primeira torre influencia no primeiro dragão?

Vamos executar um segundo teste de hipóteses para duas variáveis qualitativas. Neste caso tentaremos verificar se há relação entre destruir a primeira torre e executar o primeiro dragão.

teste_qui2 <- chisq.test(Challenger$blueFirstTower, Challenger$blueFirstDragon)
teste_qui2$expected
##                          Challenger$blueFirstDragon
## Challenger$blueFirstTower Blue Dragon Red Dragon
##                Blue Tower    5745.964   8395.036
##                Red Tower     5186.036   7576.964
teste_qui2$p.value
## [1] 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008085141

Assim como no exemplo anterior, os valores esperados do teste de Pearson são maiores que 5, viabilizando o teste, o pvalor=0,000…808541, valor inferior ao Alpha, ou seja, rejeita-se H0, ficando com H1, confirmando a relação entre as duas variáveis.

Variáveis quantitativas

Algumas variáveis quantitativas são mostradas a seguir.

summary(Challenger$gameDuraton)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     190    1152    1435    1449    1738    3301
summary(Challenger$blueKills)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   15.00   23.00   24.19   32.00   99.00
summary(Challenger$redKills)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0    15.0    23.0    24.1    32.0   102.0
summary(Challenger$blueAssist)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00   20.00   36.00   39.99   53.00  238.00
summary(Challenger$redAssist)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0    20.0    35.0    39.8    53.0   229.0
summary(Challenger$blueTotalGold)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    3704   37191   48104   48169   58657  121920
summary(Challenger$redTotalGold)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    3340   37127   48037   48208   58719  135299

Acima vejos algumas informações estatísticas a respeito de alguns aspectos do jogo. Notamos que em praticamente todos os casos a média se encontra bem próxima da mediana, o que signica que temos poucas presentas de outliers. Também notamos informações importantes acerca dos dados do jogo. Percebemos o tempo médio de jogo é de 1449 segundos, cerca de 24minutos, a média de Abates é 24.1, a média de Assistências é de 39.9, e a média total de Ouro por equipe é de aproximadamente 48k.

Notamos variações muito pequenas nos valores médios do time azul e vermelho, evidenciando mais uma vez o equilíbrio entre as amostras representado no começo deste estudo.

Histograma

Como vimos anteriormente, podemos ver as concentrações de valores estão de acordo com as estatísticas apresentadas anteriormente.

par(mfrow = c (1, 2))
hist(Challenger$gameDuraton,
     main = "Duração do jogo",
     col = "#8A0886",
     sub = "Maior concentração na altura de 1500",
     ylim = c(0,6000),
     xlim = c(0,3000))
hist(Challenger$blueTotalGold,
     col = "#FF8000",
     main = "Gold Total",
     sub = "Maior concentração altura de 50k",
     ylim = c(0,6000))

A seguir reprentada a igualdade das amostras da variável Abates entre os dois times.

par(mfrow = c (1, 2))
hist(Challenger$blueKills,
     main = "Abates Azul",
     col = "#5858FA",
     sub = "")
hist(Challenger$redKills,
     col = "#FE2E64",
     main = "Abates Vermelho",
     sub = "")

Correlação entre duas variáveis quantitativas

Existe relação entre Abates e Total de Ouro?
plot(Challenger$blueTotalGold, Challenger$blueKills,
     col = "#64FE2E",
     pch = 20)
abline(lsfit(Challenger$blueTotalGold, Challenger$blueKills))

cor(Challenger$blueTotalGold, Challenger$blueKills)
## [1] 0.8195338

Notamos pela inclinação da reta que existe uma relação linear positiva forte e que quanto maior o número de abates, maior a quantidade de Ouro, o que é esperado uma vez que os Abates concedem uma quantidade de Ouro dentro do jogo. Também é possível ver o Coeficiente de correlação de 0.819, numa escala que vai de -1 a +1.

Existe relação entre Wards colocadas e Abates?

plot(Challenger$blueWardPlaced, Challenger$blueKills,
     col = "#F781D8",
     pch = 20)
abline(lsfit(Challenger$blueWardPlaced, Challenger$blueKills))

cor(Challenger$blueWardPlaced, Challenger$blueKills)
## [1] 0.1045194

Neste caso, vemos que a reta possui uma inclinação bem modesta, pelo coeficiente de correlação de 0.104 podemos constatar que a relação entre essas duas variáveis é bem fraca. Constatamos que o número de Wards colocadas praticamente não interere na quantitade de abates totais.

Destruir Wards influencia na destruição de Torres?

plot(Challenger$blueTowerKills, Challenger$blueWardkills,
     col = "#A5DF00",
     pch = 20)
abline(lsfit(Challenger$blueTowerKills,Challenger$blueWardkills))

cor(Challenger$blueTowerKills,Challenger$blueWardkills)
## [1] 0.3969612

Notamos que pelo gráfico e pelo coeficiente de 0.39 que existe uma correlação alternada de fraca para moderada. Logo, destruir wards interfere na destruição de torres.

Teste de hipóteses: O impacto na vitória

A seguir veremos como 3 variáveis impactam de maneiras mais ou menos significativas na vitória: Wards colocadas, Abates e Torres destruídas

Challenger %>%
        group_by(blueWins) %>%
        summarize(media=mean(blueWardPlaced, na.rm = T),
                  mediana=median(blueWardPlaced, na.rm = T),
                  desvio_padrao=sd(blueWardPlaced))
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 2 x 4
##   blueWins media mediana desvio_padrao
##   <chr>    <dbl>   <dbl>         <dbl>
## 1 Lose      57.5      57          31.4
## 2 Win       59.8      59          31.3
Challenger %>%
        group_by(blueWins) %>%
        summarize(media=mean(blueKills, na.rm = T),
                  mediana=median(blueKills, na.rm = T),
                  desvio_padrao=sd(blueKills))
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 2 x 4
##   blueWins media mediana desvio_padrao
##   <chr>    <dbl>   <dbl>         <dbl>
## 1 Lose      18.3      16          11.7
## 2 Win       30.1      29          11.4
Challenger %>%
        group_by(blueWins) %>%
        summarize(media=mean(blueTowerKills, na.rm = T),
                  mediana=median(blueTowerKills, na.rm = T),
                  desvio_padrao=sd(blueTowerKills))
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 2 x 4
##   blueWins media mediana desvio_padrao
##   <chr>    <dbl>   <dbl>         <dbl>
## 1 Lose      2.04       2          2.00
## 2 Win       6.75       7          2.65

Observamos um impacto menos signicativo das Wards para a vitória, e uma relevância maior dos Abates e das Torres para este grupo.

Gráficos de Caixa

par(mfrow = c (1, 2))
boxplot(Challenger$blueWardPlaced~Challenger$blueWins,
        col = c("#F79F81", "#088A08"))

boxplot(Challenger$blueKills~Challenger$blueWins,
        col = c("#D7DF01", "#04B4AE"))

Através do uso do boxplot é possível notar de maneira mais clara o impacto que esses atributos tem nos grupo vitorioso. A caixa acima evidencia uma média maior deste atributo em relação ao grupo concorrente.

Teste de Shapiro

shapiro.test(Challenger$blueWardPlaced[0:5000])
## 
##  Shapiro-Wilk normality test
## 
## data:  Challenger$blueWardPlaced[0:5000]
## W = 0.97953, p-value < 0.00000000000000022
shapiro.test(Challenger$blueKills[0:5000])
## 
##  Shapiro-Wilk normality test
## 
## data:  Challenger$blueKills[0:5000]
## W = 0.96474, p-value < 0.00000000000000022
shapiro.test(Challenger$blueTowerKills[0:5000])
## 
##  Shapiro-Wilk normality test
## 
## data:  Challenger$blueTowerKills[0:5000]
## W = 0.92812, p-value < 0.00000000000000022

Foi aplicado o teste de Normalidade de Shapiro nas 3 variáveis quantitativas que usamos anteriormente. Como em todos os casos o pvlor encontrado foi inferior a 0.05, usaremos o teste Wilcox a seguir para analisar essas amostras.

Teste de Wilcoxon

Vitórias x Wards Colocadas
Vitórias x Abates
Vitórias x Torres Destruídas

H0: Os dois tem a mesma distruição

H1: Os dois tem distruições diferentes

alpha: 0.05

Se pvalor menor que alpha, rej H0

Se pvalor maior que alpha, não rej H0

wilcox.test(Challenger$blueWardPlaced~Challenger$blueWins)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  Challenger$blueWardPlaced by Challenger$blueWins
## W = 86153156, p-value = 0.00000000001109
## alternative hypothesis: true location shift is not equal to 0
wilcox.test(Challenger$blueKills~Challenger$blueWins)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  Challenger$blueKills by Challenger$blueWins
## W = 37460292, p-value < 0.00000000000000022
## alternative hypothesis: true location shift is not equal to 0
wilcox.test(Challenger$blueTowerKills~Challenger$blueWins)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  Challenger$blueTowerKills by Challenger$blueWins
## W = 16084341, p-value < 0.00000000000000022
## alternative hypothesis: true location shift is not equal to 0

Como observamos, todas as hipóteses tem rejeitam H0, logo, concluímos que nos 3 casos os grupos Vitória e Derrota tem distruições diferentes.

Conclusão

Observamos diversas variáveis que fazem referências a mini objetivos dentro de um complexo jogo de estratégias. Como é de se imaginar, a grande maioria das variáveis colaboram para o desenvolvimento das demais, haja vista a dominação parcial do mapa, culminando mais facilmente na vitória. Notamos que algumas variáveis tem maior impacto que outras no objetivo final, como é o caso dos “Abates” e outras menos impacto, como é o caso das “Wards”. Além disso, neste estudo focamos predominantemente nos dados do time Azul, pois entendemos que apenas as variáveis “Primeiro Baron” e “Primeiro Dragon” tinham impacto signativo entre os times Azul e Vermelho, enquanto as demais apresentam desempenho semelhante, sem prejuízos para os resultados do estudo.