DEVFUT

Mapa de Rendimiento de Viktor Gyökeres en el Sporting CP 24/25

🎯 Visualizando el rendimiento de un futbolista con Python: Caso Viktor Gyökeres

Gráfico que muestra el rendimiento de Viktor Gyökeres en el Sporting CP, con un mapa de colores que refleja su desempeño en diferentes aspectos como ataque, posesión, y defensa.


¿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.
Gráfico de radar que ilustra el rendimiento de Viktor Gyökeres en el Sporting CP, con métricas de ataque, posesión y defensa, mostrando estadísticas como goles sin penalización, recuperación de balón y pases clave.

🤝 ¿Te gustó este análisis? ¡Conectemos!

Me apasiona el análisis de datos aplicado al fútbol y otros proyectos con Python. Si te interesa este tipo de contenido, puedes seguirme en mis redes sociales para más proyectos, tutoriales y herramientas:






📬 También puedes dejarme tus dudas o sugerencias en los comentarios. ¡Gracias por leer!

Publicar un comentario

0 Comentarios