Análisis de los patrones de asistencias del FC Barcelona en Euroliga

Cómo usar el paquete eurolig para analizar los patrones de asistencias del FC Barcelona en esta temporada de Euroliga

Análisis de los patrones de asistencias del FC Barcelona en Euroliga

Cómo usar el paquete eurolig para analizar los patrones de asistencias del FC Barcelona en esta temporada de Euroliga

Introducción

eurolig es un paquete de R que he creado para facilitar la obtención y el análisis de datos de partidos de Euroliga. En esta entrada muestro cómo utilizar eurolig para analizar diferentes aspectos de cómo se pasa el balón el FC Barcelona en esta Euroliga 2018-2019. En concreto, estamos interesados en averiguar:

  1. Qué tipo de tiro genera cada jugador cuando da una asistencia

  2. Cuántos puntos generan las asistencias de cada jugador

  3. Quién asiste a quién

  4. Cómo visualizar las asistencias del equipo


eurolig

El paquete eurolig está en fase experimental y todavía tiene bastantes bugs. En este momento tan solo permite descargar datos jugada-a-jugada pero espero poder incluir la posibilidad de trabajar con otro tipo de datos como la localización de los tiros o estadísticas tradicionales.

Podéis instalar el paquete desde Github:

# install.packages("devtools")
devtools::install_github("solmos/eurolig")

Tened en cuenta, sin embargo, que el paquete está en su fase inicial y habrá numerosos cambios con los problemas de reproducibilidad que esto supone. Aún así, descargadlo y jugad con él. Si detectáis algún bug o pensáis en alguna funcionalidad que creáis que pueda ser útil hacédmelo saber.

Podéis estar al tanto de las novedades del paquete en el archivo NEWS.md del repositorio.


Análisis

Los datos jugada-a-jugada nos permiten saber muchas cosas que no vemos en la tabla de estadísticas convencional. Son este tipo de datos los que nos van a permitir responder a nuestras preguntas sobre las asistencias del FC Barcelona en esta Euroliga.

Obtención de los datos

Podemos obtener los datos jugada-a-jugada introduciendo el código del partido/s junto con el año de la temporada correspondiente a la función extract_pbp().

El código del partido lo podemos encontrar en la propia URL de la página del partido. Por ejemplo, el último partido que disputó el FC Barcelona en esta Euroliga en el momento de escribir esto fue contra el Bayern de Munich en la ciudad alemana. La URL para este partido en la página oficial es

https://www.euroleague.net/main/results/showgame?gamecode=219&seasoncode=E2018

Observamos que el código del partido es 219 (gamecode=219). Introduciendo este código junto con el año de inicio de esta temporada en la función extract_pbp() obtenemos los datos jugada-a-jugada de este partido en un data frame:

library(eurolig)
game_pbp <- extract_pbp(game_code = 219, season = 2018)
game_pbp
## # A tibble: 518 x 18
##    game_code play_number team_code player_name play_type time_remaining
##    <fct>           <int> <fct>     <fct>       <fct>     <chr>         
##  1 219                 2 <NA>      <NA>        BP        10:00         
##  2 219                 3 MUN       RADOSEVIC,… TPOFF     09:59         
##  3 219                 4 BAR       TOMIC, ANTE TPOFF     09:59         
##  4 219                 5 BAR       RIBAS, PAU  3FGM      09:37         
##  5 219                 6 BAR       TOMIC, ANTE AS        09:35         
##  6 219                 7 MUN       LUCIC, VLA… 2FGA      09:20         
##  7 219                 8 BAR       TOMIC, ANTE D         09:18         
##  8 219                10 BAR       PANGOS, KE… 2FGA      08:58         
##  9 219                11 MUN       LUCIC, VLA… D         08:55         
## 10 219                12 MUN       JOVIC, STE… TO        08:34         
## # … with 508 more rows, and 12 more variables: quarter <fct>,
## #   points_home <dbl>, points_away <dbl>, team_name <fct>,
## #   player_id <fct>, player_dorsal <dbl>, play_info <chr>, seconds <dbl>,
## #   home_team <fct>, away_team <fct>, home <lgl>, season <int>

