Introducao
Introdução ao problema
A análise foca em avaliar jogadores de futebol no contexto do jogo FIFA 23, utilizando dados sobre suas habilidades, ponteciais e valores de mercado. É abordado como identificar jogadores com um bom custo benefício quando pensamos em performance futura. Isso é relevante para a tomada de decisão no ambito financeiro de montagem de elenco de um time.
Abordagem
Para abordar esse problema, utilizamos dados reais do FIFA 23, que contém informações detalhadas sobre jogadores, como sua nacionalidade, idade, altura, habilidades (ex. precisão no cabeceio), valor de mercado, entre outros. A análise será conduzida em várias etapas:
Preparação e limpeza dos dados para focar nas informações mais relevantes. Análise exploratória para entender a distribuição dos jogadores por países e posições. Criação de uma nova métrica de custo-benefício baseada no potencial e valor de mercado dos jogadores. Visualização dos resultados para encontrar padrões importantes.
Finalidade da análise
A análise ajudará potenciais clientes (como clubes de futebol ou jogadores de FIFA) a tomar decisões informadas sobre investimentos em jogadores. Com a métrica de custo-benefício, eles poderão:
Identificar jogadores com grande potencial de crescimento que estão subvalorizados no mercado. Analisar padrões de desempenho por posição e nacionalidade, auxiliando no recrutamento de talentos. Usar correlações (como altura vs. precisão no cabeceio) para entender melhor quais características impactam diretamente no jogo.
Pacotes usados
Esses são os pacotes utilizados nesse rmarkdown
Preparação de dados
Sobre o dataset
O dataset original se encontra aqui
O dataset original foi criado para fim de análises dos dados do jogo e foi coletado após o lançamento do jogo, em setembro de 2022.
O dataset original conta com 18539 obsservações cada uma com 89 variaveis. Nessas variaveis haviam diversas informações como valores numéricos e strings com links, nomes de times, dentre outros
Carregamento do dataset
É carregado o dataset completo, porém devido ao tamanho do mesmo apenas é mostrado uma parte dele
fifa_dt <- read.csv("Fifa 23 Players Data.csv")
head_fifa <-head(fifa_dt)
datatable(head_fifa, options = list(pageLength = 10, autoWidth = TRUE))
Limpeza de dados
Como mencionado anteriormente, haviam muitas variaveis com informações não tao pertinentes (como link para imagem do clube do jogador, link para a foto do jogador). Além disso, foram removidas múltiplas variáveis de desempenho (como passing, defending etc), algumas foram mantidas para fins de análises
colunas_para_manter <- c(
'Known.As', 'Overall', 'Potential', 'Value.in.Euro.', 'Positions.Played', 'Nationality', 'Age',
'Height.in.cm.', 'Wage.in.Euro.', 'Release.Clause', 'Contract.Until', 'Preferred.Foot','Heading.Accuracy'
)
fifa_reduzido <- fifa_dt %>% select(all_of(colunas_para_manter))
datatable(fifa_reduzido)
Informações dos dados limpos
Análise exploratória de dados
Vamos começar com as analises
Análise por país
Aqui teremos algumas análises no ambito de país
Paises com mais jogadores
Vamos agrupar por nacionalidade para encontrarmos quais são os paises que mais tem jogadores
top_countries <- fifa_reduzido %>%
group_by(Nationality)%>%
summarise(player_count= n()) %>%
arrange(desc(player_count))%>%
slice_head(n=10)
plot_ly(
top_countries,
labels = ~Nationality,
values = ~player_count,
type = 'pie'
) %>%
layout(
title = "Top 10 Países com Mais Jogadores",
xaxis = list(showgrid = FALSE, zeroline = FALSE),
yaxis = list(showgrid = FALSE, zeroline = FALSE),
margin=list(t=100)
)
Paises com melhores jogadores
Vamos pegar a média do Overall do dataset. Após isso, vamos filtrar um dataset que contenha apenas jogadores a cima da média e com isso vamos ranquear os países que tem, em média, os jogadores com mais destaques.
Esses sao os paises com o maior numero de jogadores a cima da média
media_overall <- mean(fifa_reduzido$Overall)
jogadores_acima_media <- fifa_reduzido %>%
filter(Overall>media_overall)
top_paises_acima_media <-jogadores_acima_media%>%
group_by(Nationality)%>%
summarise(qtd_jogadores = n()) %>%
arrange(desc(qtd_jogadores))%>%
slice_head(n=10)
media_por_pais <- jogadores_acima_media %>%
filter(Nationality %in% top_paises_acima_media$Nationality) %>%
group_by(Nationality) %>%
summarise(qtd_jogadores_acima = n(),media_overall_acima = mean(Overall, na.rm = TRUE)) %>%
arrange(desc(media_overall_acima))
plot_ly(media_por_pais %>% arrange(media_overall_acima), x = ~Nationality,y = ~media_overall_acima, type = 'bar',
text = ~round(media_overall_acima, 2), textposition = 'outside',textfont=list(size=10),color = ~Nationality
) %>%
layout(title = "Média de Overall Acima da Média por País",titlefont=list(size=20),xaxis = list(title = "País", showgrid = FALSE),
yaxis = list(title = "Média de Overall",showgrid = TRUE,range = c(65, 74)), margin=list(t=100))
Análise por posição
Jogadores que jogam multiplas posicoes
Aqui é criada uma tabela com todos os jogadores que performam em mais de uma posição
jogadores_varias_posicoes <- fifa_reduzido %>%
filter(sapply(strsplit(Positions.Played, ","), length) > 1)
datatable(jogadores_varias_posicoes)
Número de posições jogadas por jogador
Também é feito um gráfico para melhor entender o quão comum é um jogador ter mais de uma posição de ofício
jogadores_num_posicoes <- fifa_reduzido %>%
mutate(num_posicoes = sapply(strsplit(Positions.Played, ","), length)) %>%
group_by(num_posicoes) %>%
summarise(qtd_jogadores = n())
plot_ly(
jogadores_num_posicoes,
labels = ~num_posicoes,
values = ~qtd_jogadores,
type = 'pie',
textinfo = 'label+percent',
hole = 0.4
) %>%
layout(
title = "Distribuição de Jogadores por Número de Posições Jogadas",
showlegend = TRUE,
margin=list(t=100)
)
Nova Métrica
Criando a nova métrica
Agora iremos criar uma nova métrica que nos auxiliará a escolher um jogador com potencial de estrelato no futuro
fifa_auxiliar <- fifa_reduzido %>%
filter(Value.in.Euro. > 0) %>%
filter(Potential>80)
# Passo 2: Calcular o ratio custo-benefício no dataset auxiliar
fifa_auxiliar <- fifa_auxiliar %>%
mutate(ratio_custo_beneficio = Potential / Value.in.Euro.)
# Passo 3: Normalizar o ratio usando a normalização min-max no dataset auxiliar
# Evitar divisão por zero e valores NA
min_ratio <- min(fifa_auxiliar$ratio_custo_beneficio, na.rm = TRUE)
max_ratio <- max(fifa_auxiliar$ratio_custo_beneficio, na.rm = TRUE)
fifa_auxiliar <- fifa_auxiliar %>%
mutate(ratio_normalizado = (ratio_custo_beneficio - min_ratio) /
(max_ratio - min_ratio))
# Passo 4: Ordenar os jogadores com o melhor custo-benefício no dataset auxiliar
jogadores_bom_custo_beneficio_auxiliar <- fifa_auxiliar %>%
arrange(desc(ratio_normalizado))
# Passo 5: Exibir as primeiras linhas do dataset auxiliar com o ratio normalizado
datatable(jogadores_bom_custo_beneficio_auxiliar %>% select(Known.As,Nationality,Positions.Played, Value.in.Euro., Potential, ratio_custo_beneficio, ratio_normalizado))
Analisando Custo Benefício por Posição
Após a criação dessa métrica, é feita uma análise para entendermos quais são as posições mais custo benefício e quais são as mais caras
fifa_auxiliar <- fifa_auxiliar %>%
mutate(Primeira_Posicao = sapply(strsplit(as.character(Positions.Played), ","), `[`, 1))
custo_beneficio_por_posicao <- fifa_auxiliar %>%
group_by(Primeira_Posicao) %>%
summarise(media_custo_beneficio = mean(ratio_normalizado, na.rm = TRUE)) %>%
arrange(desc(media_custo_beneficio))
plot_ly(
custo_beneficio_por_posicao %>% arrange(media_custo_beneficio),
x = ~Primeira_Posicao,
y = ~media_custo_beneficio,
type = 'bar',
text = ~round(media_custo_beneficio, 2), # Exibir os valores como texto
textposition = 'outside', # Posicionar o texto fora da barra
textfont = list(size = 10), # Tamanho da fonte do texto
color = ~Primeira_Posicao # Diferentes cores para as posições
)%>%
layout(
title = "Custo beneficio medio por posicao",
showlegend = TRUE,
margin=list(t=100)
)
Insights
Os jogadores mais custo benefício por posição
Esse são, em cada posição, os jogadores com o melhor índice, sendo bons candidatos para compra
fifa_auxiliar <- fifa_auxiliar %>%
mutate(Primeira_Posição = sapply(strsplit(as.character(Positions.Played), ","), `[`, 1))
# Passo 2: Selecionar o melhor jogador por posição com o maior ratio_normalizado
melhor_por_posicao <- fifa_auxiliar %>%
group_by(Primeira_Posição) %>%
slice(which.max(ratio_normalizado)) %>%
ungroup() %>%
select(Known.As, Primeira_Posição,Age, Value.in.Euro., Potential, ratio_normalizado, Nationality) %>%
rename(Posicao = Primeira_Posição)
datatable(melhor_por_posicao)
Análise de Custo-Benefício por Faixa Etária
Também vemos qual faixa etaria possui um bom indice, para ajudar na tomada de decisão de compra
fifa_auxiliar <- fifa_auxiliar %>%
mutate(Faixa_Etaria = cut(Age, breaks = c(15, 20, 25, 30, 35, 40), labels = c("15-20", "21-25", "26-30", "31-35", "36-40")))
custo_beneficio_por_faixa_etaria <- fifa_auxiliar %>%
group_by(Faixa_Etaria) %>%
summarise(media_custo_beneficio = mean(ratio_normalizado, na.rm = TRUE)) %>%
arrange(desc(media_custo_beneficio))
plot_ly(
custo_beneficio_por_faixa_etaria,
x = ~Faixa_Etaria,
y = ~media_custo_beneficio,
type = 'bar',
text = ~round(media_custo_beneficio, 2),
textposition = 'outside',
color=~Faixa_Etaria,
textfont = list(size = 10)
) %>%
layout(
title = "Custo-Beneficio Medio por Faixa Etaria",
xaxis = list(title = "Faixa Etaria"),
yaxis = list(title = "Media do Custo-Beneficio"),
margin = list(t = 100)
)
Correlação entre nota de cabeceio e altura
Vemos aqui uma tendência ascendente que sugere que conforme a altura aumenta, a precisao no cabeceio também. Porém, devido à dispersão, podemos inferir que existem outros fatores que influenciam
fifa_auxiliar_correlacao <- fifa_auxiliar %>%
filter(Primeira_Posição != "GK" & !is.na(Heading.Accuracy) & !is.na(Height.in.cm.))
cor_coef <- cor(fifa_auxiliar_correlacao$Height.in.cm., fifa_auxiliar_correlacao$Heading.Accuracy)
plot_ly(
data = fifa_auxiliar_correlacao,
x = ~Height.in.cm.,
y = ~Heading.Accuracy,
type = 'scatter',
mode = 'markers'
) %>%
add_lines(
x = ~Height.in.cm.,
y = fitted(lm(Heading.Accuracy ~ Height.in.cm., data = fifa_auxiliar_correlacao)),
line = list(color = 'red')
) %>%
layout(
title = paste("Correlação entre Precisão no Cabeceio e Altura (r =", round(cor_coef, 2), ")"),
xaxis = list(title = "Altura em cm"),
yaxis = list(title = "Precisão no Cabeceio")
)
Como observado, não existe uma correlação clara entre quão bom uma pessoa é cabeceando e sua altura
Correlação entre Idade e Potencial
Analisando visualmente o gráfico e a linha de tendência, parece haver uma correlação negativa entre a idade e o potencial dos jogadores. Isso significa que, à medida que a idade aumenta, o potencial tende a diminuir levemente. A inclinação negativa da linha indica essa correlação negativa, ainda que a dispersão dos pontos seja significativa, o que sugere que a correlação não é muito forte
plot_ly(fifa_reduzido, x = ~Age, y = ~Potential, type = 'scatter', mode = 'markers') %>%
add_lines(
x = ~Age,
y = fitted(lm(Potential ~ Age, data = fifa_reduzido)),
line = list(color = 'red', width = 2),
name = 'Linha de Tendencia'
) %>%
layout(
title = "Relacao entre Idade e Potencial",
xaxis = list(title = "Idade"),
yaxis = list(title = "Potencial"),
margin = list(t = 100)
)
Conclusões
Declaração do Problema
A análise aborda a relação custo-benefício dos jogadores no FIFA 23. O objetivo principal foi criar uma métrica que permita avaliar quais jogadores oferecem o melhor retorno em termos de potencial de desenvolvimento e valor financeiro. Isso permite identificar futuros talentos a serem explorados pelos clubes.
Metodologia e Dados
Os dados utilizados foram extraídos do dataset ‘Fifa 23 Players Data.csv’. A metodologia incluiu o agrupamento dos jogadores por país, a análise de suas habilidades e potenciais de crescimento, bem como a criação de uma métrica personalizada que relaciona o valor de mercado com o potencial. Utilizamos técnicas de análise descritiva e criação de novos indicadores para fundamentar essa métrica
Insights interessantes
Além da análise exploratoria mais simples, as insights mais valiosas são as da nova métrica calculada. Observamos que, em alguns casos, jogadores subvalorizados podem oferecer um excelente retorno sobre o investimento, principalmente aqueles com grande potencial de desenvolvimento, mas ainda com um valor de mercado relativamente baixo
Implicações para Clientes Potenciais
Para clubes e olheiros, esta análise pode ser útil na hora de decidir quais jogadores contratar, especialmente ao considerar jogadores jovens que ainda não atingiram seu pico de performance. O foco em jogadores com um bom equilíbrio entre preço e potencial pode ajudar a maximizar o retorno sobre o investimento, identificando talentos subvalorizados antes que seu valor de mercado cresça significativamente.
Limitações e melhorias
Uma limitação da análise é que ela depende fortemente dos dados atuais do FIFA 23, o que pode não refletir com precisão as variações futuras no desempenho dos jogadores. Além disso, fatores subjetivos, como adaptabilidade a diferentes estilos de jogo ou ligas, não foram considerados. Uma possível melhoria seria integrar dados de desempenho ao longo de várias temporadas para obter uma visão mais robusta da progressão do jogador.