La similitud de jugadores es un concepto utilizado para comparar a dos o más jugadores en función de sus características y desempeño en el campo. Esta técnica se basa en analizar datos estadísticos como goles, asistencias, tiros, entre otros, para identificar patrones y encontrar similitudes entre diferentes jugadores. La idea principal es medir qué tan cercanos son en cuanto a rendimiento, estilo de juego o habilidades, lo cual es útil para el análisis de rendimiento, identificación de jugadores emergentes o sustituciones en un equipo.
Con Python, podemos aplicar este concepto utilizando herramientas de análisis de datos y machine learning. Python nos permite manipular grandes conjuntos de datos, normalizar estadísticas y utilizar métricas como la similitud coseno o la distancia euclidiana para cuantificar la similitud entre jugadores. Esto es de gran utilidad en escenarios como el scouting, análisis de rivales o incluso para personalizar entrenamientos basados en el estilo de juego de cada jugador. De esta manera, Python nos ayuda a realizar comparaciones rápidas y precisas entre jugadores, optimizando el proceso de toma de decisiones en el ámbito deportivo.
Para este caso, utilizaremos la librería Griffis-Soccer-Analysis de Ben Griffis, tomando como base el código presentado por Federico Rábanos en su canal de YouTube LanusStats.
A continuación la explicación del código:
1. Instalamos la librería
pip install git+https://github.com/griffisben/griffis_soccer_analysis.git
2. Importamos librería
from griffis_soccer_analysis.similarity import *
3. Listamos Ligas disponibles
available_leagues()
4. Listamos los equipos disponibles de la liga que deseamos. El nombre de la liga debe coincidir exactamente con el del listado anterior.
teams_in_league(league='La Liga 23-24')
5. Listamos los jugadores disponibles del equipo que deseamos. El nombre del equipo debe coincidir exactamente con el del listado anterior.
available_players(
league = 'La Liga 23-24',
team = 'Barcelona'
)
6. Ingresamos el nombre del jugador del cual obtendremos jugadores similares.
El formato de la variable Player: nombre_jugador(edad,Equipo,Liga)
El formato de la variable Position: posición exacta del jugador
También podemos ingresar el número de jugadores a comparar y su rango de edad.
En esta parte, ten paciencia; la búsqueda suele tardar algunos minutos.
df, info, base = player_similarity(
player = "R. Lewandowski (35, Barcelona, La Liga 23-24)",
position = "ST",
nplayers = 200,
min_age = 20, # Edad mínima de los jugadores similares (siempre dentro del 5% superior)
max_age = 26, # Edad máxima de los jugadores similares (siempre dentro del 5% superior)
similar_lg_team = True,
mean_sim = False,
)
7. Hacemos un listado de 15 registros
df.head(15)
8. Pasos para segmentar jugadores similares en ligas específicas. En este caso, se realiza la segmentación dentro de las cinco grandes ligas.
ligas = ['Bundesliga 23-24',
'Ligue 1 23-24',
'La Liga 23-24',
'Premier League 23-24',
'Serie A 23-24']
9. En las siguientes líneas de código no es necesario que modifiques nada.
# Extraer el nombre de la liga del campo Player
df['League'] = df['Player'].str.extract(r',\s*([^,]*\s*\d{2}-\d{2})\)')
# Mostrar los resultados de la extracción
print("Resultados de la extracción de ligas:")
print(df[['Player', 'League']])
# Filtrar los jugadores que pertenecen a las ligas en la lista
df_filtered = df[df['League'].isin(ligas)]aaa
# Mostrar los registros filtrados en un DataFrame
print("\nRegistros filtrados:")
print(df_filtered[['Player', 'League']].reset_index(drop=True))
10. Obtenemos el resultado final con la lista de jugadores similares
df_filtered
Cabe indicar que la librería utilizada no permite hacer búsquedas de Porteros.
El código utilizado lo puedes revisar y descargar desde mi repositorio de GitHub. Estaré muy agradecido si me ayudas a compartir este post