En el presente análisis queremos analizar más de un partido. En concreto, queremos obtener todos los partidos del FC Barcelona en la presente campaña. En lugar de ir buscando en la página web de la Euroliga todos los códigos de los partidos disputados por el FC Barcelona, podemos utilizar la función extract_team_pbp(). Con esta función basta con introducir el código del equipo y el año para obtener todos los partidos que ha disputado ese equipo en esa temporada.

Procedemos pues a descargar los datos de todos los partidos que ha disputado el actual FC Barcelona hasta la fecha (25 de Marzo del 2019):

pbp <- extract_team_pbp(team = "BAR", season = 2018)

Nótese que lleva un tiempo considerable obtener el data frame final. No es por el tamaño de los datos, ni por falta de optimización del código. La función está diseñada para ser lenta. En la documentación de la API de la Euroliga se indica que dejemos unos segundos entre petición y petición para no saturar el servidor.

Análisis de asistencias

Para averiguar las diferentes preguntas que mencionamos en la introducción echamos mano de la función get_assists(). Introduciendo los datos jugada-a-jugada en esta función obtenemos un data frame con el que luego podremos averiguar muchos detalles interesantes con unas pocas líneas de código. Para ello utilizaremos principalmente el paquete dplyr.

library(dplyr)
assists <- get_assists(pbp, team = "BAR")
assists
## # A tibble: 475 x 12
##    game_code season passer shooter shot_type points time_remaining quarter
##    <fct>     <fct>  <fct>  <fct>   <fct>      <dbl> <chr>          <fct>  
##  1 2         2018   HEURT… CLAVER… 2FG            1 09:43          1      
##  2 2         2018   CLAVE… TOMIC,… 2FG            2 08:39          1      
##  3 2         2018   HEURT… TOMIC,… 2FG            2 07:44          1      
##  4 2         2018   HEURT… SINGLE… 2FG            2 07:34          1      
##  5 2         2018   CLAVE… SINGLE… 2FG            3 03:19          1      
##  6 2         2018   ORIOL… SERAPH… 2FG            2 00:46          1      
##  7 2         2018   SERAP… KURIC,… 3FG            3 00:13          1      
##  8 2         2018   HEURT… ORIOLA… 2FG            2 07:08          2      
##  9 2         2018   HEURT… SERAPH… 2FG            2 04:58          2      
## 10 2         2018   BLAZI… PUSTOV… 2FG            2 01:17          2      
## # … with 465 more rows, and 4 more variables: seconds <int>, foul <lgl>,
## #   and1 <dbl>, ftm <dbl>

¿Qué tipo de tiro genera cada jugador cuando da una asistencia?

Con el data frame assists podemos averiguar el tipo de acción con la que culmina la asistencia. Una asistencia puede terminar con un tiro de tres, un tiro de dos, una falta personal de tiro o un tiro de campo más un tiro libre adicional.

En este caso, pongamos que estamos interesados solamente en saber si se trata de un tiro de dos o un tiro de tres. Los jugadores del FC Barcelona con más de 10 asistencias en total distribuyen sus asistencias de la siguiente manera:

assists %>% 
    group_by(passer) %>% 
    summarise(
        assists = n(),
        two_pointers = sum(shot_type == "2FG", na.rm = TRUE),
        three_pointers = sum(shot_type == "3FG", na.rm = TRUE),
        `3pt_ratio` = round(three_pointers / assists, 3)
    ) %>% 
    arrange(desc(assists)) %>% 
    filter(assists > 10)
passer assists two_pointers three_pointers 3pt_ratio
HEURTEL, THOMAS 138 101 37 0.268
PANGOS, KEVIN 92 55 36 0.391
TOMIC, ANTE 53 34 19 0.358
RIBAS, PAU 47 33 14 0.298
HANGA, ADAM 30 20 10 0.333
SINGLETON, CHRIS 26 15 11 0.423
CLAVER, VICTOR 23 12 11 0.478
KURIC, KYLE 21 13 8 0.381
ORIOLA, PIERRE 15 8 7 0.467
BLAZIC, JAKA 12 9 3 0.250
SERAPHIN, KEVIN 12 8 4 0.333

