Projeto - Introdução a Ciência de Dados no R

Larryan Tavares de Souza Firmo Fideles e Pedro Henrique Rodrigues Mendes

Análise dos Fatores Determinantes no Desempenho das Equipes na UEFA Champions League (2003-2023)

Introdução

O presente trabalho busca analisar o desempenho das equipes participantes na UEFA Champions League no período de 2003 a 2023. A Champions league é a competição de clubes mais relevante do futebol mundial, onde os melhores clubes da Europa se enfrentam para disputar o título de campeão. A base de dados explorada fornece informações de 20 anos de história da competição e diversas características dos confrontos ocorridos ao longo do tempo. O intuito da análise é explorar as variáveis, tentando entender o desempenho das equipes e os fatores que mais impactam nos resultados dos jogos.

Pacotes utilizados

  • Manipulação: tidyverse

  • Plotagem: ggplot2

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readr)

Metodologia

A metodologia empregada neste estudo fundamentou-se na utilização de dados fornecidos pelo site basedosdados.org, uma instituição nacional que disponibiliza informações e conjuntos de dados de diversas áreas e organizados pelo Transfermarket, uma instituição internacional que disponibiliza informações e sobre futebol. O objetivo é universalizar o acesso a dados de qualidade e promover o avanço do conhecimento. Para que a análise fosse feita foi usado o software de programação R, largamente utilizado na análise de dados, este permitiu o processamento, vizualização e todas as etapas necessárias à análise dos dados apresentados.

Base de dados Utilizada

champions_league <- read_csv("champions_league.csv")
Rows: 2491 Columns: 55
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr   (8): fase, tipo_fase, estadio, arbitro, time_mandante, time_visitante,...
dbl  (40): publico, publico_max, idade_tecnico_mandante, idade_tecnico_visit...
num   (1): temporada
date  (5): data, data_inicio_tecnico_mandante, data_inicio_tecnico_visitante...
time  (1): horario

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
champions_league
# A tibble: 2,491 × 55
   temporada data       horario fase           tipo_fase estadio arbitro publico
       <dbl> <date>     <time>  <chr>          <chr>     <chr>   <chr>     <dbl>
 1  20032004 2003-12-02 15:45   Fase De Grupos Grupo D   SIGNAL… Kim Mi…   66000
 2  20032004 2003-09-30 15:45   Fase De Grupos Grupo D   Atatür… Herber…   40000
 3  20032004 2003-10-21 15:45   Fase De Grupos Grupo D   Atatür… Urs Me…   45000
 4  20032004 2003-11-05 15:45   Fase De Grupos Grupo C   Philip… Konrad…   28000
 5  20032004 2003-12-10 15:45   Fase De Grupos Grupo C   Philip… Pierlu…   28000
 6  20032004 2003-09-17 15:45   Fase De Grupos Grupo C   Philip… Steve …   27500
 7  20032004 2004-05-26 15:45   Final          Jogo Úni… Veltin… Kim Mi…   53040
 8  20032004 2004-03-10 15:45   Oitavas De Fi… Oitavas … Stade … Lucíli…   15000
 9  20032004 2003-11-25 15:45   Fase De Grupos Grupo C   Stade … Zeljko…   17000
10  20032004 2004-04-20 15:45   Semi-Finais    Semi-Fin… Stade … Urs Me…   18500
# ℹ 2,481 more rows
# ℹ 47 more variables: publico_max <dbl>, time_mandante <chr>,
#   time_visitante <chr>, tecnico_mandante <chr>, tecnico_visitante <chr>,
#   idade_tecnico_mandante <dbl>, idade_tecnico_visitante <dbl>,
#   data_inicio_tecnico_mandante <date>, data_inicio_tecnico_visitante <date>,
#   data_final_tecnico_mandante <date>, data_final_tecnico_visitante <date>,
#   proporcao_sucesso_mandante <dbl>, proporcao_sucesso_visitante <dbl>, …

Dicionário dos dados:

