Valorant é um jogo tático de tiro em primeira pessoa desenvolvido pela Riot Games que foi lançado oficialmente em 2 de junho de 2020. Possui um estilo parecido com Counter-Strike, é um jogo 5x5, possuindo 2 times, o time atacante e o defensor, o objetivo do time atacante é plantar uma bomba num local determinado, e o do time defensor é impedir o time atacante de cumprir seu objetivo, ou desabilitar a bomba caso plantada, caso um dos times mate completamente os jogadores do outro, também é considerado vitória desse time. Uma partida é dividida em 25 rounds, é sorteado um time e os 12 primeiros rounds esse time fica do lado atacante, enquanto o outro é o defensor, depois é trocado os lados. O primeiro time a fazer 13 pontos, vence.
Um mês após seu lançamento, a Riot Games também lançou uma API Valorant, que foi distribuída apenas para alguns desenvolvedores de produtos e a maioria dos dados não é acessível ao público. No entanto, ainda temos uma maneira de obter dados de partidas oficiais, e isso é graças ao vlr.gg, um site que registra partidas oficiais e estatísticas de jogadores, fazendo o scrapping dos dados em tempo real.
Com esse dataset podemos gerar análises, tanto de jogadores, como de times ou até mesmo de agentes (personagens) do jogo. Gerando um relatório e podendo ser, até mesmo, procurado padrões de agentes em determinadas partidas, ou a correlação entre os agentes e número de mortes, abates, etc.
O conjunto de dados consiste em dados dos resultados da partida e estatísticas do jogador de vlr.gg extraídos em 24 de dezembro de 2021. Os dados de partida mais antigos que puderam ser extraídos com sucesso foram em 14 de junho de 2020. A API original criada pode ser encontrada em https://github.com/axsddlr/vlrggapi, enquanto a versão editada para gerar esse dataset pode ser encontrada em https://github.com/fnurrahmadi/data-science-portfolio/tree/main/vlrgg%20Unofficial%20REST%20API%20-%20updated.
GameID - Identificador único da partida
PlayerID - Identificador único do jogador
PlayerName - Nome do jogador
TeamAbbreviation - Sigla do time ao qual o jogador
pertence
Agent - Agente (personagem) escolhido pelo
jogador naquela partida
ACS - Average Combat Score
(Pontuação média de combate), uma pontuação dada pelo jogo baseado nos
seus combates, quanto maior, melhor
Kills - Número
de vezes que abateou outros jogadores
Deaths -
Número de mortes do jogador
PlusMinus - abates
menos mortes (Saldo)
KAST_Percent - Percentual de
rounds que o jogador abateou, deu assistência, sobreviveu ou “foi
trocado”. (Kill, Assist, Survived or Traded) (“Ser trocado” é o conceito
de assim que o jogador foi morto por alguém, imediatamente outro jogador
matou o inimigo)
ADR - Dano médio por round
(Average Damage per Round)
HS_Percent - Percentagem
de tiros na cabeça (HeadShot)
FirstKills - Número
de rounds da partida o qual o jogador foi responsavel pelo primeiro
abate
FirstDeaths - Número de rounds da partida o
qual o jogador foi o primeiro morto
FKFD_PlusMinus
- FirstKills menos FirstDeaths (Saldo)
Num_2Ks -
Número de rounds o qual o jogador foi responsavel por 2 abates no mesmo
round
Num_3Ks - Número de rounds o qual o jogador
foi responsavel por 3 abates no mesmo round
Num_4Ks
- Número de rounds o qual o jogador foi responsavel por 3 abates no
mesmo round
Num_5Ks - Número de rounds o qual o
jogador foi responsavel por 5 abates no mesmo round
OnevOne - Número de round que o jogador ficou na
situação 1 contra 1 (apenas 2 jogadores vivos, um de cada lado)
OnevTwo - Número de round que o jogador ficou na
situação 1 contra 2 (apenas 3 jogadores vivos, ele contra 2)
OnevThree - Número de round que o jogador ficou na
situação 1 contra 3 ( 4 jogadores vivos, ele contra 3)
OnevFour - Número de round que o jogador ficou na
situação 1 contra 4 ( 5 jogadores vivos, ele contra 4)
OnevFive - Número de round que o jogador ficou na
situação 1 contra 5 ( 6 jogadores vivos, ele contra 5)
Econ - Nota de economia dada automaticamente pelo jogo,
quanto maior melhor
Plants - Número de vezes que o
jogador plantou a spike (bomba)
Defuses - Número de
vezes que o jogador defusou (desativou) a spike (bomba)
library(dplyr)
library(plotly)
library(tidyr)
library(DT)
# Os dados foram tratados e tirados de um SQLITE, possivel encontrar ele na aba "Conteúdo"
df<-drop_na(read.csv("https://raw.githubusercontent.com/MrRodrix/VisaoComputacional2021.1/main/Game_Scoreboard.csv"))
datatable(head(df))
df_grp_region = df %>% group_by(PlayerName) %>%
summarise(mean_ACS = mean(ACS),
total_kills = sum(Kills),
mean_kils = mean(Kills),
total_deaths = sum(Deaths),
mean_deaths = mean(Deaths),
total_assists = sum(Assists),
mean_assists = mean(Assists),
mean_hs = mean(HS_Percent),
.groups = 'drop')
datatable(head(df_grp_region))
df_agents = df %>% group_by(Agent) %>%
summarise(mean_ACS = mean(ACS),
total_kills = sum(Kills),
mean_kils = mean(Kills),
total_deaths = sum(Deaths),
mean_deaths = mean(Deaths),
total_assists = sum(Assists),
mean_assists = mean(Assists),
mean_hs = mean(HS_Percent),
n_games = n(),
.groups = 'drop')
datatable(head(df_agents))
df_teams = df %>% group_by(TeamAbbreviation) %>%
summarise(players = sum(PlayerID),
mean_ACS = mean(ACS),
total_kills = sum(Kills),
mean_kils = mean(Kills),
total_deaths = sum(Deaths),
mean_deaths = mean(Deaths),
total_assists = sum(Assists),
mean_assists = mean(Assists),
mean_hs = mean(HS_Percent),
n_games = n(),
.groups = 'drop')
df_teams['player_count'] = 1
datatable(head(df_teams))
df_agents = df_agents[order(df_agents$mean_ACS, decreasing = T), ]
df_agents['Agent'] = factor(df_agents$Agent, unique(df_agents$Agent))
plot_ly(y=df_agents$mean_ACS, x=df_agents$Agent, type='bar')%>%
layout(title = 'Média de pontuação de combate por agente', plot_bgcolor = "#e5ecf6")
df_agents = df_agents[order(df_agents$mean_kils, decreasing = T), ]
df_agents['Agent'] = factor(df_agents$Agent, unique(df_agents$Agent))
plot_ly(y=df_agents$mean_kils, x=df_agents$Agent, type='bar', name = 'Média de abates por agente')%>%
layout(title = 'Média de abates por agente', plot_bgcolor = "#e5ecf6")
df_agents = df_agents[order(df_agents$mean_deaths, decreasing = T), ]
df_agents['Agent'] = factor(df_agents$Agent, unique(df_agents$Agent))
plot_ly(y=df_agents$mean_deaths, x=df_agents$Agent, type='bar',name = 'Média de mortes por agente')%>%
layout(title = 'Média de pontuação de mortes por agente', plot_bgcolor = "#e5ecf6")
df_agents = df_agents[order(df_agents$mean_assists, decreasing = T), ]
df_agents['Agent'] = factor(df_agents$Agent, unique(df_agents$Agent))
plot_ly(y=df_agents$mean_assists, x=df_agents$Agent, type='bar', name = 'Média de assistências por agente')%>%
layout(title = 'Média de assistencias por agente', plot_bgcolor = "#e5ecf6")
df_agents = df_agents[order(df_agents$mean_hs, decreasing = T), ]
df_agents['Agent'] = factor(df_agents$Agent, unique(df_agents$Agent))
plot_ly(y=df_agents$mean_hs, x=df_agents$Agent, type='bar', name = 'Média de headshots por agente')%>%
layout(title = 'Média de headshots por agente', plot_bgcolor = "#e5ecf6")
plot_ly(values=df_agents$n_games, labels=df_agents$Agent, type='pie', title = 'Uso de agentes em partidas')
Pode-se constatar através dos gráficos a distribuição dos desempenhos
dos jogadores dos times, assim como os desempenhos individuais, além da
escolha de personagens feito pelos jogadores profissionais. Esses dados
puderam ser analisados e obtidos através de uma análise tanto
comparativa quanto descritiva dos dados.
Alguns dados importantes
que foram extraídos, por exemplo, foi o dado que: Mesmo o jogo tendo 16
agentes, a distribuição da escolha dos jogadores profissionais está
focada em 5 principais que concentram 65.88% das escolhas dos
pro-players. Outra análise interessante foi a discrepancia do número de
assistências do agente Kaio para com os demais, isso pode se dar pelo
fato de todas as habilidades do personagem possuirem caracteristicas que
são mais puxadas para a assitência que o abate em si, porém ainda é um
fato interessante pois a Skye, possui somente habilidades de
assistencia, não chegou nesse valor, mas é a mais escolhida dentre os
pro-players.
A análise ficou limitada até o ano de 2021, podendo ser
expandida até os dias atuais, também pode ser enriquecida com dados de
vitórias/perdas de jogos e ou/rodadas, além do uso de quais armas os
jogadores compraram em cada round e como foi sua movimentação no mapa ao
longo do game.