Statistieken spreken meer tot de verbeelding als het gevisualiseerd is. Het EK voetbal 2024 komt er op het moment van schrijven bijna aan en daarom leek het me een leuk idee om statistieken van een voetbalwedstrijd te visualiseren. Dat gaan we doen met Python en Matplotlib. Ik geef je een voorzetje hoe je schoten en balbezit van beide teams kan visualiseren. Er zijn natuurlijk nog meer statistieken, maar het is de bedoeling dat je daarmee zelf aan de slag gaat. Je doet kennis op om zelf verder te gaan. Laten we lekker beginnen!
Video
Van dit project is ook een video gemaakt. Je kan eerst de video bekijken als je wil of gewoon lekker verder lezen.
Wat gaan we precies maken?
Ik heb een eenvoudig Excel-bestand gemaakt. Hier kan je van elke voetbalwedstrijd de statistieken invullen, voor het thuis- en uitspelende team.
In het Excel-bestand staat nu Polen tegen Nederland als voorbeeld, maar je kan je eigen statistieken invullen, van een voetbalwedstrijd naar jouw keuze.
Met Python gaan we de gegevens uit het Excel-bestand halen en visualiseren. Daar hebben we ook packages voor nodig.
Met de openpyxl package kunnen we het Excel-bestand lezen. De Matplotlib package helpt ons om de data te visualiseren.
Later lees je hoe je deze packages kunt gebruiken in Python, dus geen zorgen voor nu.
De visualisaties komen er zo uit te zien van de schoten en het balbezit van beide teams:


