Estudo sobre os stats do EA FC 24

Leonardo Viana

2024-01-26

Etapas de desenvolvimento

Os dados a seguir foram obtidos através deste link do kaggle

Obtenção dos dados

Por que realizar esse estudo? O que eu preciso para analisar esses dados?

Introdução

Por que analisar esses dados? A análise detalhada dos atributos estatísticos dos jogadores do EA FC 24 revela-se fundamental para identificar e compreender a performance de cada atleta no jogo. Esses stats são indicadores-chave que refletem as habilidades e características individuais de cada jogador, influenciando diretamente seu desempenho em campo.

Ao explorar os dados provenientes do conjunto fornecido pelo Kaggle, é possível extrair insights valiosos sobre quem são os melhores jogadores, quais características específicas contribuem para seu destaque e como esses atributos variam entre diferentes atletas. Desde habilidades técnicas, como dribles e chutes precisos, até atributos físicos, como velocidade e resistência, cada stat desempenha um papel crucial no desempenho global do jogador.

Esta análise oferece uma visão aprofundada das nuances do desempenho dos jogadores, permitindo aos entusiastas e estrategistas do jogo tomar decisões informadas ao montar equipes ou desenvolver estratégias de jogo. Ao compreender a variação nos stats, os jogadores podem ajustar suas táticas de acordo com as necessidades específicas de cada partida, maximizando suas chances de sucesso.

Em resumo, a análise dos stats dos jogadores do EA FC 24 não apenas destaca os melhores atletas, mas também proporciona uma compreensão abrangente das características individuais que definem o sucesso em campo. Essa abordagem analítica é essencial para jogadores, treinadores e entusiastas que buscam elevar seu desempenho no jogo e explorar as complexidades que tornam cada partida única.

Apesar da mesma nota, não são o mesmo jogador

Pode parecer intuitivo calcular uma média dos números abaixo do nome do jogador para determinar sua nota, certo? Na realidade, jogadores com a mesma nota, como Marcus Rashford e Jack Grealish (ambos com nota 85), podem ter características bastante distintas. Existem atributos que formam esses números (nesse estudo chamaremos de “stats”).

Marcus Rashford (Man Utd) Jack Grealish (Man City)

Diferença nos Stats: Ambos possuem a mesma nota, mas uma análise detalhada revela diferenças significativas em atributos específicos que influenciam seu desempenho em campo.

Em casos como Vini Jr. e Neymar Jr., mesmo com stats de finalização semelhantes, é crucial considerar que certos stats, como Cobrança de Falta e Pênaltis, podem impactar a pontuação geral de maneiras distintas.

Vini Jr. (Real Madrid) Neymar Jr. (Al Hilal)

Pacotes utilizados

Pacote Utilização
library(rmdformats) fornece o formato de R Markdown utilizado nesse relatório
library(knitr) para geração de tabelas
library(DT) para criação das tabelas interativas
library(dplyr) para manipulação avançada dos DataFrames
library(readr) para melhor leitura do arquivo .csv de dados
library(stringr) para manipulação avançada de strings

Os pacotes podem ser instalados através dos seguintes códigos:

install.packages("rmdformats")
install.packages("knitr")
install.packages("DT")
install.packages("dplyr")
install.packages("readr")
install.packages("stringr")

Preparação dos dados

Manipulações necessárias no data set original, para que o estudo pudesse ser realizado de maneira mais precisa.

Correção de acentos no arquivo original

Nomes dos jogadores: Por existirem diversos jogadores de diversas nacionalidades, existem muitos acentos dos diferentes alfabetos, foi necessário corrigir padrão por padrão, para manter o nome dos jogadores certos.

dados_fifa <- read_csv("C:/Users/lsvfi/Documents/R/Scripts/player_stats.csv", quote = "\"", locale = locale(encoding = "latin1"))

# Correção dos acentos jogadores
dados_fifa$player <- str_replace_all(dados_fifa$player, "á", "á")
dados_fifa$player <- str_replace_all(dados_fifa$player, "é", "é")
dados_fifa$player <- str_replace_all(dados_fifa$player, "í", "í")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ó", "ó")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ú", "ú")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ä", "ä")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ë", "ë")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ï", "ï")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ö", "ö")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ü", "ü")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ğ", "ğ")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ã", "ã")
dados_fifa$player <- str_replace_all(dados_fifa$player, "æ", "æ")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ą", "ą")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ø", "ø")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Á", "Á")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ć", "ć")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Å ", "Š")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Å¡", "š")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Ã¥", "å")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Ö", "Ö")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ñ", "ñ")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Ș", "Ș")
dados_fifa$player <- str_replace_all(dados_fifa$player, "â", "â")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ț", "ț")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Ó", "Ó")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ă", "ă")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ș", "ș")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Ç", "Ç")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ı", "ı")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ç", "ç")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ð", "ð")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ß", "ß")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ž", "ž")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ş", "ş")
dados_fifa$player <- str_replace_all(dados_fifa$player, "č", "č")
dados_fifa$player <- str_replace_all(dados_fifa$player, "É", "É")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ô", "ô")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ł", "ł")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ę", "ę")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Ø", "Ø")
dados_fifa$player <- str_replace_all(dados_fifa$player, "î", "î")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ń", "ń")
dados_fifa$player <- str_replace_all(dados_fifa$player, "İ", "İ")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Ć", "Ć")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ř", "ř")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Č", "Č")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Ã", "à")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ě", "ě")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Ł", "Ł")
dados_fifa$player <- str_replace_all(dados_fifa$player, "à²", "ò")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ź", "ź")
dados_fifa$player <- str_replace_all(dados_fifa$player, "ś", "ś")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Ž", "Ž")
dados_fifa$player <- str_replace_all(dados_fifa$player, "à€", "À")
dados_fifa$player <- str_replace_all(dados_fifa$player, "à¨", "è")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Ş", "Ş")
dados_fifa$player <- str_replace_all(dados_fifa$player, "à½", "ý")
dados_fifa$player <- str_replace_all(dados_fifa$player, "Ț", "Ț")

