Football Analytics

Data Analyst & Scientist2024

Client

Club de Football Régional

Rôle

Data Analyst & Scientist

Stack

Python, Pandas, Matplotlib, mplsoccer, Jupyter, Scikit-learn

Date

2024

01

Le Défi

Un club régional m'a contacté pour apporter une analyse de données de niveau professionnel à leur équipe. Ils avaient des stats de base mais manquaient d'outils pour extraire des insights tactiques. Le staff avait besoin de visualisations utilisables en réunion d'équipe — comparaisons de joueurs, schémas de passes, efficacité aux tirs — pour prendre des décisions basées sur les données.

02

La Solution

Construction d'un pipeline d'analyse complet inspiré des workflows de sciences du sport professionnels. Développement d'une suite d'outils Python : radar charts style StatsBomb pour le profilage multidimensionnel des joueurs ; cartes de réseaux de passes avec 'expected threat' (xT) ; shot maps classées par 'expected goals' (xG) par 90 minutes ; et rapports comparatifs normalisant les stats par position.

python
# Player radar chart — percentile-based profiling
def build_player_radar(player: str, df: pd.DataFrame):
    metrics = [
        "goals_p90", "xG_p90", "key_passes_p90",
        "progressive_carries", "tackles_won_pct",
        "interceptions_p90", "pass_completion_pct",
        "aerial_duels_won_pct"
    ]
    values = []
    for m in metrics:
        pctl = percentileofscore(df[m], df.loc[player, m])
        values.append(round(pctl, 1))

    radar = Radar(params=metrics, min_range=[0]*8,
                  max_range=[100]*8)
    fig, ax = radar.setup_axis()
    radar.draw_circles(ax, facecolor="#0a0a0a")
    radar.draw_radar(values, ax,
        kwargs_radar={"facecolor": "#2d6a4f", "alpha": 0.6})
    return fig

Radar chart basé sur les centiles utilisant mplsoccer pour le profilage joueur

Gallery image 1
Gallery image 2
Gallery image 3

Projet Suivant

Enseignement UI Design

Éducation / Design UX-UI