temporada - Anos da temporada do campeonato data - Data da partida
horario - Horário da partida
fase - Fase do campeonato
tipo_fase - Tipo de jogo na fase
estadio - Estádio
arbitro - Árbitro
publico - Público presente
publico_max - Público máximo
time_mandante - Time mandante
time_visitante - Time visitante tecnico_mandante Técnico do time mandante tecnico_visitante - Técnico do time visitante
idade_tecnico_mandante - Idade do técnico mandante
idade_tecnico_visitante - Idade do técnico visitante
data_inicio_tecnico_mandante - Data início do contrato data_inicio_tecnico_visitante - Data início do contrato técnico visitante
data_final_tecnico_mandante - Data final do contrato técnico mandante
data_final_tecnico_visitante - Data final do contrato proporcao_sucesso_mandante - Proporção de sucesso por jogos mandante
proporcao_sucesso_visitante - Proporção de sucesso por jogos visitante
valor_equipe_titular_mandante - Valor de mercado total mandante valor_equipe_titular_visitante - Valor de mercado total visitante
valor_medio_equipe_titular_mandante - Valor de compra do time mandante
valor_medio_equipe_titular_visitante - Valor de compra do time visitante
convocacao_selecao_principal_mandante - Número de jogadores na seleção do time mandante convocacao_selecao_principal_visitante - Número de jogadores na seleção do time visitante
selecao_juniores_mandante - Número de jogadores do juniores do time mandante
selecao_juniores_visitante - Número de jogadores do juniores do time visitante
estrangeiros_mandante - Número de jogadores estrangeiros do time mandante
estrangeiros_visitante - Número de jogadores estrangeiros do time visitante socios_mandante - Número de sócios ao time mandante socios_visitante - Número de sócios ao time visitante
idade_media_titular_mandante - Idade média da equipe titular do time mandante
idade_media_titular_visitante - Idade média da equipe titular do time visitante gols_mandante - Gols do time mandante
gols_visitante - Gols do time visitante prorrogacao - Indicador se o jogo foi vencido na
penalti - Indicador se o jogo foi vencido nos pênaltis gols_1_tempo_mandante - Gols no primeiro tempo do time mandante gols_1_tempo_visitante - Gols no primeiro tempo do time visitante
escanteios_mandante - Escanteios do time mandante
escanteios_visitante - Escanteios do time visitante faltas_mandante - Faltas feitas pelo time mandante
faltas_visitante - Faltas feitas pelo time visitante
chutes_bola_parada_mandante - Chutes de bola parada do time mandante
chutes_bola_parada_visitante - Chutes de bola parada do time visitante
defesas_mandante - Defesas do time mandante defesas_visitante - Defesas do time visitante
impedimentos_mandante - Impedimentos do time mandante
impedimentos_visitante - Impedimentos do time visitante chutes_mandante - Chutes do time mandante
chutes_visitante - Chutes do time visitante chutes_fora_mandante - Chutes fora do time mandante chutes_fora_visitante - Chutes fora do time visitante

Distribuição de resultados dos times com mando de campo

# Criar a coluna resultado_jogo com base nas condições
champions_league1 <- champions_league %>%
  mutate(resultado_jogo = case_when(
    gols_mandante > gols_visitante ~ "Vitória",
    gols_mandante < gols_visitante ~ "Derrota",
    gols_mandante == gols_visitante ~ "Empate"
  ))

#porcentagem de vitorias, empates e derrotas de mandantes


# Calcular as contagens de cada resultado
contagem_resultados <- champions_league1 %>%
  count(resultado_jogo) %>%
  mutate(proporcao = n / sum(n) * 100)

# Criar o gráfico de barras
ggplot(contagem_resultados, aes(x = resultado_jogo, y = proporcao, fill = resultado_jogo)) +
  geom_col() +
  labs(title = "Distribuição de Resultados dos Mandantes",
       x = "Resultado do Jogo",
       y = "Porcentagem",
       fill = "Resultado") +
  scale_fill_manual(values = c("Vitória" = "green", "Empate" = "gray", "Derrota" = "red")) +  # Definir cores
  theme_minimal()

#Calculando o total de gols marcados pelos mandantes

total_gols_mandante <- sum(champions_league$gols_mandante)

# Calculando o total de gols marcados pelos visitantes
total_gols_visitante <- sum(champions_league$gols_visitante)

# Calculando o total de gols marcados (somando mandante e visitante)
total_gols <- total_gols_mandante + total_gols_visitante

# Calculando a proporção de gols marcados pelos mandantes em relação ao total
proporcao_gols_mandantes <- total_gols_mandante / total_gols

porcent_mandantes <- proporcao_gols_mandantes*100


porcent_mandantes %>% knitr::kable(col.names = "Porcentagem de Gols Marcados por Mandantes")
Porcentagem de Gols Marcados por Mandantes
57.24157

Observa-se que a distribuição de resultados favorece os times mandantes, com uma porcentagem maior de vitórias quando os times jogam em casa, além os times mandantes possuem uma maior porcentagem de gols marcados. Esta tendência sugere uma vantagem para os times que possuem o mando de campo, seja por possíveis fatores ligados à proximidade com a torcida, prcoporcionando um ambiente mais favorável e motivador, ou pela familiaridade e adaptação ao campo jogado, que podem conferir uma sensação de conforto e confiança aos jogadores mandantes. Esses aspectos, combinados, podem influenciar positivamente o desempenho dos times mandantes e contribuir para a maior frequência de vitórias em seus jogos em casa.

