The Clean Shot

The Clean Shot

Tutoriales R

Cómo extraer y transformar datos de la NCAA desde ESPN en un Play-by-Play amigable

Capítulo 2: Extraer el pbp

Avatar de Ivo Villanueva
Ivo Villanueva
abr 17, 2026
∙ De pago

En el post anterior expliqué la manera de extraer el calendario de un equipo NCAA, en este caso MICHIGAN, a traves de la página de ESPN. Si bien esto parece una chorrada, es la única, o la manera más precisa, de conseguir los game_id de cada partido; para conseguir tanto los box score de los partidos, como los Play by Play. Sino lo viste aquí te dejo el enlace:

Entonces, una vez que ya tenemos los gamei_ids de los pártidos, vamos a ver qué sacar de estos ids y cómo hacerlo.

Empezamos donde lo dejamos, actualizando nuestro calendario. Ahora es más fácil porque ya está todo el pescado vendido, no hay más carne que cortar; ya no se juegan más partidos hasta el año que viene. Spoiler: ganó Michigan.

library(tidyverse)
library(rvest)


  "https://www.espn.com/mens-college-basketball/team/schedule/_/id/130/michigan-wolverines" %>% 
  read_html() %>%
  html_elements("[data-testid='link'] a") %>%
  html_attr("href") %>%
  str_extract(.,"[0-9]+") %>% 
  tibble(game_id = .) %>% 
  write.csv("../aday_mara/csv/game_id.csv", row.names = FALSE
            )

Entonces puedes seguir el código debajo de este o hacer otro script leyendo el csv desde la ubicación donde guardamos los datos. Esto es lo que voy a hacer. Me gusta una carpeta por proyecto donde guardo los scripts, luego otra carpeta para los csvs y otra para los pngs.

Esta es la carpeta y los archivos que usé para mi análisis de Aday Mara

Para mí es útil guardar los csvs porque algunos datos tardan unos minutos en descargarse y eso cada vez es un poco pesado. Como se puede ver en la raíz de mi proyecto, el primer script es el que se llama calendario_michigan y ahora vamos a abrir el script aday, que es donde vamos a montar las funciones para scrapear los play by play.

library(tidyverse)
library(hoopR)

game_id <- read_csv("../aday_mara/csv/game_id.csv") %>%
  pull(game_id)

Empezamos cargando las dos librerías que necesitamos y creamos la variable game_id

Utilizo la función pull() para extraer una sola columna de un data frame y convertirla directamente en un vector.

Para empezar, fijémonos en una ley universal inmutable; lo micro es igual a lo macro. Usaremos un game_id para luego aplicarlo a todos los demás.


pbp <- hoopR::espn_mbb_pbp(401856572)

rosters <- hoopR::espn_mbb_player_box(401856572)

Hemos elegido el game_id 401856572 y usaremos de la librería hoopR la función espn_mbb_pbp(), que es la que extrae el play by play, y la función espn_mbb_player_box(), o sea, la que extrae los boxscore. ¿Por qué? Porque los pbp vienen sin nombres de jugadores, solo indican los id de los jugadores, por lo que tenemos que juntar estos nombres con sus ids para saber qué hace cada jugador.

Si hay algo que me gusta más que extraer datos, es limpiar los datos.
Avatar de User

Continúa leyendo este Post gratis, cortesía de Ivo Villanueva.

O compra una suscripción de pago.
© 2026 The Clean Shot · Privacidad ∙ Términos ∙ Aviso de recolección
Crea tu SubstackDescargar la app
Substack es el hogar de la gran cultura