Handig om alvast te hebben en weten
We gaan met Python aan de slag, dus daarom moet Python geïnstalleerd staan op je computer.
Heb je Python nog niet geïnstalleerd? Lees dan hier hoe je dat eenvoudig doet.
De code gaan we schrijven in de ontwikkelomgeving PyCharm. Met dit artikel kan je PyCharm eenvoudig installeren en gelijk je eerste testprogramma maken.
Staat Python en PyCharm al geïnstalleerd op je computer?
Verder is het ook wel handig als je basiskennis hebt van programmeren, om goed te begrijpen hoe de code werkt.
Heb je nog geen basiskennis van programmeren? Dan is het e-book “Snelcursus Leren Programmeren” een aanrader.
Als je er klaar voor bent, laten we dan naar de eerste stap gaan en echt beginnen!
Stap 1: Nieuw project aanmaken in PyCharm
Als eerste gaan we een nieuw project aanmaken. In PyCharm klik je linksboven op File > New Project… om dat te doen.
Ik noem het project in mijn geval “voetbalwedstrijd-statistieken-visualiseren”. Daarna maak je een Python bestand aan.
Weet je nog niet hoe dat moet in PyCharm? Lees dan dit artikel even terug.
Het Python bestand noem ik “main.py”.
Heb je een project aangemaakt met daarin een Python bestand? Dan gaan we verder!
Stap 2: Installeer openpyxl en Matplotlib packages
Zoals eerder al beschreven, hebben we de openpyxl en Matplotlib packages nodig. Dit maakt het makkelijker om data uit het Excel-bestand te halen en te visualiseren.
In PyCharm zelf kan je packages installeren. Als je hier nog niet bekend mee ben, lees je in deze stap eenvoudig hoe dat werkt.
Ook zou je het bijvoorbeeld via de Command Prompt in Windows kunnen doen. Het makkelijkste voor nu is om het in PyCharm te installeren.
Als je de packages hebt geïnstalleerd, dan gaan we ze importeren in de eerste twee regels code van het project:
import openpyxl import matplotlib.pyplot as plt
Pyplot is een submodule van Matplotlib. In de Pyplot package staan de functions die we nodig hebben, daarom gebruiken we deze submodule.
We gebruiken plt
als alias, om zo makkelijker te verwijzen naar de Pyplot package.
Stap 3: Gegevens uit cellen van Excel-bestand lezen
We moeten de gegevens uit het Excel-bestand halen om ze daadwerkelijk te kunnen visualiseren, dus dat gaan we eerst doen.
Dat doen we in een try
en except
blok. In de try
blok testen we of de code errors bevat. Als de code errors bevat, dan handelen we dat af in de except
blok.
De try
en except
blokken zetten we in een function. Als parameters zetten we bestandsnaam
en bladnaam
in de function, zodat we de bestandsnaam en bladnaam van het Excel-bestand later mee kunnen geven, bij het uitvoeren van de function.
De hele function ziet er zo uit:
# Gegevens lezen uit cellen van Excel-bestand def lees_excel_cellen(bestandsnaam, bladnaam): try: # Werkboek laden en blad selecteren werkboek = openpyxl.load_workbook(bestandsnaam) blad = werkboek[bladnaam] # Data uit cellen halen teams = [blad['B1'].value, blad['E1'].value] schoten = [blad['B5'].value, blad['E5'].value] balbezit = [blad['B9'].value, blad['E9'].value] return teams, schoten, balbezit except Exception as e: print("Fout bij het lezen van Excel-bestand:", e) return None, None, None
Je ziet dat het met de openpyxl package mogelijk is om het werkboek te laden. De bestandsnaam geven we later op de correcte wijze mee.
Net zoals de bladnaam, die geven we ook later mee. De bladnaam wordt netjes opgeslagen in de variabele blad
.
Zoals je ziet, is het eenvoudig om de data uit de cellen te halen en op te slaan in variabelen. Als alles goed gaat, worden de drie variabelen gereturned.
Het kan ook fout gaan. Dat handelen we af in de except
blok. Een foutmelding wordt dan op het scherm weergeven en de drie variabelen worden niet gereturned.
Deze code kan je zetten onder de eerste twee regels code (Packages importeren), met daartussen een witregel.
Stap 4: Schoten en balbezit visualiseren
In de eerste function hebben we de data uit de Excel cellen gehaald. Die data willen we gaan visualiseren.
We maken twee aparte functions waarin we de schoten en het balbezit van beide teams gaan visualiseren:
# Schoten visualiseren in horizontale staafdiagram def visualiseer_schoten(teams, schoten): plt.barh(teams, schoten) plt.title('Schoten per team') plt.show() # Balbezit visualiseren in taartdiagram def visualiseer_balbezit(teams, balbezit): plt.pie(balbezit, labels = teams, autopct='%d%%') plt.title('Balbezit in procenten') plt.show()
Deze code kan je onder de voorgaande code zetten, met een witregel ertussen om het netjes te houden.
In deze code zie je dat we gebruik maken van functions van de Pyplot package. Met deze functions kunnen we een horizontale staafdiagram en taartdiagram maken.
Op w3schools vind je ook goede uitleg over staaf– en taartdiagrammen met Matplotlib en Pyplot, mocht je er meer over willen lezen en mogelijkheden ontdekken.
Opvallend is autopct='%d%%'
. Daarmee kan je aangeven hoe je de getallen in procenten wil weergeven in de taartdiagram, in dit geval hele getallen.
Stap 5: Hoofdfunction aanmaken en uitvoeren
We zijn alweer bij de laatste stap aangekomen! De hoofdfunction is de function “where the magic happens”.
De function ziet er zo uit:
# Hoofdfunction def main(): bestandsnaam = 'voetbalwedstrijd-statistieken.xlsx' bladnaam = 'Blad1' # Lees data uit cellen uit Excel-bestand en sla data op teams, schoten, balbezit = lees_excel_cellen(bestandsnaam, bladnaam) # Als teams, schoten en balbezit data bevatten, dan de data visualiseren if teams and schoten and balbezit: visualiseer_schoten(teams, schoten) visualiseer_balbezit(teams, balbezit) else: print("Geen gegevens om te visualiseren.")
We geven netjes de bestandsnaam en bladnaam van het Excel-bestand door. Belangrijk is wel dat je het Excel-bestand in dezelfde map zet als het Python bestand waarin je programmeert.
De data halen we op door de lees_excel_cellen()
function aan te roepen. We geven de juiste bestandsnaam en bladnaam mee als arguments.
Teams, schoten en balbezit wordt gereturned en die slaan we ook op in de hoofdfunction.
Als alle data netjes is opgeslagen in teams
, schoten
en balbezit
, dan wordt de data gevisualiseerd door de juiste functions aan te roepen en de juiste arguments mee te geven.
Als teams, schoten en balbezit geen data bevatten, dan krijg je een foutmelding.
Als laatste moeten we de hoofdfunction nog uitvoeren, dat kan zo:
# Hoofdfunction uitvoeren main()
De volledige code ziet er zo uit:
import openpyxl import matplotlib.pyplot as plt # Gegevens lezen uit cellen van Excel-bestand def lees_excel_cellen(bestandsnaam, bladnaam): try: # Werkboek laden en blad selecteren werkboek = openpyxl.load_workbook(bestandsnaam) blad = werkboek[bladnaam] # Data uit cellen halen teams = [blad['B1'].value, blad['E1'].value] schoten = [blad['B5'].value, blad['E5'].value] balbezit = [blad['B9'].value, blad['E9'].value] return teams, schoten, balbezit except Exception as e: print("Fout bij het lezen van Excel-bestand:", e) return None, None, None # Schoten visualiseren in horizontale staafdiagram def visualiseer_schoten(teams, schoten): plt.barh(teams, schoten) plt.title('Schoten per team') plt.show() # Balbezit visualiseren in taartdiagram def visualiseer_balbezit(teams, balbezit): plt.pie(balbezit, labels = teams, autopct='%d%%') plt.title('Balbezit in procenten') plt.show() # Hoofdfunction def main(): bestandsnaam = 'voetbalwedstrijd-statistieken.xlsx' bladnaam = 'Blad1' # Lees data uit cellen uit Excel-bestand en sla data op teams, schoten, balbezit = lees_excel_cellen(bestandsnaam, bladnaam) # Als teams, schoten en balbezit data bevatten, dan de data visualiseren if teams and schoten and balbezit: visualiseer_schoten(teams, schoten) visualiseer_balbezit(teams, balbezit) else: print("Geen gegevens om te visualiseren.") # Hoofdfunction uitvoeren main()
Test eens of het programma werkt en voer het uit. Werkt het nog niet goed? Lees dan eens terug om te kijken waar je iets over het hoofd hebt gezien.
Belangrijk is ook om te begrijpen wat je precies gedaan hebt en niet blindelings te kopiëren en te plakken.
Anders is het lastig om verder aan het project te werken.
Maar voor nu heb je al een mooi opzetje staan! Ga er vooral verder mee als het je interessant lijkt.
Verder werken aan dit project
Met dit project kan je statistieken visualiseren van een voetbalwedstrijd en dit bijvoorbeeld mooi tonen op je website.
Of bijvoorbeeld delen op X of Facebook, je kan verschillende kanten op.
Hier enkele ideeën als je verder wil gaan met het project:
- Ook andere statistieken visualiseren, zoals passes en overtredingen
- Gebruik maken van verschillende visualisaties, op de website van Matplotlib lees je meer over verschillende plot types
- Nog nauwkeuriger fouten afhandelen
- Vergelijkingen maken tussen statistieken van verschillende voetbalwedstrijden
- Statistieken opslaan in database
Dit zijn een paar voorbeelden, maar er is veel mogelijk. Ga vooral lekker aan de slag en leer ervan!
Een extra tip is om gebruik te maken van ChatGPT. Je kan vragen hoe je iets kan doen in code en bijvoorbeeld om bepaalde code te verbeteren.
Let er wel op dat je blijft begrijpen waarom je bepaalde code gebruikt en hoe het werkt. Anders ga je op den duur de draad kwijtraken.
Op ProgrammeerPlaats lees je meer over de beste leermethodes om Python te leren, mocht je daar interesse in hebben.
Heb je vragen over dit project? Laat dan vooral hieronder een reactie achter.
Je kan ook contact opnemen.
Ga vooral lekker verder aan de slag!