Análise da disparidade financeira

#criar indice de vantagem financeira da mandante

champions_league1 <- champions_league1 %>% mutate(indice_financeiro = valor_equipe_titular_mandante/valor_equipe_titular_visitante)

#criar uma dummy de vantagem financeira
#caso 1 o time mandante tem vantagem financeira e portanto seu indice é maior que 1
champions_league1 <- champions_league1 %>%
  mutate(vantagem_financeira_dummy = if_else(indice_financeiro > 1, 1, 0))

#análise boxplot

ggplot(champions_league1, aes(x = as.factor(vantagem_financeira_dummy), y = gols_mandante)) +
  geom_boxplot() +
  labs(x = "Vantagem Financeira",
       y = "Gols Marcados",
       title = "Distribuição de Gols Marcados por Vantagem Financeira")

Para investigar a possível relação entre a disparidade financeira entre as equipes e seu desempenho, utilizamos um índice de vantagem financeira. Esse índice comparou os valores de mercado dos times mandantes com os dos visitantes, identificando assim as equipes que apresentavam alguma vantagem financeira. No entanto, é importante ressaltar que essa análise não garante uma relação direta de causa e efeito entre a vantagem financeira e o desempenho na liga. Através da representação gráfica dos dados por meio de um box plot, observamos que os times com vantagem financeira tendem a se distribuir majoritariamente acima daqueles com desvantagem. Isso sugere a possibilidade de que equipes com maiores recursos financeiros possam ter um desempenho ligeiramente melhor, mas outras variáveis podem influenciar significativamente esse resultado. Portanto, é necessário considerar outros fatores contextuais antes de concluir sobre a relação entre vantagem financeira e desempenho na liga.

Análise das idades das equipes mandantes

# Criar a coluna resultado_jogo com base nas condições
champions_league1 <- champions_league1 %>%
  mutate(resultado_jogo = case_when(
    gols_mandante > gols_visitante ~ "Vitória",
    gols_mandante < gols_visitante ~ "Derrota",
    gols_mandante == gols_visitante ~ "Empate"
  ))


#análise das idades das equipes

# Calcular a mediana
mediana_idade <- median(champions_league1$idade_media_titular_mandante, na.rm = TRUE)

# Calcular a média
media_idade <- mean(champions_league1$idade_media_titular_mandante, na.rm = TRUE)


# Calcular a mediana da idade média dos titulares
mediana_idade <- median(champions_league1$idade_media_titular_mandante, na.rm = TRUE)

# Criar uma nova variável indicando se o time está acima ou abaixo da mediana
champions_league1 <- champions_league1 %>%
  mutate(acima_mediana = ifelse(idade_media_titular_mandante > mediana_idade, "Acima", "Abaixo"))

# Calcular o número de vitórias para cada grupo
desempenho <- champions_league1 %>%
  group_by(acima_mediana) %>%
  summarise(numero_vitorias = sum(resultado_jogo == "Vitória"))

# Criar um gráfico de barras para comparar o número de vitórias
ggplot(desempenho, aes(x = acima_mediana, y = numero_vitorias, fill = acima_mediana)) +
  geom_bar(stat = "identity") +
  labs(title = "Número de Vitórias Idade",
       x = "Grupo (Acima ou Abaixo da Mediana)",
       y = "Número de Vitórias") +
  theme_minimal()

Por meio da base de dados, conduzimos uma análise simples para investigar se há alguma relação entre as idades dos times e o número de vitórias. Utilizando a mediana como uma medida de tendência central, comparamos os times que estão acima ou abaixo da mediana em termos de idade e examinamos seus respectivos números de vitórias. Essa abordagem nos permite realizar uma análise exploratória dos dados, visando entender se existe alguma associação entre a idade das equipes e seu desempenho na competição, sem aprofundar em correlação ou causalidade.

Com base no gráfico gerado, observamos que times com idade acima da mediana tendem a apresentar um maior número de vitórias. Essa tendência sugere que a experiência possa ser um fator determinante para o sucesso das equipes, embora outros aspectos também possam influenciar o desempenho durante a competição.

Convocações das equipes mandantes

# analisar convocação


# Calcular os percentis do número de jogadores convocados
percentis_convocados <- quantile(champions_league1$convocacao_selecao_principal_mandante, na.rm = TRUE)

# Dividir os times em grupos com base nos percentis
champions_league2 <- champions_league1 %>%
  mutate(grupo_convocados = cut(convocacao_selecao_principal_mandante, breaks = percentis_convocados, labels = FALSE))

