---
title: "La Champions League"
description: |
Repasando la historia de la Champions League
author:
- Adrian Fernandez (aferbru@alumni.uv.es)\n
- Carlos Hueso (carhue2@alumni.uv.es)\n
- Simon Casañ (sicaol@alumni.uv.es)
date: 2025-12-16
categories: [trabajo BigData, Futbol, Champions League]
image: "./imagenes/BANNER.jpeg"
title-block-banner: "#0e1e5b"
title-block-banner-color: "white"
toc-depth: 3
smooth-scroll: true
format:
html:
link-external-newwindow: true
code-tools: true
code-link: true
code-fold: true
---
## INTRODUCCIÓN
La UEFA Champions League es la competición de clubes de fútbol más prestigiosa de Europa, organizada cada año por la UEFA para determinar cuál es el mejor equipo del continente. En este torneo participan los campeones de liga y los equipos mejor clasificados de las ligas europeas más fuertes. La competición se desarrolla a lo largo de una temporada, comenzando con una fase de grupos y acabando con rondas de eliminación directa, hasta llegar a la gran final a partido único, donde el ganador levanta el codiciado trofeo de "la orejona", consolidando su lugar en la historia del fútbol.
A continuación, os vamos a dar un repaso de los datos más importantes de la historia de la Champions League. Dentro del trabajo hablaremos sobre las características más importantes tanto de jugadores, de equipos, de entrenadores como de estadios. Esperamos que lo disfrutéis, y que aquellos que no sepáis tanto de este tema, aprendáis un poco más.
# DATOS
Para realizar el trabajo, hemos sacado los datos de la pagina webb Kaggle, una web la cual contiene millones de datos, y entre ellos, de la Champions League. Os dejamos por aqui el [enlace](https://www.kaggle.com/){target="_blank"}
------------------------------------------------------------------------
## 1. EQUIPOS
## 1.1 Equipos con mas temporadas
A lo largo de la historia de esta competición, más de 500 clubes han tenido el honor de participar al menos una vez. Pero si hablamos de consistencia, solo unos pocos han logrado ser habituales en la élite. Hemos analizado cuántas temporadas ha jugado cada club y, como podéis ver en el gráfico, el Real Madrid domina esta clasificación con mucha diferencia. Otros equipos como el Benfica, el Bayern de Múnich, y el Dínamo de Kiev también demuestran una increíble trayectoria en la máxima competición.
```{r}
library(tidyverse)
library(ggimage) #install.packages(ggimage)
ruta_a_datos_1 <- "./datos/probando.csv"
df_completo <- read_csv(ruta_a_datos_1)
top_15_participaciones <- df_completo %>%
select(Club, Participated) %>%
mutate(Participated = as.numeric(Participated)) %>%
arrange(desc(Participated)) %>%
head(15)
df_logos <- data.frame(Club = c(
"Real Madrid CF",
"SL Benfica",
"FC Dynamo Kyiv",
"FC Bayern Munchen",
"AFC Ajax",
"Juventus",
"FC Porto",
"Celtic FC",
"Olympiacos FC",
"RSC Anderlecht",
"FC Barcelona",
"Rangers FC",
"Linfield FC",
"Manchester United",
"AC Milan"
),
Foto = c(
"Real_Madrid_CF.svg.webp",
"benfica.png",
"dynamo.png",
"bayern.png",
"ajax.png",
"juventus.png",
"oporto.png",
"celtic.png",
"olympiakos.png",
"anderlecht.png",
"barsa.png",
"rangers.png",
"Linfield.png",
"mtu.png",
"milan.png"
)
) %>%
mutate(logo = file.path("imagenes", Foto))
top_15_completo <- left_join(top_15_participaciones,df_logos, by = "Club")
mi_grafico <- ggplot(top_15_completo, aes(x = reorder(Club, Participated), y = Participated)) +
geom_col(fill = "dodgerblue3", width = 0.6) +
coord_flip() +
geom_image(aes(image = logo, y = 0), size = 0.05) +
geom_text(aes(label = Participated), hjust = -0.2, fontface = "bold", size = 3.5) +
expand_limits(y = 0) +
labs(
title = "Top 15: Equipos con más participaciones",
subtitle = "Desde 1955-2023",
x = "Equipos",
y = "Nº participaciones") +
theme_minimal()+
theme(
plot.title = element_text(face = "bold", size = 14),
axis.text.y = element_blank(),
axis.ticks.y = element_blank(),
plot.margin = margin(10, 20, 10, 20))
mi_grafico
```
## 1.2 Los equipos más ganadores
La Champions es una competición que premia la consistencia. A pesar de las 72 ediciones que se han disputado, tan solo 24 equipos han conseguido levantar el trofeo, esto indica lo difícil que es ganar la 'orejona'. En el treemap podéis ver los 10 clubes más galardonados. El tamaño de cada rectángulo es proporcional a la cantidad de títulos que tienen. De nuevo, el Real Madrid es el rey indiscutible, demostrando que no solo participa más, sino que también es el más efectivo en las finales. Le siguen de cerca el AC Milán y el FC Bayern, lo que nos da una idea de qué ligas y qué equipos han marcado las épocas doradas de la competición.
```{r}
library(treemapify) #install.packages("treemapify")
library(tidyverse)
library(janitor)
library(ggimage)
library(magick)
library(highcharter)
ruta_a_datos_2 <- "./datos/probando.csv"
df_completo <- read_csv(ruta_a_datos_2)
top_10_titulos <- df_completo %>%
select(Club, Titles) %>%
mutate(Titles = as.numeric(Titles)) %>%
arrange(desc(Titles)) %>%
head(10)
hchart(top_10_titulos, "treemap", hcaes(x = Club, value =Titles, color = Titles))%>%
hc_add_theme(hc_theme_economist()) %>%
hc_size(height = 500)
madrid <- image_read("./imagenes/madridchamp.jpg") %>% image_scale(.,"700")
barsa <- image_read("./imagenes/barsachamp.jpg") %>% image_scale(.,"700")
bayern <- image_read("./imagenes/bayernchamp.jpg") %>% image_scale(.,"700")
juve <- image_read("./imagenes/juvechamp.jpg") %>% image_scale(.,"700")
mtu <- image_read("./imagenes/mtuchamp.webp") %>% image_scale(.,"700")
benfica <- image_read("./imagenes/benficachamp.webp") %>% image_scale(.,"700")
liverpool <- image_read("./imagenes/liverpoolchamp.jpeg") %>% image_scale(.,"700")
inter <- image_read("./imagenes/interchamp.jpeg") %>% image_scale(.,"700")
ajax <- image_read("./imagenes/ajaxchamp.webp") %>% image_scale(.,"700")
milan <- image_read("./imagenes/milanchamp.jpg") %>% image_scale(.,"700")
equipos <- c(madrid, barsa, bayern, juve, mtu, benfica, liverpool, inter, ajax, milan)
image_animate(image_scale(equipos), fps = 0.5)
```
------------------------------------------------------------------------
## 2. JUGADORES
## 2.1 Máximos Goleadores
La Champions es el escenario idóneo para que los grandes goleadores brillen. En este gráfico de dispersión, hemos analizado a los 10 máximos goleadores históricos, comparando sus goles totales con la cantidad de partidos que jugaron. Podemos ver claramente dos grandes leyendas que están muy por encima del resto: Cristiano Ronaldo y Lionel Messi. Su dominio es absoluto en términos de goles y partidos. Es interesante observar que jugadores como Robert Lewandowski y Ruud van Nistelrooy tienen un promedio de gol por partido (color más oscuro) alto, lo que nos indica la gran facilidad que tienen estos jugadores para anotar goles.
```{r}
library(tidyverse)
library(ggrepel)
ruta_a_datos_1 <- "./datos/goleadores.csv"
ruta_a_datos_2 <- "./datos/participaciones.csv"
df_completo_2 <- read_csv(ruta_a_datos_2)
df_completo <- read_csv(ruta_a_datos_1)
df_completo_3 <- left_join(df_completo,df_completo_2, by = "Player")
top_10_goleadores <- df_completo_3 %>%
select(Goals, Player, Appearances) %>%
mutate(Goals = as.numeric(Goals)) %>%
mutate(Promedio = Goals / Appearances) %>%
arrange(desc(Goals)) %>%
head(10)
ggplot(top_10_goleadores, aes(x = Appearances, y = Goals)) +
geom_point(aes(color = Promedio), size = 5, alpha = 0.8) +
geom_text_repel(aes(label = paste(Player, "\n(", Goals, " goles)")),
fontface = "bold",
box.padding = 0.5,
point.padding = 0.5,
size = 3) +
scale_color_gradient(low = "lightblue", high = "darkblue") +
labs(
title = "Top 10 Goleadores Históricos",
subtitle = "Goles vs Partidos Jugados",
x = "Partidos Jugados",
y = "Goles Totales",
color = "Promedio Gol/Partido") +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 16),
legend.position = "bottom" )
```
## 2.2 Mejores Jugadores en finales
Si ya es difícil jugar una final de champions, ser MVP en una final solo está al alcance de muy pocos jugadores en el mundo. Este once representa una selección de jugadores que han sido reconocidos como los 'Mejores Jugadores del Partido' en las finales que han ganado. Los hemos colocado en un esquema 4-3-3 y, junto a sus fotos, hemos indicado cuántos premios MVP de la final tienen.
```{r}
#install.packages("ggsoccer")
library(tidyverse)
library(ggimage)
library(ggsoccer)
mvps <- "./datos/entrenadores_mvps.csv"
df_completo <- read_csv(mvps)
top_11 <- df_completo %>%
select(club, mvp, position) %>%
filter(position == "winner") %>%
count(mvp, sort = TRUE, name = "titulos")
once_final <- c(
"Thibaut Courtois",
"Paolo Maldini",
"Frank Rijkaard",
"Virgil van Dijk",
"Sergio Ramos",
"Xavi",
"Franz Roth",
"Johan Cruyff",
"Paco Gento",
"Alfredo Di Stefano",
"Lionel Messi")
coordenadas_433 <- data.frame(
orden_posiciones = 1:11,
posiciones = c("GK", "LB", "CB", "CB", "RB", "LCM",
"CM", "RCM", "LW", "ST", "RW"),
x = c(5, 25, 20, 20, 25, 50, 45, 50, 75, 88, 75),
y = c(50, 15, 35, 65, 85, 25, 50, 75, 20, 50, 80))
equipo_mvp <- data.frame(
mvp = once_final,
orden_posiciones = 1:11
) %>%
left_join(coordenadas_433, by = "orden_posiciones")
conteo_mvps <- df_completo %>%
filter(position == "winner") %>%
count(mvp, name = "titulos")
datos_grafico <- equipo_mvp %>%
left_join(conteo_mvps, by = "mvp") %>%
mutate(nombres_jugadores = case_when(
mvp == "Thibaut Courtois" ~ "curtu.jpg",
mvp == "Paolo Maldini" ~ "maldini.jpg",
mvp == "Frank Rijkaard" ~ "rijkaard.jpg",
mvp == "Virgil van Dijk" ~ "van dijk.webp",
mvp == "Sergio Ramos" ~ "ramos.webp",
mvp == "Xavi" ~ "xavi.jpg",
mvp == "Franz Roth" ~ "roth.webp",
mvp == "Johan Cruyff" ~ "cruyff.jpg",
mvp == "Paco Gento" ~ "gento.jpg",
mvp == "Alfredo Di Stefano" ~ "di stefano.jpg",
mvp == "Lionel Messi" ~ "messi.jpg")) %>%
mutate(ruta_imagen = paste0("./imagenes/", nombres_jugadores))
ggplot(datos_grafico) +
annotate_pitch(
dimensions = pitch_statsperform,
fill = "green",
colour = "white"
) +
theme_pitch() +
coord_flip() +
geom_image(aes(x = x, y = y, image = ruta_imagen), size = 0.08) +
geom_label(
aes(x = x, y = y, label = paste(mvp, "\n", titulos, "")),
vjust = 1.5,
size = 3,
fontface = "bold",
alpha = 0.9) +
labs(title = "11 MVP's de finales de Champions League")
```
## 3. ENTRENADORES
En el éxito de un club no solo influyen los jugadores, sino también la figura del entrenador. En este apartado, hemos analizado a los técnicos que han llegado a la final de la Champions League a lo largo de su historia. La tabla que veis a continuación clasifica a los entrenadores por el número total de finales disputadas y las victorias conseguidas.
La tabla nos permite observar quiénes son los mejores entrenadores de la historia de Europa. Podemos identificar a entrenadores con un número alto de victorias, como Carlo Ancelotti , Robert Paisley o Zinedine Zidane, que no solo llegaron a la final, sino que demostraron una gran efectividad para alzarse con el trofeo. La tabla también nos permite ver a aquellos que, a pesar de haber jugado varias finales, no han podido alzarse con el titulo o con los titulos que les hubiera gustado.
```{r}
library(tidyverse)
library(gt)
ucl_finals <- "./datos/ucl-soccer-1955-2019.csv"
ucl_finals <- read_csv(ucl_finals)
tabla_entrenadores <- ucl_finals %>%
group_by(coach) %>%
summarise(
Finales = n(),
Victorias = sum(position == "winner"),
Derrotas = sum(position == "runner up"))%>%
ungroup() %>%
arrange(desc(Finales), desc(Victorias)) %>%
filter(coach != "unknown")
tabla_final<- tabla_entrenadores %>%
gt() %>%
opt_interactive(use_search = TRUE,
use_filters = TRUE,
use_resizers = FALSE,
use_compact_mode = FALSE,
use_page_size_select = FALSE) %>%
tab_header(
title = md("Entrenadores finalistas de champions"),
subtitle = md("Análisis de los entrenadores finalistas (1955/56 - 2023/2024")) %>%
opt_align_table_header(align = "left") %>%
cols_label(
coach = md("**Entrenador**"),
Finales = md("**Total Finales**"),
Victorias = md("**Victorias**"),
Derrotas = md("**Derrotas**")) %>%
cols_align(
align = "center",
columns = c(Finales, Victorias, Derrotas)) %>%
fmt_number(
columns = c(Finales, Victorias, Derrotas),
decimals = 0) %>%
tab_style(
style = cell_fill(color = "indianred"),
locations = cells_body(
columns = Derrotas,
rows = Derrotas > 0)) %>%
tab_style(
style = cell_fill(color = "lightblue"),
locations = cells_body(
columns = Victorias,
rows = Victorias > 0)) %>%
opt_row_striping() %>%
tab_options(
heading.background.color = "blue",
column_labels.border.bottom.color = "black",
table_body.border.bottom.color = "black",
table_body.hlines.color = "white"
) %>%
tab_source_note(md("Fuente: Datos obtenidos de **Kaggle** ( https://www.kaggle.com )")) %>%
tab_source_note(md("El color de las celdas indican las Victorias (azul) o las Derrotas (rojo)."))
tabla_final
```
------------------------------------------------------------------------
## 4. PAISES
## 4.1 Paises ganadores
Los títulos no solo son una victoria para un club, sino también para el país que representan. En este gráfico de diagrama, mostramos qué países tienen los clubes qué más veces han ganado la Champions League. Como se puede ver, el dominio se concentra en cinco grandes países donde Italia, Alemania, y especialmente España con el Real Madrid y el Barcelona, acaparan la mayor parte de los títulos.
```{r}
library(tidyverse)
library(highcharter) #install.packages("highcharter")
ucl_finals <- "./datos/ucl-finals.csv"
df <- read_csv(ucl_finals)
top_5_paises <- df %>%
rename(Paises = `winner-country` ) %>%
mutate(Paises = str_replace(Paises,
"West Germany", "Germany")) %>%
count(Paises) %>%
arrange(desc(n)) %>%
head(5)
hchart(top_5_paises, "pie", hcaes(x = Paises, y = n)) %>%
hc_add_theme(hc_theme_economist()) %>%
hc_size(height = 500)
```
## 4.2 Paises con sede
A lo largo de la competición, los partidos se van jugando en los propios estadios de los equipos que compiten, esto es así hasta la final, donde la UEFA elige una sede neutral para disputar la final. En este mapa os mostramos qué países han albergado al menos una final de la Champions a lo largo de la historia.
```{r}
#| eval: true
library(tidyverse)
library(plotly)
ruta_a_datos_2 <- "./datos/ucl-finals.csv"
df_completo <- read.csv(ruta_a_datos_2)
df_final <- df_completo %>%
rename(Pais = final.country, Espectadores = attendance,
Estadio = stadium) %>%
mutate(Espectadores = as.numeric(Espectadores)) %>%
group_by(Pais) %>%
arrange(desc(Espectadores)) %>%
slice(1) %>%
ungroup() %>%
select(Estadio, Pais, Espectadores)
#Para realizar este mapa iteractivo , nos hemos apoyado en el siguiente trabajo :
# " https://ricardofreirev.github.io/trabajo_BigData_equipo/my_trabajo_BigData.html "
datos_mapa <- df_final %>%
mutate(color_fijo = 1) %>%
mutate(Pais_Mapa = case_when(
Pais %in% c("England", "Scotland", "Wales") ~ "United Kingdom",
Pais == "West Germany" ~ "Germany",
Pais == "Soviet Union" ~ "Russia",
Pais == "Yugoslavia" ~ "Serbia",
TRUE ~ Pais))
map_plot <- plot_geo(data = datos_mapa,
locations = ~Pais_Mapa,
z = ~Espectadores,
text = ~paste(
"<b>País:</b>", Pais, "<br>",
"<b>Estadio:</b>", Estadio, "<br>",
"<b>Espectadores:</b>", format(Espectadores, big.mark=".")),
colors = "Blues") %>%
add_trace(z = ~color_fijo,
locations = ~Pais_Mapa,
type = "choropleth",
locationmode = "country names",
colorscale = "Blues",
marker = list(line = list(color = "white", width = 0.5)),
showscale = FALSE) %>%
layout(title = "Sedes de Finales de Champions (Estadio y Asistencia)",
geo = list( showframe = FALSE,
projection = list(type = "mercator"),
showland = TRUE,
landcolor = "lightgray",
countrycolor = "white"),
height = 600 ) %>%
config(displayModeBar = FALSE)
map_plot
```
------------------------------------------------------------------------
## 5. Asistencia en Finales
Para terminar con los datos, nos fijamos en los aficionados. La asistencia a las finales de Champions League ha variado mucho a lo largo de la historia. La línea de tiempo es irregular, pero esto nos ayuda a entender que la asistencia está directamente relacionada con la capacidad del estadio elegido cada año. Vemos picos históricos en sedes con capacidad para más de 100.000 espectadores, como Hampden Park en Escocia o el Santiago Bernabéu en Madrid. Lo que si podemos afirmar es que los estadios en esta fecha siempre se acaban llenando, confirmando el inmenso interés que genera esta final.
```{r}
library(tidyverse)
library(gganimate)
library(scales)
library(gifski)
ruta_a_datos_2 <- "./datos/ucl-finals.csv"
df_completo <- read_csv(ruta_a_datos_2)
variacion_asistencia <- df_completo %>%
rename(Año = season, Asistencia = attendance ) %>%
mutate(Asistencia = as.numeric(Asistencia)) %>%
mutate(Año = parse_number(Año) + 1) %>%
select(Año, Asistencia) %>%
drop_na()
animacion_asistencia <- ggplot(variacion_asistencia, aes(x = Año, y = Asistencia)) +
geom_line(color = "royalblue", size = 1.2) +
geom_point(color = "red", size = 4) +
scale_y_continuous(
labels = scales::label_comma(),
breaks = seq(0, 140000, 20000),
limits = c(0, 140000)) +
labs(
title = "Evolución de la Asistencia en Finales",
x = "Temporada",
y = "Espectadores") +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 20),
panel.grid.minor = element_blank()) +
transition_reveal(Año)
animate(animacion_asistencia, renderer = gifski_renderer())
```
------------------------------------------------------------------------
## 6. CONCLUSIONES
Para finalizar , dudamos mucho que alguien de esta clase no conociera ya la existencia de la competición de clubes más prestigiosa de Europa, pero si este fuera el caso, esperamos que nuestro trabajo les haya servido para aprender un poco más sobre esta gran competición. Muchísimas gracias por su atención y esperamos que les haya gustado.
```{r}
#| echo: false
sessioninfo::session_info() %>%
details::details(summary = 'current session info')
```