noblogo.org

Creare un campo da calcio in Python

L'applicazione della Data Science nel contesto calcistico è in costante espansione. I lettori del mio profilo su Mastodon avranno sicuramente notato la mia profonda ossessione per l'analisi dei dati e la creazione di grafici. Spesso, quando le cose si vogliono fare un pochino più complicate, si ha bisogno di strumenti più flessibili che permettano di programmare visualizzazioni più complesse e personalizzabili rispetto agli strumenti No-Code che offre il mercato.

Bene, python ci aiuta in questo!

MatPlotLib una libreria per creare Grafici Personalizzati!

La noia dello spiegare da dove nasce MatPlotLib e perchè è utilizzata moltissimo oggigiorno la lascio a voi, se proprio ci tenete cercatela su google (o meglio su librex 😌).

Quello che invece ci terrei particolarmente a mostrare è una piccolissima lezione pratica su come stampare il nostro campo da calcio mediante questa nota libreria di python. Andiamo!

Iniziamo: quanto è lungo un campo?

Senza perderci in chiacchiere, la dimensione massima consentita per un campo da calcio dalla FIFA risulta essere di 130x90 mq. Quindi, direi di iniziare disegnando il nostro rettangolo di gioco, no?

Prima cosa dobbiamo chiaramente installare e importare la nostra libreria. Consiglio per tale scopo l’utilizzo di anaconda, dategli un’occhiata, vi sarà molto utile in futuro. Alternativamente, potete sempre utilizzare la classica via pip install matplotlib e procedere ad un'installazione globale sulla vostra macchina.

Una volta fatto, basta importarla nel nostro script python (con il banale import matplotlib).

Ora che è tutto pronto, passiamo alle cose interessanti:

fig=plt.figure() # Creiamo la nostra figura/contenitore per il nostro grafico
ax=fig.add_subplot(1,1,1) # Aggiungiamo al contenitore un solo sottografico

# Disegnamo il rettangolo
plt.plot([0,0],[0,90])
plt.plot([0,130],[90,90])
plt.plot([130,130],[90,0])
plt.plot([130,0],[0,0])

plt.show() # Mostra a video il grafico

Vediamo cosa potrebbe generare confusione:

Andando ad eseguire il codice otteniamo:

Rettangolo

Perchè le linee sono colorate? MatPlotLib le colora banalmente per distinguerle, avremmo potuto specificare noi stessi il colore scrivendo:

plt.plot([0,0],[0,90], color="blue")
plt.plot([0,130],[90,90], color="orange")
plt.plot([130,130],[90,0], color="green")
plt.plot([130,0],[0,0], color="red")

Disegnamo il centro campo

# Creiamo una variabile per il centrocampo
centreSpot = plt.Circle((65,45),0.8,color="blue")

# E un altra per il cerchio
centreCircle = plt.Circle((65,45),9.15,color="red",fill=False)

# Queste due operazioni NON disegneranno il cerchio nel contenitore
# Passiamo alla scrittura sulla figura attraverso la seguente funzione.
ax.add_patch(centreSpot)
ax.add_patch(centreCircle)

plt.show()

Abbiamo utilizzato una classe presente in MatPlotLib di nome Circle dove gli argomenti indicano:

Centro campo

Area di rigore

Iniziamo a creare l'area di rigore disegnando il rettangolo come fatto precedentemente:

# Area di rigore di sinistra
plt.plot([16.5,16.5],[65,25],color="black")
plt.plot([0,16.5],[65,65],color="black")
plt.plot([16.5,0],[25,25],color="black")

Area di rigore

Analogamente potremmo fare l’area piccola al suo interno, mentre l’arco esterno come lo facciamo?

MatPlotLib ci viene in soccorso con una classe presente nel package matplotlib.patches di nome Arc, importiamola (meglio se aggiunta ad inizio file) e disegnamo il nostro arco:

from matplotlib.patches import Arc

# Area piccola
plt.plot([0,5.5],[54,54],color="black")
plt.plot([5.5,5.5],[54,36],color="black")
plt.plot([5.5,0.5],[36,36],color="black")

# Arco
arc = Arc((11,45),height=18.3,width=18.3,angle=0,theta1=310,theta2=50,color="red")

ax.add_patch(arc)

Arco e area piccola

Analizziamo ancora una volta gli argomenti:

Bene, ci siamo quasi, no? Ora basterà ripetere le stesse operazioni per l’area di rigore di destra e abbiamo finito, ma visto che ci siamo, che ne dite di aggiungere anche un bel dischetto e togliere gli assi dalla figura? 😊

leftPenSpot = plt.Circle((11,45),0.8,color="black")

plt.axis('off')

Dischetto area di rigore

Conclusioni

Abbiamo finalmente tutto ciò che ci serve per poter disegnare un nostro campo da calcio regolamentare in python mediante la libreria MatPlotLib, elemento necessario per poter fare analisi di dati sul nostro rettangolo di gioco. Stampare a video, chiaramente, è solo l’inizio; questa libreria offre strumenti utilissimi e potenti per poter esplorare dati complessi, creare grafici e, di conseguenza, analizzare le prestazioni di squadre e giocatori. Sempre a patto che:

Riusciate a disegnare la parte di destra 😂

Dovrebbe essere abbastanza facile, ma soprattutto un buon esercizio di ripasso per incidere nella vostra mente questi pochi concetti, provateci da soli! (vi lascio comunque la soluzione contenente l’intero codice usato in questo articolo: https://github.com/paolozu/python-football-pitch)

Spero di non avervi annoiato troppo e per qualsiasi domanda mi trovate qui: https://mastodon.uno/@brozu, ciao!