UnderData: Cómo Creé una Librería en Python para Analizar Estadísticas de Fútbol
Publicado el 31 de agosto de 2024 en Datos Deportivos

Como analista de datos y aficionado al fútbol, siempre me ha fascinado la historia que los números pueden contar sobre un partido. Sitios como understat.com son una auténtica mina de oro, con estadísticas detalladas de tiros, pases y métricas avanzadas como los Goles Esperados (xG). El único problema: no tienen una API pública.
Si quería analizar estos datos a escala, enfrentaba el mismo desafío que muchos: escribir scripts de web scraping una y otra vez. Era un proceso repetitivo y poco eficiente. Así que decidí resolver el problema de raíz y, en el proceso, crear algo útil para la comunidad.
Así nació UnderData, mi propia librería de Python diseñada para una sola cosa: hacer que obtener datos de understat.com
sea increíblemente simple. En este post, te cuento la historia detrás de la herramienta y te muestro cómo puedes usarla para empezar tus propios análisis.
El Problema: Datos valiosos, acceso complicado
La web está llena de datos valiosos, pero a menudo no están en un formato fácil de consumir. El web scraping es la solución clásica, pero tiene sus desventajas:
- Es frágil: Un pequeño cambio en el HTML del sitio puede romper tu script.
- Es repetitivo: Escribir la misma lógica para encontrar y extraer tablas es tedioso.
- No es escalable: Mantener scripts individuales para diferentes tipos de datos (jugadores, partidos, ligas) se vuelve un caos.
Yo quería una solución que me permitiera pedir los datos de forma tan simple como: "dame todas las estadísticas de pases de Lionel Messi en la temporada 2018/2019"
.
La Solución: Construyendo UnderData
Decidí encapsular toda la lógica de scraping en una librería de Python robusta y fácil de usar. Los principios de diseño fueron claros:
- Interfaz Sencilla: Métodos intuitivos para cada tipo de dato (
get_player_stats
,get_match_shots
, etc.). - Salida en DataFrame de Pandas: La librería debía devolver los datos en el formato que cualquier analista de datos en Python espera y ama.
- Mantenibilidad: Una estructura de código limpia que me permitiera actualizarla fácilmente si
understat.com
cambia su estructura.
¿Cómo Usar UnderData
?
Después de instalarla con pip (pip install underdata
), obtener los datos de un jugador es tan simple como esto:
import pandas as pd
from underdata import Understat
# Creamos una instancia del scraper
understat = Understat()
# Obtenemos los datos de un jugador por su ID en Understat
player_data = understat.get_player_stats(player_id=834)
# ¡Y listo! Tenemos un DataFrame de Pandas listo para analizar
print(player_data.head())
Con solo tres líneas de código, hemos resuelto todo el complejo proceso de scraping y ahora podemos concentrarnos en lo que realmente importa: el análisis.
Un Ejemplo de Análisis Rápido
Una vez que UnderData
nos da los datos, las posibilidades son infinitas. Por ejemplo, podríamos obtener los datos de tiros de un partido y visualizar las zonas de mayor peligro con un mapa de calor.
import seaborn as sns
import matplotlib.pyplot as plt
from FCPython import createPitch # Usando una librería para dibujar la cancha
# Obtenemos los datos de tiros de un partido específico
match_shots = understat.get_match_shots(match_id=12345)
# Creamos la cancha
pitch, ax = createPitch()
# Filtramos los tiros del equipo local
home_shots = match_shots[match_shots['h_a'] == 'h']
# Creamos un mapa de calor con la ubicación de los tiros
sns.kdeplot(
x=home_shots['X'] * 100, # Understat usa una escala de 0-1
y=home_shots['Y'] * 100,
shade=True,
cmap='Reds',
ax=ax
)
plt.title('Mapa de Calor de Tiros del Equipo Local')
plt.show()
Conclusión
Construir UnderData fue un proyecto increíblemente gratificante. No solo resolvió un problema personal, sino que me permitió crear una herramienta que otros en la comunidad de análisis de datos deportivos pueden usar. Demuestra que, a veces, el primer paso para un gran análisis es construir la puerta de acceso a los datos.
Si te interesa el análisis de fútbol o quieres ver cómo está construida la librería por dentro, te invito a visitar el repositorio en GitHub.

Escrito por
Osvaldo Trujillo
Ingeniero de Machine Learning, Arquitecto AWS y desarrollador. Apasionado por la tecnología y la creación de soluciones que aportan valor a través de los datos.
GitHub LinkedIn Contáctame