[Visualización] Creando redes de pase con ggplot2

Vamos con una nueva entrada de visualización en la que veremos como crear la red de pases de un equipo a lo largo de un partido utilizando grafos. Lo vamos a hacer con el ejemplo del encuentro entre el Deportivo Alavés y el Valencia CF correspondiente a la jornada 10 de La Liga 2020-2021:

Visualización final

Resumen

Tipo de gráfico: Grafo. Este tipo de visualización dispone de un conjunto de nodos o vértices unidos por enlaces, que se conocen como aristas, que permiten representar relaciones entre elementos de un conjunto. Normalmente, los nodos se representan con puntos y las aristas con líneas.

En las redes de pases, los nodos representan a los jugadores. Además, en nuestro caso, el tamaño del punto representa el volumen de pases del jugador en particular. La ubicación del punto se calcula mediante la posición media desde donde ha realizado los pases cada jugador. Esto puede causar alguna confusión en caso de que un jugador cambie su posición durante el partido. Por ejemplo, si un extremo juega un tiempo en cada banda, su posición saldrá centrada en el grafo, cuando seguramente no haya realizado casi ningún pase en esa zona. Por ello, hay que contrastar las ubicaciones de cada jugador si algo no nos cuadra. Para el ejemplo sólo se han tenido en cuenta los jugadores que durante el partido han realizado más de 3 pases.

Las aristas representan las conexiones entre jugadores, es decir, los jugadores conectados han hecho pases entre ellos. El grosor y la opacidad de la línea representan la cantidad de pases entre ambos. Cuanto más gruesa y oscura, más veces habrán combinado entre ellos. Existe la opción de dibujar una línea en cada sentido de pase para identificar quién pasa a quién y cuánto, pero en nuestro caso sólo representaremos la conexión total entre jugadores. Sólo se tienen en cuenta los pases completados y, para este ejemplo, sólo se han representado las relaciones de más de 3 pases.

Fuente de datos: Lamentablemente no hay ninguna fuente de datos gratuita que nos dé la información de los eventos de pase con ubicación, así que utilizaremos un fichero de datos de eventing de inStat. Otra opción es realizar nosotros mismos la ardua tarea de registrar manualmente los pases utilizando alguna aplicación de tagging, como por ejemplo YouTube Coder de FC Python.

Después de preparar los datos del archivo XML de inStat, la tabla final tiene esta pinta:

Datos finales

Lenguaje de programación: R. Para realizar la visualización hemos utilizado el paquete ggplot2 usando geom_point y geom_segment para representar los nodos y las aristas. Además, para leer el fichero XML de inStat hemos utilizado el paquete xml2. Para dibujar el campo hemos usado SBPitch. Por último, utilizamos el paquete plotly para embellecer el grafico. Todo el código se puede encontrar en nuestro repositorio de GitHub. Veamos el resultado:

Visualización con ggplot2

¿Qué vemos?

Con este tipo de visualizaciones podemos identificar por dónde juega principalmente un equipo, cómo se distribuyen en el campo, cuáles son los jugadores que más combinan o incluso intuir el estilo de juego.

En nuestro ejemplo vemos cómo el peso de juego del Alavés recae sobre todo en la banda izquierda, donde se sitúan Duarte y Rioja. Además, se aprecia que apenas hay interacción entre los medios y los delanteros. Son los jugadores de banda los que se encargan de buscar a los atacantes, ya sea con centros o con balones en largo.

Otro detalle interesante es ver cómo corroboramos el buen entendimiento de Lucas con Joselu y Rioja.

Si queréis saber más sobre la teoría de grafos aplicada al fútbol, os recomiendo que echéis un vistazo a los proyectos de la gente de Fútbol y Redes. También podéis dejar vuestros comentarios y dudas sobre este artículo en Twitter.

Política de Privacidad