Analítica de futbol con seaborn
En este ejemplo vamos a representar un mapa de calor o heatmap desde donde se iniciaron más pases en el partido de fútbol España-Inglaterra del 14 de julio de 2024.
- ⚽ Con
statsbombpy
obtenemos los datos del partido - 📉 Con
seaborn
representamos la información gráficamente.
Primero obtenemos los datos usando el match_id
de ese partido. Después filtramos los datos para obtener el origen de los pases que realizó Inglaterra a lo largo del partido.
from statsbombpy import sb
import seaborn as sns
import matplotlib.pyplot as plt
ev = sb.events(match_id=3943043)
ev = ev.loc[
(ev['type'] == "Pass") &
(ev['team'] == "England")]
Llegados aquí, en ev
tenemos todos los eventos relativos a pases de Inglaterra. Pero lo más importante para el ejemplo es:
- 🎬 El campo
location
: El punto de inicio de cada pase. - 🏁 El campo
pass_end_location
: El punto donde finalizó el pase.
Ahora con seaborn
representamos el heatmap de donde se iniciaron los pases. Esto nos permite hacernos una idea de los puntos calientes desde donde se inician los pases. Podemos ver que el portero inició muchos saques.
plt.figure(figsize=(8, 4))
plt.subplot(1, 2, 1)
ax1 = sns.histplot(
x=ev['location'].str[0],
y=ev['location'].str[1],
bins=(20, 20), cmap="YlGnBu", cbar=True)
ax1.set_aspect('equal', 'box')
plt.title('España/Inglaterra 14/07/2024\n'
'Heatmap inicio de pases')
Realizamos lo mismo con los puntos donde se finalizaron los pases. Como puedes ver usamos str[0]
y str[1]
. Estas son las coordenadas x
e y
en el campo.
plt.subplot(1, 2, 2)
ax2 = sns.histplot(
x=ev['pass_end_location'].str[0],
y=ev['pass_end_location'].str[1],
bins=(20, 20), cmap="YlGnBu", cbar=True)
ax2.set_aspect('equal', 'box')
plt.title('España/Inglaterra 14/07/2024\n'
'Heatmap fin de pases')
plt.tight_layout()
plt.show()
✏️ Ejercicios:
- Realiza la misma representación para España y compáralo con el heatmap que acabamos de ver de Inglaterra.