Nomes dos times: O mesmo foi necessário com o nome dos clubes, para evitar erros.

# Correção dos acentos times
dados_fifa$club <- str_replace_all(dados_fifa$club, "á", "á")
dados_fifa$club <- str_replace_all(dados_fifa$club, "é", "é")
dados_fifa$club <- str_replace_all(dados_fifa$club, "í", "í")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ó", "ó")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ú", "ú")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ä", "ä")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ë", "ë")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ï", "ï")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ö", "ö")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ü", "ü")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ğ", "ğ")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ã", "ã")
dados_fifa$club <- str_replace_all(dados_fifa$club, "æ", "æ")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ą", "ą")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ø", "ø")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Á", "Á")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ć", "ć")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Å ", "Š")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Å¡", "š")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Ã¥", "å")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Ö", "Ö")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ñ", "ñ")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Ș", "Ș")
dados_fifa$club <- str_replace_all(dados_fifa$club, "â", "â")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ț", "ț")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Ó", "Ó")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ă", "ă")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ș", "ș")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Ç", "Ç")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ı", "ı")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ç", "ç")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ð", "ð")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ß", "ß")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ž", "ž")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ş", "ş")
dados_fifa$club <- str_replace_all(dados_fifa$club, "č", "č")
dados_fifa$club <- str_replace_all(dados_fifa$club, "É", "É")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ô", "ô")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ł", "ł")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ę", "ę")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Ø", "Ø")
dados_fifa$club <- str_replace_all(dados_fifa$club, "î", "î")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ń", "ń")
dados_fifa$club <- str_replace_all(dados_fifa$club, "İ", "İ")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Ć", "Ć")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ř", "ř")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Č", "Č")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Ã", "à")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ě", "ě")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Ł", "Ł")
dados_fifa$club <- str_replace_all(dados_fifa$club, "à²", "ò")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ź", "ź")
dados_fifa$club <- str_replace_all(dados_fifa$club, "ś", "ś")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Ž", "Ž")
dados_fifa$club <- str_replace_all(dados_fifa$club, "à€", "À")
dados_fifa$club <- str_replace_all(dados_fifa$club, "à¨", "è")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Ş", "Ş")
dados_fifa$club <- str_replace_all(dados_fifa$club, "à½", "ý")
dados_fifa$club <- str_replace_all(dados_fifa$club, "Ț", "Ț")

Alturas e pesos no formato brasileiro

Passando as alturas e pesos pro formato brasileiro: Foi necessário formatar as alturas (anteriormente em cm) e os pesos (sem representação de kg), para o padrão brasileiro, facilitando o estudo.

# Formatacao das alturas para metros e com ponto

# Converter altura para metros e centímetros
dados_fifa$altura_m <- dados_fifa$height / 100

# Formatar altura como "1.92m"
dados_fifa$altura_m <- sprintf("%.2f m", dados_fifa$altura_m)

# Formatar peso como "87 kg"
dados_fifa$peso_kg <- sprintf("%.0f kg", dados_fifa$weight)

Removendo jogadores duplicados

Jogadores aparecendo 2 vezes na tabela: Alguns jogadores estavam com seus stats replicados, foi necessário remover essas ocorrências.

# Remover duplicatas com base na coluna "player"
dados_fifa <- dados_fifa %>%
  distinct(player, .keep_all = TRUE)

Criação de novas colunas e tabelas

Juntar os stats para escolher os melhores jogadores ou goleiros, com a junção de vários stats, tiramos uma média para jogadores em 5 novas colunas: Ofensivo, Habilidade, Movimentação, Força e Mentalidade.

Com esses stats, poderemos posteriormente filtrar para criar qualquer tabela com jogadores…

