Cómo se hace gráfica jugadores con el ratio en usg% más alto por equipo
+ Data frames necesarios. Publicada en el post de El flautista de Hamelin
📌 Plan de extraer el Play-by-Play del Eurobasket: abortado.
Ha hecho aguas. Otro año no me pasa.
Resulta que FIBA solo deja en su web los datos de los últimos tres días. ¿Qué alguien de FIBA leyó mis gritos de triunfo en X y decidió borrarlo todo? No quiero ponerme conspiranoico... pero como dice el dicho:
“Eu non creo nas meigas, pero habelas, hainas.”
Así que nada. El año que viene, lo extraigo desde el primer día.
Como compensación, voy a explicar cómo hice la tabla de
“Jugadores con el Ratio más alto… etc”, que es de mis favoritas.
📦 1. Librerías necesarias
library(tidyverse) # Manipulación de datos + ggplot2
library(ggimage) # Insertar imágenes en gráficos
library(ggtext) # Texto enriquecido en títulos y captions
library(scales) # Formato de ejes (percent_format)
library(cropcircles) # Recortar fotos en círculos
library(prismatic) # Ajustar colores (oscurecer/iluminar)
library(shadowtext) # Texto con sombra en los gráficos📝 2. Caption personalizado con iconos y créditos
twitter <- "<span style='color:#000000;font-family: \"Font Awesome 6 Brands\"'></span>"
tweetelcheff <- "<span style='font-weight:bold;'>*@elcheff*</span>"
insta <- "<span style='color:#E1306C;font-family: \"Font Awesome 6 Brands\"'></span>"
instaelcheff <- "<span style='font-weight:bold;'>*@sport_iv0*</span>"
github <- "<span style='color:#000000;font-family: \"Font Awesome 6 Brands\"'></span>"
githubelcheff <- "<span style='font-weight:bold;'>*IvoVillanueva*</span>"
caption <- glue::glue(
"<br>**Datos**: *@ACBCOM* • **Gráfico**: *Ivo Villanueva* •
{twitter} {tweetelcheff} • {insta} {instaelcheff} • {github} {githubelcheff}"
)🏀 3. Datos base: colores de clubes y jugadores españoles
# Colores de cada club ACB
clubs <- read.csv("https://raw.githubusercontent.com/IvoVillanueva/logos_cuadrados_acb/refs/heads/main/acb_df.csv") %>%
select(abb , color) %>%
mutate(color = case_when(abb == "RMB" ~ "white", TRUE ~ color))
# Jugadores españoles identificados
espanoles <- read_csv("https://raw.githubusercontent.com/IvoVillanueva/data/refs/heads/main/elflautista/espanoles.csv") %>%
rename(jugador = jug) %>%
distinct()
📊 4. Cálculo del USG% a partir de los boxscores de la temporada 24/25
df <- read_csv("https://raw.githubusercontent.com/IvoVillanueva/data/refs/heads/main/elflautista/boxscores_2425.csv"), show_col_types = FALSE) %>%
group_by(id_match, abb ) %>%
mutate(
fga = x2pt_tried + x3pt_tried,
team_minutes = sum(time_played, na.rm = TRUE),
team_fga = sum(fga, na.rm = TRUE),
team_fta = sum(x1pt_tried, na.rm = TRUE),
team_tov = sum(turnovers, na.rm = TRUE)
) %>%
ungroup() %>%
mutate(
usg = 100 * (fga + 0.44 * x1pt_tried + turnovers) * (team_minutes / 5) /
(pmax(time_played, 2) * (team_fga + 0.44 * team_fta + team_tov))
)
Si disfrutas con mis gráficas y análisis, considera suscribirte: es la mejor manera de mantener vivo este proyecto.
Continúa leyendo con una prueba gratuita de 7 días
Suscríbete a The Clean Shot para seguir leyendo este post y obtener 7 días de acceso gratis al archivo completo de posts.




