The Clean Shot

The Clean Shot

Tutoriales Python

Cómo se hace: Gráfica de lineas y puntos Euroliga

En Python 🐍 y en R

Avatar de Ivo Villanueva
Ivo Villanueva
ago 29, 2025
∙ De pago
Con R
Con Python

¿Qué tal todo?

Mientras pueda, tenga tiempo y sepa cómo hacerlo, compartiré con los suscriptores premium el código R y el código Python, como si una piedra de Rosseta se tratara, la verdad es que ambos lenguajes son muy similares; creo que R es posterior y por eso muchas funciones y maneras de escribir código son mas cortas y eficientes y posee una mayor y mejor capacidad gráfica. Al final todo se puede hacer con todo, pero mientras en uno, son dos palabras, en otro pueden ser 10 lineas.

No se si se percibe, pero a mi me gusta resumir mucho al escribir código y prefiero la eficiencia, quizás porque al ser autodidacta no he aprendido bajo la disciplina de ningún profesor, ni de ningún curso. Es algo que recomiendo.

Yo aprendí a base de imponerme proyectos. Cuando encontraba lo que quería hacer preguntaba y pregunto a todo el mundo, buscaba y busco turoriales por todas partes. Una cosa que quiero agradecer es la facilidad y la buena disposición de verdaderos cracks como Owen Philips , Abdoul Madjid o Dan Oehm y muchos otros que han tenido tanta paciencia conmigo. Lo cierto es que breaba y breo a mucha gente 😂, porque: ya sé que no... pero y si sí.


Codigo R

Cómo siempre las librerias. Tengo que confesar que me he cambiado de portatil y hasta que vuelva a cargar todo tal y como lo tenía en el antiguo pues… Bueno, ponemos las lbrerias, las fuentes y mi tema ( también podeis simplemente poner theme_minimal() en el plot)

library(tidyverse)
library(rvest)
library(janitor)
library(shadowtext)
library(ggtext)
library(extrafont)
library(sysfonts)
library(showtext)

font_add(family = "oswald", regular = "Oswald-VariableFont_wght.ttf")
font_add(family = "oswaldbold", regular = "Oswald-Bold.ttf")
font_add(family = "Font Awesome 6 Brands", regular = "fa-brands-400.ttf")

showtext_auto()
showtext_opts(dpi = 320)

#mi tema
theme_ivo <- function () {
  theme_minimal(base_size=9, base_family="oswald") %+replace%
    theme(
      panel.grid.minor = element_blank(),
      plot.background = element_rect(fill = 'white', color = "white")
    )
}

Si quereis saber cómo se llama y donde teneis alguna fuente en vuestro sistema teclead

font_files() %>% tibble() %>% filter(str_detect(family,"Oswald"))

Luego el nombre que hay poner es el que está debajo de la columna family, como vereís en el primer rectangulo, yo he cambiado el nombre para diferenciar el face bold del Regular

Scraping Data

Vamos a usar los datos de la web RealGM

Si quereis los datos de un solo año tecleais esto

df <-"https://basketball.realgm.com/international/league/1/Euroleague/team-stats/2025/Averages/Team_Totals" %>%
  read_html() %>%
  html_element("table") %>%
  html_table() %>%
  clean_names() %>%
  select(team, fgm, fga, fg_percent, x3pm, x3pa, x3p_percent) %>%
  mutate(x2pa = fga- x3pa) %>% #no hay columna de intentos de 2
  summarise(x2pa_media = mean(x2pa),
            x3pa_media = mean(x3pa))

Cómo dije mas arriba me gusta ahorrar y a la vez que descargo los datos los limpio los selecciono y creo las columnas.

Ahora vamos a sacar los datos de los últimos 20 años

Si te gusta lo que lees, pásate a pago y te llevas el resto del análisis + el código R y Python (formato “piedra de Rosetta”,🙈). Con tu apoyo puedo seguir picando piedra y compartir lo que aprendo. 🏀

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.

¿Ya eres suscriptor de pago? Iniciar sesión
© 2025 The Clean Shot
Privacidad ∙ Términos ∙ Aviso de recolección
Crea tu SubstackDescargar la app
Substack es el hogar de la gran cultura