# Calcular as médias para cada categoria e arredondar para inteiros
dados_fifa$ofensivo <- round(rowMeans(dados_fifa[, c("crossing", "finishing", "heading", "short_pass", "volleys")]))
dados_fifa$habilidade <- round(rowMeans(dados_fifa[, c("dribbling", "curve", "fk_acc", "long_pass", "ball_control")]))
dados_fifa$movimentacao <- round(rowMeans(dados_fifa[, c("acceleration", "sprint_speed", "agility", "reactions", "balance")]))
dados_fifa$forca <- round(rowMeans(dados_fifa[, c("shot_power", "jumping", "stamina", "strength", "long_shots")]))
dados_fifa$mentalidade <- round(rowMeans(dados_fifa[, c("aggression", "interceptions", "att_position", "vision", "penalties", "composure")]))

Já para os goleiros, o ideal foi criar uma nova tabela apenas com os goleiros, para definir os melhores, os stats definidos foram:

# Filtrar jogadores com atributos de goleiro, para encontrar os goleiros
goleiros <- dados_fifa %>%
  filter(gk_diving >= 50, gk_handling >= 50, gk_positioning >= 50, gk_kicking >= 50, gk_reflexes >= 50)

# Criar colunas com os tats de goleiro e arredondar para inteiros
goleiros$elasticidade_gl <- round(rowMeans(goleiros[, c("gk_diving")]))
goleiros$manejo_gl <- round(rowMeans(goleiros[, c("gk_handling")]))
goleiros$chute_gl <- round(rowMeans(goleiros[, c("gk_kicking")]))
goleiros$posicionamento_gl <- round(rowMeans(goleiros[, c("gk_positioning")]))
goleiros$reflexos_gl <- round(rowMeans(goleiros[, c("gk_reflexes")]))

Estudo nos jogadores

Agora com todos os dados formatados, podemos pegar os jogadores que desejamos analisar.

Como gerar as tabelas

Com o código abaixo, podemos filtrar os jogadores com base em stats, para definirmos uma régua:

# Selecionar apenas as colunas desejadas
colunas_desejadas <- c("player", "country", "club", "age","altura_m", "peso_kg","ofensivo", "habilidade", "movimentacao", "forca", "mentalidade", "value")

# Filtrar jogadores com médias para BONS atacantes
jogadores_desejados <- dados_fifa %>%
  filter(
    ofensivo > 50,     # Alterar com base no tipo de jogador desejado
    habilidade > 50,   # Alterar com base no tipo de jogador desejado
    movimentacao > 50, # Alterar com base no tipo de jogador desejado
    forca > 50,        # Alterar com base no tipo de jogador desejado
    mentalidade > 50   # Alterar com base no tipo de jogador desejado
  ) %>%
  arrange(desc(value))

# Criar a tabela interativa com o pacote DT usando apenas as colunas desejadas
datatable(
  jogadores_desejados[colunas_desejadas],
  options = list(
    pageLength = 20,
    width = "100%",  # Define a largura da tabela
    scrollX = TRUE  # Adiciona uma barra de rolagem horizontal
  )
)

Melhores goleiros

Os melhores goleiros do EA FC 24:

Conseguimos obter esses jogadores através do seguinte filtro:

# Filtrar goleiros com médias para BONS goleiros
jogadores_desejados <- goleiros %>%
  filter(
    elasticidade_gl > 77,
    manejo_gl > 75,
    chute_gl > 70,
    posicionamento_gl > 75,
    reflexos_gl > 75
  ) %>%
  arrange(desc(value))

Melhores atacantes

Os melhores atacantes do EA FC 24:

Conseguimos obter esses jogadores através do seguinte filtro:

# Filtrar jogadores com médias para BONS atacantes
jogadores_desejados <- dados_fifa %>%
  filter(
    ofensivo > 75,
    habilidade > 70,
    movimentacao > 80,
    forca > 65,
    mentalidade > 60
  ) %>%
  arrange(desc(value))

Atacantes Brasileiros

Os melhores atacantes brasileiros do EA FC 24: Filtrando apenas os jogadores que possuem stats bons para atacantes.

Com isso, temos os melhores atacantes brasileiros do jogo, certo? Não! O Renan Lodi aparece em 9º nesta análise, apesar de ser Lateral Esquerdo (LE), ou seja, os stats não descrevem diretamente o que EXATAMENTE um jogador poderá realizar dentro do jogo, por isso as características são tão importantes!

Renan Lodi (OM)
Renan Lodi (OM)

Conclusão

Conclusão do estudo

Após os exemplos apresentados, fica evidente que é viável extrair informações relevantes sobre os jogadores, embora ainda existam exceções e detalhes que requerem testes dentro do jogo para entender como cada estatística influencia sua performance.

A determinação dos melhores jogadores não pode ser baseada exclusivamente em estatísticas, pois cada usuário possui um estilo de jogo único e suas preferências individuais influenciam na escolha dos jogadores, seja por sua velocidade, força, altura ou outras características.

Como os usuários podem utilizar esse estudo?

Com os filtros disponíveis, os usuários podem selecionar jogadores com características que se alinham ao seu estilo de jogo e montar times mais eficientes. No entanto, é importante ressaltar que testes práticos dentro do jogo são necessários para validar a performance dos jogadores selecionados.

Esta abordagem permite aos usuários tomar decisões mais informadas ao montar suas equipes, considerando não apenas estatísticas, mas também suas próprias preferências e experiências pessoais no jogo.