# Calcular as estatísticas descritivas do número de vitórias para cada grupo
estatisticas_vitorias <- champions_league2 %>%
  group_by(grupo_convocados) %>%
  summarise(media_vitorias = mean(resultado_jogo == "Vitória", na.rm = TRUE),
            mediana_vitorias = median(resultado_jogo == "Vitória", na.rm = TRUE))

# Calcular as estatísticas descritivas do número total de vitórias para cada grupo
estatisticas_vitorias_totais <- champions_league2 %>%
  group_by(grupo_convocados) %>%
  summarise(total_vitorias = sum(resultado_jogo == "Vitória", na.rm = TRUE))

# Visualizar as estatísticas descritivas
estatisticas_vitorias_totais
# A tibble: 5 × 2
  grupo_convocados total_vitorias
             <int>          <int>
1                1            225
2                2            267
3                3            351
4                4            326
5               NA             23
# Gráfico de barras para o número total de vitórias por grupo
ggplot(estatisticas_vitorias_totais, aes(x = grupo_convocados, y = total_vitorias)) +
  geom_bar(stat = "identity", fill = "skyblue") +
  labs(title = "Número Total de Vitórias por Quartis de Jogadores Convocados",
       x = "Quartis Jogadores Convocados",
       y = "Número Total de Vitórias") +
  theme_minimal()
Warning: Removed 1 row containing missing values or values outside the scale range
(`geom_bar()`).

Nosso objetivo é entender se equipes com um maior número de jogadores convocados para seleções nacionais têm um desempenho superior em termos de média de vitórias em partidas em casa. Para isso, classificamos os times em grupos com base na quantidade de jogadores convocados, sendo um grupo representativo dos 25% menores valores, outro dos valores entre 25% e 50%, outro entre 50% e 75%, e o último dos 25% maiores valores. Descobrimos que, nos grupos com mais jogadores convocados, as equipes tendem a uma maior média de vitórias nas partidas em casa. Essa relação sugere que a presença de jogadores convocados pode influenciar positivamente o desempenho das equipes

No entanto, é importante ressaltar que essa relação é complexa. Times mais vencedores podem atrair jogadores de maior qualidade, os quais, por sua vez, são mais propensos a serem convocados para suas seleções nacionais.

Gols no primeiro tempo e distribuição de vitórias

#fazer gols no primeiro tempo influencia na vitória??

# Criar variável dummy para indicar se o gol foi marcado no primeiro tempo
champions_league1 <- champions_league1 %>%
  mutate(gol_primeiro_tempo_dummy = ifelse(gols_1_tempo_mandante > 0, 1, 0))

# Análise de barplot para vitórias por gol no primeiro tempo
ggplot(champions_league1, aes(x = as.factor(gol_primeiro_tempo_dummy), fill = resultado_jogo)) +
  geom_bar(position = "dodge") +
  labs(x = "Gol no Primeiro Tempo",
       y = "Total de Jogos",
       fill = "Resultado do Jogo",
       title = "Distribuição de Vitórias por Gol no Primeiro Tempo")

Podemos analisar se os gols marcados no primeiro tempo têm alguma influência na vitória. De acordo com o gráfico, observamos uma maior quantidade de vitórias para equipes mandantes que marcam gols no primeiro tempo. Isso sugere que os gols iniciais podem influenciar positivamente o resultado final das partidas. Possivelmente, os gols marcados no primeiro tempo podem influenciar o jogo, proporcionando uma vantagem psicológica para a equipe mandante, aumentando sua confiança e determinação. Além disso, marcar cedo pode criar uma dinâmica positiva de jogo e forçar a equipe adversária a adotar uma postura mais ofensiva, o que pode abrir espaços para mais oportunidades de gol.

Conclusão

A análise detalhada da base de dados da UEFA Champions League entre 2003 e 2023 apresenta relações relevantes sobre os fatores que afetam o desempenho das equipes participantes. Ao examinar variáveis como o valor de mercado dos times, a experiência do elenco e o número de convocações dos jogadores para suas seleções nacionais, pudemos identificar padrões que demonstram a influência desses fatores no sucesso das equipes. Estes resultados reforçam a importância de uma abordagem na gestão esportiva, destacando a necessidade de equilibrar investimentos financeiros com o desenvolvimento de talentos e a manutenção de uma equipe coesa e experiente. Ao compreender melhor os fatores que impactam o desempenho no cenário da UEFA Champions League, os gestores e treinadores podem tomar decisões mais informadas para maximizar as chances de sucesso de suas equipes no mais alto nível do futebol europeu.