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 5 landen hier downloaden:
get_data
Schrijf een functie get_data 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 lijst van tuples. Voor elke speler is er een tuple met drie elementen: de naam van de speler (kolom Player), de positie (kolom Pos) en het aantal speelminuten (kolom Min_Playing_Time). De speelminuten worden opgenomen in de tuple als een int. Indien de speler niet gespeeld heeft (Min_Playing_Time = "NA") dan moet er 0 komen.
>>> get_data("Belgium") [('Jason Denayer', 'DF', 540), ('Toby Alderweireld', 'DF', 532), ('Thibaut Courtois', 'GK', 450), ('Hans Vanaken', 'MF,FW', 440), ('Jan Vertonghen', 'DF', 429), ('Timothy Castagne', 'MF,DF', 426), ('Youri Tielemans', 'MF', 370), ('Axel Witsel', 'MF', 360), ('Kevin De Bruyne', 'FW,MF', 352), ('Romelu Lukaku', 'FW', 333), ('Thomas Meunier', 'MF', 325), ('Dedryck Boyata', 'DF', 315), ('Leandro Trossard', 'FW', 299), ('Thorgan Hazard', 'MF', 291), ('Eden Hazard', 'FW', 237), ('Yannick Carrasco', 'MF', 208), ('Leander Dendoncker', 'MF', 264), ('Alexis Saelemaekers', 'MF', 243), ('Koen Casteels', 'GK', 180), ('Dries Mertens', 'FW', 164), ('Dennis Praet', 'MF', 160), ('Michy Batshuayi', 'FW', 156), ('Christian Benteke', 'FW', 141), ('Dodi Lukebakio', 'FW', 93), ('Simon Mignolet', 'GK', 90), ('Arthur Theate', 'DF', 84), ('Jeremy Doku', 'FW', 76), ('Charles De Ketelaere', 'FW', 66), ('Divock Origi', 'FW', 66), ('Nacer Chadli', 'MF', 55), ('Thomas Vermaelen', 'DF', 45), ('Thomas Foket', 'DF,MF', 67), ('Dante Vanzeir', 'FW,MF', 32), ('Albert Sambi Lokonga', 'MF', 17), ('Adnan Januzaj', 'FW,MF', 14), ('Wout Faes', 'DF', 0), ('Thomas Kaminski', 'GK', 0), ('Brandon Mechele', 'DF', 0), ('Matz Sels', 'GK', 0), ('Zinho Vanheusden', 'DF', 0), ('Yari Verschaeren', 'MF', 0)]
players_overview
Schrijf een functie players_overview met één argument: de naam van een land (string)
De functie haalt de gegevens van het desbetreffende land op en retourneert een dictionary die als sleutels de mogelijke posities op het veld heeft. De overeenkomstige waarde is een set van alle spelers die voor deze positie in aanmerking komen en die deelgenomen hebben aan minstens één wedstrijd (speelminuten > 0).
>>> players_overview("Belgium") {'DF': {'Jason Denayer', 'Jan Vertonghen', 'Thomas Vermaelen', 'Arthur Theate', 'Toby Alderweireld', 'Timothy Castagne', 'Dedryck Boyata', 'Thomas Foket'}, 'GK': {'Simon Mignolet', 'Koen Casteels', 'Thibaut Courtois'}, 'MF': {'Kevin De Bruyne', 'Dennis Praet', 'Alexis Saelemaekers', 'Nacer Chadli', 'Albert Sambi Lokonga', 'Yannick Carrasco', 'Hans Vanaken', 'Leander Dendoncker', 'Dante Vanzeir', 'Axel Witsel', 'Adnan Januzaj', 'Youri Tielemans', 'Timothy Castagne', 'Thomas Meunier', 'Thorgan Hazard', 'Thomas Foket'}, 'FW': {'Christian Benteke', 'Dodi Lukebakio', 'Romelu Lukaku', 'Kevin De Bruyne', 'Jeremy Doku', 'Michy Batshuayi', 'Divock Origi', 'Eden Hazard', 'Hans Vanaken', 'Dante Vanzeir', 'Charles De Ketelaere', 'Adnan Januzaj', 'Leandro Trossard', 'Dries Mertens'}}