Actualización: He añadido un análisis del partido AFANINON CB Almansa - Arcos Albacete Basket celebrado el 26/01/2019.

El paquete rfeb escrito por Sergio Olmos permite descargar datos de lanzamientos de los partidos de baloncesto de varias ligas de la RFEB. El paquete se puede instalar directamente desde github. Trasteando un poco he conseguido descargar datos de varias jornadas y me he preguntado qué podríamos hacer con estos datos. Voy a utilizar el equipo local, Arcos Albacete Basket para hacer un pequeño análisis del paquete y sus posibilidades.

Descarga de datos

La descarga de datos se hace con la función extract_shots(), que require un vector con los números de identificación de los partidos. Estos se obtienen de la URL del sitio http://baloncestoenvivo.feb.es, por lo obtener partidos de jornadas pasadas puede ser un poco complicado al no haber un listado de los partidos de jornadas anteriores.

Usando un poco de fuerza bruta he conseguido descargar partidos de varias ligas de las últimas jornadas, y las he guardado en un fichero RData.

library(rfeb)
load("rfeb/2011000-299.RData")

El Arcos Albacete Basket se enfrenta el próximo sábado 26 de enero de 2019 al AFANION CB Almansa, por lo que haremos un análisis comparativo de ambos equipos.

Análisis

En primer lugar, creamos dos variables con los nombres de los equipos tal y como aparecen en los datos:

arcosab <- "ARCOS ALBACETE BASKET"
afanion <- "AFANION CB ALMANSA"

Los resultados de los partidos están en un data.frame llamado shots2. En primer lugar, dejamos solamente los lanzamientos de estos dos equipos:

shots <- subset(shots2, team %in% c(arcosab, afanion))
shots$team <- as.character(shots$team)
shots$game <- as.character(shots$game)
levels(shots$made) <- c("Fuera", "Dentro")

Los datos corresponden a 2 partidos, en los que al AFANION CB Almansa realizó 540 lanzamientos y el Arcos Albacete Basket realizó 586.

Antes de proceder al análisis vamos a eliminar los partidos del último partido entre el AFANION CB Almansa y el Arcos Albacete Basket para analizarlo por separado:

afa.aba <- shots[shots$game == "2011201", ]
shots <- shots[-which(shots$game == "2011201"), ]

Ubicación de los lanzamientos

El paquete rfeb incluye la función plot_shotchart() para visualizar los datos. Podemos utilizar esta función para mostrar la ubicación de los lanzamientos y si entraron (Dentro) o no (Fuera).

plot of chunk unnamed-chunk-5

Tiempos de los lanzamientos

Los datos también incluyen los tiempos a los que se hacen los lanzamientos. Podemos utilizar esta información para hacer una suvización que nos permita ver cómo varía el número de lanzamientos a lo largo del partido. La siguiente gráfica muestra como el AFANION CB Almansa suele iniciar los partidos con más lanzamientos a canasta que el Arcos Albacete Basket, que reparte sus lanzamientos de forma más uniforme durante todo el partido. Conviene comentar que algunos tiempos yo mayores a 40 minutos porque corresponden a lanzamientos que se hicieron durante la prórroga.

#t: Vector de tiempos en formato mm:ss
density_time <- function(shots, team = NULL, bw = 2.5) {
  if(!is.null(team)) {
    times <- ms(shots[shots$team %in% team, ]$t)
  } else {
    times <- ms(shots$t)
  }
  times <- (minute(times) * 60 + second(times)) / 60

  res <- density(times, from = 0, to = 40, bw = bw, kernel = kernel) 
  res$y <- res$y * length(times)
  return(res)
}

plot of chunk unnamed-chunk-9

De manera similar, podríamos analizar dónde se concentran los lanzamientos de los dos equipos. En la siguiente gráfica, las curvas de nivel marcan las regiones desde las cuales se producen más lanzamientos. En general, el AFANION CB Almansa reparte sus lanzamientos mucho más que el Arcos Albacete Basket, que los concentra en tres regiones mucho más reducidas.

plot of chunk unnamed-chunk-10

Tiros por jugador

Por último, podemos explorar los lanzamientos por jugador. Actualmente, el paquete rfeb sólo proporciona el número de la camiseta de cada jugador. A continuación se muestra la ubicación de los lanzamientos de cada jugador del Arcos Albacete Basket.

plot of chunk unnamed-chunk-11

Para el AFANION CB Almansa, la gráfica correspondiente es esta:

plot of chunk unnamed-chunk-12

Análisis de un partido en concreto

Por último, vamos a ver el análisis del partido AFANION CB Almansa - Arcos Albacete Basket celebrado el 26/01/2019 con victoria local por 90 a 69 puntos. En primer lugar, veamos desde dónde se realizaron los tiros a canasta durante el partido:

library(ggplot2)
plot_shotchart(afa.aba, color = made) + facet_wrap(~ team + made) +
  geom_density_2d(data = shots, aes(x = x, y = y))

plot of chunk unnamed-chunk-13

La gráfica muestra como el AFANION CB Almansa tiene unas zonas de tiros mucho más amplias que el Arcos Albacete Basket. Ademñas, también se puede apreciar que el equipo local ha dominado en los lanzamientos de triples.

Para ver la evaluación durante la posesión en el partido, podemos realizar una suavización kernel con los datos de lanzamientos que fueron dentro y luego calcular la diferencia. Esto permite ver en qué partes del partido domina uno u otro equipo. Valores positivos indican dominio (es decir, más tiros dentro) mientras que valores negativos indican dominio del equipo visitante.

plot of chunk unnamed-chunk-14

La gráfica anterior muestra como el AFANION CB Almansa ha dominado el marcador durante casi todo el partido, con pequeñas remontadas del Arcos Albacete Basket. Los parciales de cada tiempo fueron 25-13, 28-16, 17-15, 20-25.

Análisis de la defensa

Una manera sencilla de estudiar cómo defiende un equipo es ver la gráfica de tiros anotados (y fallados) de todos los equipos a los que se ha enfrentado. A continuación podemos ver estas dos gráficas para el Arcos Albacete Basket, para el que se han usado datos de los últimos 9 partidos.

plot of chunk unnamed-chunk-16

Como puede observarse, en el lado izquierdo se observa una cantidad ligeramente mayor de tiros que en la parte izquierda. Esto puede indicar que los equipos atacantes tenga más facilidades para entrar desde esta banda a canasta y que, por tanto, haya que reforzarla.

De manera similar, podemos hacer una estimación de cuándo se producen los tiros a canasta de los equipos contrarios utilizando una suavización kernel.

plot of chunk unnamed-chunk-17

La mayor cantidad de tiros se produce en el primer cuarto y el número de tiros va decreciendo conforme aumenta el partido. Parece que se observa un pequeño repunte en el tercer cuarto, y a mitad del último cuarto.

Conclusiones

El paquete rfeb facilita el acceso a datos de partidos de varias ligas de la RFEB. La explotación de los datos con el sfotware estadístico R permite, entre otras cosas, visualizar los datos usando distintos tipos de gráficos. Se echa de menos la posibilidad de descargar el listado de los partidos de la jornada, para saber qué equipo es el local y cuál el visitante. También sería interesante saber los datos de los jugadores, además del número de su camiseta.