En este caso Heurtel tiene el segundo menor ratio de asistencias a tiros de tres con respecto al total de asistencias dadas (0.268). Pangos, por otro lado, tiene una proporción bastante mayor de asistencias que van a la línea de tres (0.391).

Los jugadores grandes y móviles del FC Barcelona, como Claver, Singleton u Oriola, dan una mayor proporción de sus asistencias a tiros de tres.

¿Cuántos puntos generan las asistencias de cada jugador?

Como hemos visto, no todas las asistencias son iguales. Una asistencia a un tiro de 3 genera dos puntos más que una asistencia que resulta en una falta de tiro en la que el tirador sólo mete un tiro libre.

Con las siguientes lineas de código podemos calcular cuántos puntos ha generado cada jugador del FC Barcelona con sus asistencias:

assists %>% 
    group_by(passer) %>% 
    summarise(
        assists = n(),
        points = sum(points, na.rm = TRUE),
        ppa = round(points / assists, 3)
    ) %>% 
    arrange(desc(assists)) %>% 
    filter(assists > 10)
passer assists points ppa
HEURTEL, THOMAS 138 311 2.254
PANGOS, KEVIN 92 215 2.337
TOMIC, ANTE 53 121 2.283
RIBAS, PAU 47 105 2.234
HANGA, ADAM 30 68 2.267
SINGLETON, CHRIS 26 63 2.423
CLAVER, VICTOR 23 58 2.522
KURIC, KYLE 21 48 2.286
ORIOLA, PIERRE 15 36 2.400
BLAZIC, JAKA 12 26 2.167
SERAPHIN, KEVIN 12 28 2.333

La última columna de esta tabla (ppa) nos da los puntos por asistencia que genera cada jugador (con más de 10 asistencias). Vemos que Claver y Singleton generan el máximo valor por asistencia, dado que un porcentaje relativamente alto de sus asistencias son a tiros de tres puntos.

¿Quién pasa a quién?

También es posible hayar a quién han ido dirigidas las asistencias de cada jugador del FC Barcelona. A continuación se muestran las 10 combinaciones pasador-tirador más comunes en lo que llevamos de temporada:

assists %>% 
    group_by(passer, shooter) %>% 
    count() %>% 
    arrange(desc(n)) %>% 
    head(10)
passer shooter n
HEURTEL, THOMAS SERAPHIN, KEVIN 27
HEURTEL, THOMAS TOMIC, ANTE 24
PANGOS, KEVIN TOMIC, ANTE 22
HEURTEL, THOMAS ORIOLA, PIERRE 21
HEURTEL, THOMAS SINGLETON, CHRIS 17
PANGOS, KEVIN KURIC, KYLE 16
PANGOS, KEVIN SERAPHIN, KEVIN 15
TOMIC, ANTE SINGLETON, CHRIS 15
HEURTEL, THOMAS CLAVER, VICTOR 12
HEURTEL, THOMAS KURIC, KYLE 12

Las cinco combinaciones más comunes son entre base y pivot. Observamos que Heurtel se entiende muy bien con los interiores de su equipo, especialmente los dos cincos, Seraphin y Tomic. Esto explica la baja proporción de asistencias a tiros de tres que obervamos anteriormente.

Algo que debemos tener en cuenta, sin embargo, es la cantidad de minutos que estas parejas de jugadores están juntas en la cancha. Este dato permitiría tener una medida ajustada y nos permitiría identificar posibles mejoras en los quintetos que tiene en pista el equipo.

Cómo visualizar las asistencias del equipo

Es posible resumir algunos de los datos que hemos obtenido anteriormente mediante un heatmap que muestre la distribución de las asistencias. Para ello hacemos uso de la función plot_heatmap():

plot_heatmap(pbp, "BAR") +
    ggplot2::labs(
        title = "Patrón de asistencias del FC Barcelona",
        subtitle = "Euroliga 2018-2019 (primeros 28 partidos)",
        x = "Tirador",
        y = "Pasador")

El eje vertical representa al pasador mientras que el eje horizontal representa al jugador que tira tras el pase. La diagonal de este heatmap contiene el número total de asistencias de cada jugador. El color indica el número de asistencias que un jugador ha dado a otro jugador.

Avatar
Sergio Olmos Pardo
Estadístico | Científico de datos

Relacionado

comments powered by Disqus