Voor deze oefening maken we gebruik van een dataset met statistieken van de spelers die deelnamen aan de kwalificatiewedstrijden voor het wereldkampioenschap voetbal in Qatar in 2022.
Voor elk land dat deelnam aan de kwalificatie, beschikken we over een bestand met alle spelers die minstens één keer opgeroepen werden voor een kwalificatiewedsstrijd.
De bestanden werden gedownload vanop Kaggle via deze link: https://www.kaggle.com/datasets/mateusdesousamartins/world-cup-2022-national-teams-data-set?resource=download1
Als voorbeeld zie je hieronder de eerste regels van het bestand "2022 Belgium.csv".
Elke speler staat op een afzonderlijke rij en voor elke speler zijn er 24 kolommen (inclusief eerste kolom met een volgnummer). Voor deze oefening zijn we enkel geïnteresseerd in deze kolommen:
Voor elk land X beschik je over een databestand 2022 X.csv waarin X de naam van het land (in het Engels) voorstelt.
De bestanden zijn geëncodeerd via utf-8 encoding. Je kan ze openen via volgende instructie:
f = open('2022 X.csv', 'r', encoding='utf-8')
De bestanden zijn beschikbaar in het working directory van Dodona. Als je de oefening echter lokaal wilt maken (in PyCharm of in een Jupyter Notebook), dan moet je de bestanden downloaden en bewaren in dezelfde map als je .py of .ipynb bestand.
Je kan de bestanden van 7 landen hier downloaden:
get_players
Schrijf een functie get_players met één argument: de naam van een land (string)
De functie leest het bestand van het juiste land in, dat de naam "2022 X.csv" heeft, waarin X vervangen wordt door de naam van het land. Je mag ervan uit gaan dat de naam van het land correct gespeld is zoals in de bestandsnaam.
De functie retourneert een dictionary waarin de sleutels de namen van de spelers zijn, de waarde is het voor elke speler het antaal doelpunten per wedstrijd. Dit wordt berekend door het aantal gemaakte doelpunten (Gls) te delen door het aantal gespeelde matchen (MP). Dit getal wordt niet afgerond. Indien de speler niet gespeeld heeft (MP = 0), dan wordt die niet opgenomen in de dictionary.
>>> get_players("Belgium") {'Jason Denayer': 0.0, 'Toby Alderweireld': 0.0, 'Thibaut Courtois': 0.0, 'Hans Vanaken': 0.6, 'Jan Vertonghen': 0.0, 'Timothy Castagne': 0.0, 'Youri Tielemans': 0.0, 'Axel Witsel': 0.25, 'Kevin De Bruyne': 0.5, 'Romelu Lukaku': 1.25, 'Thomas Meunier': 0.0, 'Dedryck Boyata': 0.0, 'Leandro Trossard': 0.2857142857142857, 'Thorgan Hazard': 0.5, 'Eden Hazard': 0.25, 'Yannick Carrasco': 0.3333333333333333, 'Leander Dendoncker': 0.0, 'Alexis Saelemaekers': 0.2, 'Koen Casteels': 0.0, 'Dries Mertens': 0.0, 'Dennis Praet': 1.0, 'Michy Batshuayi': 0.3333333333333333, 'Christian Benteke': 0.5, 'Dodi Lukebakio': 0.0, 'Simon Mignolet': 0.0, 'Arthur Theate': 0.0, 'Jeremy Doku': 1.0, 'Charles De Ketelaere': 0.0, 'Divock Origi': 0.0, 'Nacer Chadli': 0.0, 'Thomas Vermaelen': 0.0, 'Thomas Foket': 0.3333333333333333, 'Dante Vanzeir': 0.0, 'Albert Sambi Lokonga': 0.0, 'Adnan Januzaj': 0.0}
top_scorers
Schrijf een functie top_scorers met één argument: een lijst met een onbepaald aantal landen (strings)
De functie haalt de gegevens van de opgegeven landen op en retourneert een set met topscorers. Dit zijn de spelers die de hoogste score behaald hebben zoals in get_players wordt berekend. Elke speler wordt opgenomen in de set als een string: speler, land. Meestal zal de set slechts één speler bevatten, maar in sommige gevallen is er een ex-aequo. In dat geval is de volgorde waarop je de spelers in de set opneemt niet van belang.
>>> top_scorers(["Belgium", "Argentina", "Croatia", "Ghana", "France"]) {'Romelu Lukaku, Belgium'} >>> top_scorers(['Ghana', 'Poland', 'Denmark', 'France']) {'Marcus Ingvartsen, Denmark', 'Robert Skov, Denmark', 'Robert Lewandowski, Poland'}