In het kader van de voorbereiding van de census in 2021, heeft Statbel, het Belgische statistiekbureau, de verschillende mogelijkheden bestudeerd om diverse administratieve databanken te gebruiken om informatie te verkrijgen over het onderwijs. In afwachting van de publicatie van de definitieve cijfers voor het referentiejaar 2021, werden de resultaten van het jaar 2017 voorgesteld op de website van Statbel. Deze zijn toegespitst op de bevolking van 25 jaar en ouder, aangezien vanaf die leeftijd de meerderheid van de bevolking de schoolopleiding heeft beëindigd.
Bron: https://statbel.fgov.be/nl/themas/datalab/datalab-census-onderwijs1
We werken in deze oefening met een vereenvoudigd bestand van de opleidingsgegevens per provincie en per gemeente in 2017. De cijfers zijn gebaseerd op een bestand van Statbel.
Hieronder zie je een schermafdruk van de eerste lijnen van het bestand.
Elke rij in het databestand bevat 4 kolommen:
Voor elke gemeente zijn er 5 rijen in het databestand overeenkomstig elk van de opleidingsniveaus in punt 3. De som van deze 5 aantallen is het totaal aantal inwoners van deze gemeente.
Programma debuggen
Je kan voor deze oefening de Python Tutor (na indienen op Dodona) niet gebruiken aangezien deze geen toegang heeft tot de bestanden. Als je de oefening wil debuggen, zal je deze lokaal moeten maken in PyCharm of in een Jupyter Notebook. Je moet dan het bestand downloaden en bewaren in dezelfde map als je .py of .ipynb bestand.
Je kan het bestand hier downloaden: opleidingsniveau.csv2
inlezen
Schrijf een functie inlezen met één argument: een provincie (string). Je mag ervan uitgaan dat deze provincie correct gespeld is zoals in het databestand.
De functie leest het bestand 'opleidingsniveau.csv' in en retourneert een geneste dictionary met twee niveaus.
De hoofddictionary heeft als sleutels de gemeenten enkel van deze provincie (string).
Voor elke gemeente is de waarde opnieuw een dictionary met 5 elementen. De sleutels zijn de strings "HIGH", "MIDDLE", "LOW", "NAP" en "UNK". De waarden zijn de overeenkomstige aantallen (type int).
>>> inlezen('Brussels Hoofdstedelijk Gewest') {'Anderlecht': {'NAP': 26644, 'LOW': 33866, 'MIDDLE': 18323, 'HIGH': 13066, 'UNK': 26342}, 'Oudergem': {'NAP': 5988, 'LOW': 5678, 'MIDDLE': 5569, 'HIGH': 9809, 'UNK': 6269}, 'Sint-Agatha-Berchem': {'NAP': 5224, 'LOW': 6644, 'MIDDLE': 4646, 'HIGH': 4552, 'UNK': 3635}, 'Brussel': {'NAP': 36338, 'LOW': 40666, 'MIDDLE': 25239, 'HIGH': 27046, 'UNK': 47256}, 'Etterbeek': {'NAP': 7452, 'LOW': 7411, 'MIDDLE': 6286, 'HIGH': 10852, 'UNK': 15413}, 'Evere': {'NAP': 8200, 'LOW': 11068, 'MIDDLE': 7114, 'HIGH': 5966, 'UNK': 8046}, 'Vorst (Brussel-Hoofdstad)': {'NAP': 10945, 'LOW': 12388, 'MIDDLE': 8470, 'HIGH': 11881, 'UNK': 12062}, 'Ganshoren': {'NAP': 4913, 'LOW': 6599, 'MIDDLE': 4616, 'HIGH': 4290, 'UNK': 4178}, 'Elsene': {'NAP': 11558, 'LOW': 11267, 'MIDDLE': 12272, 'HIGH': 21834, 'UNK': 29313}, 'Jette': {'NAP': 10902, 'LOW': 12984, 'MIDDLE': 9265, 'HIGH': 9729, 'UNK': 9053}, 'Koekelberg': {'NAP': 5062, 'LOW': 5346, 'MIDDLE': 3434, 'HIGH': 3191, 'UNK': 4576}, 'Sint-Jans-Molenbeek': {'NAP': 24105, 'LOW': 27994, 'MIDDLE': 14642, 'HIGH': 9649, 'UNK': 20239}, 'Sint-Gillis': {'NAP': 8583, 'LOW': 10054, 'MIDDLE': 6414, 'HIGH': 9644, 'UNK': 15776}, 'Sint-Joost-ten-Node': {'NAP': 5636, 'LOW': 7042, 'MIDDLE': 3025, 'HIGH': 2585, 'UNK': 8827}, 'Schaarbeek': {'NAP': 29568, 'LOW': 31476, 'MIDDLE': 18202, 'HIGH': 20816, 'UNK': 32980}, 'Ukkel': {'NAP': 13753, 'LOW': 13375, 'MIDDLE': 13475, 'HIGH': 23724, 'UNK': 17980}, 'Watermaal-Bosvoorde': {'NAP': 4202, 'LOW': 4686, 'MIDDLE': 4268, 'HIGH': 8086, 'UNK': 3629}, 'Sint-Lambrechts-Woluwe': {'NAP': 9333, 'LOW': 8232, 'MIDDLE': 8963, 'HIGH': 15613, 'UNK': 13075}, 'Sint-Pieters-Woluwe': {'NAP': 7258, 'LOW': 5104, 'MIDDLE': 6155, 'HIGH': 13153, 'UNK': 9547}}
toptien
Schrijf een functie toptien met twee argumenten: provincie (string) en opleidingsniveau (string): "HIGH", "MIDDLE", "LOW", "NAP" of "UNK".
De functie berekent voor elke gemeente het percentage van inwoners dat voldoet aan het opgegeven opleidingsniveua. Dit percentage wordt niet afgerond, je mag ervan uitgaan dat dit uniek is voor elke gemeente (d.w.z. dat geen twee gemeenten uit dezelfde provincie exact hetzelfde percentage hebben aan inwoners met dit opleidingsniveau).
De functie retourneert een lijst met 10 gemeenten (strings). De gemeenten worden gesorteerd op basis van het percentage in aflopende volgorde (hoogste percentage eerst).
Je mag ervan uitgaan dat zowel de provincie als het opleidingsniveau correct gespeld zijn zoals in het databestand.
>>> toptien('Provincie Oost-Vlaanderen', 'HIGH') ['Sint-Martens-Latem', 'De Pinte', 'Merelbeke', 'Melle', 'Destelbergen', 'Horebeke', 'Oosterzele', 'Gent', 'Nazareth', 'Wortegem-Petegem']