🎯 Visualizando el rendimiento de un futbolista con Python: Caso Viktor Gyökeres
¿Te gustaría crear visualizaciones de datos como las que usan analistas deportivos profesionales? En este artículo te mostraré paso a paso cómo construí un gráfico estilo pizza para analizar el rendimiento del delantero Viktor Gyökeres usando Python en Google Colab.
Utilizaremos herramientas como mplsoccer, matplotlib y otras librerías de análisis y visualización para generar un gráfico atractivo y explicativo. Si estás interesado en el análisis de datos deportivos, este proyecto es una excelente forma de empezar con visualizaciones avanzadas sin salir del entorno gratuito de Google Colab.
Al final, podrás aplicar este método para otros jugadores, adaptar el estilo visual y compartir tus propios análisis como un verdadero scout digital.
⚙️ 1. Herramientas necesarias
!pip install mplsoccer
import pandas as pd
import time
import matplotlib.pyplot as plt
import numpy as np
from urllib.request import urlopen
from PIL import Image
from mplsoccer import PyPizza, add_image, FontManager
📥 2. Carga de datos
Los valores fueron extraídos de FBref (https://fbref.com/es/jugadores/4d5a9185/Viktor-Gyokeres)
df_player_percentil = get_player_percentiles('https://fbref.com/es/jugadores/4d5a9185/Viktor-Gyokeres')
df_player_percentil = df_player_percentil.dropna()
df_params_values['Estadísticas'] = df_params_values['Estadísticas'].replace({
'npxG: Goles esperados (xG) sin contar penaltis': 'xG sin penales',
'Acciones para la creación de tiros': 'Acciones de tiro',
'% de pase completo': 'Precisión de pase',
'Toques (Ataq. pen.)': 'Toques en el área',
'Pases progresivos': 'Pases prog.',
'Acarreos progresivos': 'Conducciones prog.'
})
params = df_params_values['Estadísticas'].tolist()
values = df_params_values['Percentil'].values.tolist()
🎨 3. Preparación del estilo gráfico
Se definen los colores y el diseño visual del gráfico.
slice_colors = ["#1A78CF"] * 5 + ["#FF9300"] * 5 + ["#D70232"] * 5
text_colors = ["#000000"] * 10 + ["#F2F2F2"] * 5
🍕 4. Creación del gráfico tipo Pizza
Se genera el gráfico principal con PyPizza.
baker = PyPizza(
params=params,
background_color="#222222",
straight_line_color="#EBEBE9",
straight_line_lw=1,
last_circle_lw=0,
other_circle_lw=0,
inner_circle_size=20
)
fig, ax = baker.make_pizza(
values,
figsize=(8, 8.5),
color_blank_space="same",
slice_colors=slice_colors,
value_colors=text_colors,
value_bck_colors=slice_colors,
blank_alpha=0.4,
kwargs_slices=dict(
edgecolor="#000000", zorder=2, linewidth=1
),
kwargs_params=dict(
color="#F2F2F2", fontsize=11,
fontproperties=font_normal.prop, va="center"
),
kwargs_values=dict(
color="#F2F2F2", fontsize=11,
fontproperties=font_normal.prop, zorder=3,
bbox=dict(
edgecolor="#000000", facecolor="cornflowerblue",
boxstyle="round,pad=0.2", lw=1
)
)
)
🖼️ 5. Agregar título, leyenda y créditos
Esto da contexto y estilo profesional al gráfico.
# agregar titulo
fig.text(
0.515, 0.975, "Viktor Gyökeres - Sporting C.P", size=25,
ha="center", fontproperties=font_title.prop, color="#F2F2F2"
)
# agregar créditos
CREDIT_1 = "Data: FBref | Inspirado por: MPLSoccer"
CREDIT_2 = "A mayor valor de la barra, signfica que está entre los números más altos de la categoría"
CREDIT_3 = "Jugador comparado con otros de su misma posición en ligas de nivel similar el último año."
fig.text(
0.99, 0.02, f"{CREDIT_1}\n{CREDIT_2}\n{CREDIT_3}", size=9,
fontproperties=font_italic.prop, color="#F2F2F2",
ha="right"
)
fig.text(
0.34, 0.925, " Ataque Posesión Defensa", size=14,
fontproperties=font_bold.prop, color="#F2F2F2"
)
fig.patches.extend([
plt.Rectangle(
(0.31, 0.9225), 0.025, 0.021, fill=True, color="#1a78cf",
transform=fig.transFigure, figure=fig
),
plt.Rectangle(
(0.462, 0.9225), 0.025, 0.021, fill=True, color="#ff9300",
transform=fig.transFigure, figure=fig
),
plt.Rectangle(
(0.632, 0.9225), 0.025, 0.021, fill=True, color="#d70232",
transform=fig.transFigure, figure=fig
),
])
👤 6. Agregar imagen del jugador como fondo
Este paso mejora el diseño visual del centro del gráfico.
URL = "https://i.postimg.cc/RV0QFWMH/vg-cropped.png"
fdj_cropped = Image.open(urlopen(URL))
ax_image = add_image(
fdj_cropped, fig, left=0.4478, bottom=0.4315, width=0.13, height=0.127
)
🧾 7. Resultado final
🧠 ¿Qué vemos?
- Gyökeres destaca claramente en ataque (percentiles casi perfectos).
- Participa poco en defensa, como es común en delanteros.
- Tiene una buena contribución en posesión, especialmente en conducciones.
🤝 ¿Te gustó este análisis? ¡Conectemos!
0 Comentarios