Voor deze oefening vertrekken we van bestanden gedownload via StatBel (statbel.fgov.be). De bestanden geven een overzicht van hoeveelheid vis die verhandeld werd in de Belgische havens.
We beschikken over gegevens van de periode 2003 tot 2019. Voor elk jaar hebben we een csv-bestand.
Per vissoort geeft het bestand het aantal verhandelde kilogram van deze vis per haven. Er zijn drie havens: Oostende, Zeebrugge en Nieuwpoort
Hieronder zie je de schermafdruk van de eerste 10 regels van het bestand van 2019. Voor de andere jaren hebben de bestanden volledig dezelfde vorm. Als in een bepaalde haven een bepaalde vissoort niet verhandeld werd dat jaar, dan staat er "-" (dit komt dus overeen met 0 kg).
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 de bestanden downloaden en bewaren in dezelfde map als je .py of .ipynb bestand.
Je kan de bestanden hier downloaden:
2003.csv1, 2004.csv2, 2005.csv3, 2006.csv4, 2007.csv5, 2008.csv6, 2009.csv7, 2010.csv8, 2011.csv9, 2012.csv10, 2013.csv11, 2014.csv12, 2015.csv13, 2016.csv14, 2017.csv15, 2018.csv16, 2019.csv17
inlezen
Schrijf een functie inlezen met één argument: een jaartal (int).
De functie leest het bestand van dat jaar in en retourneert een geneste dictionary waarvan de sleutels in de hoofddictionary de vissoorten zijn (string), in de subdictionary zitten telkens drie key-value paren, met als sleutels de havens (string) en als waarden het overeenkomstig aantal kg (int).
>>> inlezen(2019) {'Schelvis': {'Oostende': 29950, 'Zeebrugge': 62661, 'Nieuwpoort': 260}, 'Kabeljauw': {'Oostende': 110329, 'Zeebrugge': 242181, 'Nieuwpoort': 702}, 'Koolvis': {'Oostende': 784, 'Zeebrugge': 2064, 'Nieuwpoort': 0}, 'Wijting': {'Oostende': 80158, 'Zeebrugge': 81058, 'Nieuwpoort': 4268}, 'Pollak': {'Oostende': 7610, 'Zeebrugge': 12410, 'Nieuwpoort': 17}, 'Leng': {'Oostende': 4926, 'Zeebrugge': 11545, 'Nieuwpoort': 10}, 'Heek': {'Oostende': 14554, 'Zeebrugge': 36490, 'Nieuwpoort': 64}, 'Steenbolk': {'Oostende': 61934, 'Zeebrugge': 144820, 'Nieuwpoort': 3332}, 'Schol': {'Oostende': 1226233, 'Zeebrugge': 2349233, 'Nieuwpoort': 54386}, 'Bot': {'Oostende': 66158, 'Zeebrugge': 27500, 'Nieuwpoort': 26033}, 'Schar': {'Oostende': 81183, 'Zeebrugge': 122144, 'Nieuwpoort': 7139}, 'Tong': {'Oostende': 743305, 'Zeebrugge': 1256347, 'Nieuwpoort': 41548}, 'Tarbot': {'Oostende': 112724, 'Zeebrugge': 147923, 'Nieuwpoort': 5866}, 'Griet': {'Oostende': 92805, 'Zeebrugge': 98590, 'Nieuwpoort': 4547}, 'Tongschar': {'Oostende': 143192, 'Zeebrugge': 302137, 'Nieuwpoort': 2537}, 'Schartong': {'Oostende': 126585, 'Zeebrugge': 298819, 'Nieuwpoort': 0}, 'Heilbot': {'Oostende': 443, 'Zeebrugge': 1154, 'Nieuwpoort': 0}, 'Hondstong': {'Oostende': 24014, 'Zeebrugge': 39511, 'Nieuwpoort': 18}, 'Rog': {'Oostende': 507293, 'Zeebrugge': 727394, 'Nieuwpoort': 19124}, 'Rode poon': {'Oostende': 178323, 'Zeebrugge': 204292, 'Nieuwpoort': 9881}, 'Grauwe poon': {'Oostende': 12900, 'Zeebrugge': 32846, 'Nieuwpoort': 36}, 'Engelse poon': {'Oostende': 88192, 'Zeebrugge': 168367, 'Nieuwpoort': 3283}, 'Zeewolf': {'Oostende': 5169, 'Zeebrugge': 17164, 'Nieuwpoort': 0}, 'Zeeduivel': {'Oostende': 113226, 'Zeebrugge': 230625, 'Nieuwpoort': 1507}, 'Kongeraal': {'Oostende': 10941, 'Zeebrugge': 16974, 'Nieuwpoort': 102}, 'Roodbaars': {'Oostende': 19, 'Zeebrugge': 6, 'Nieuwpoort': 0}, 'Mul': {'Oostende': 73711, 'Zeebrugge': 52772, 'Nieuwpoort': 542}, 'Zeebaars': {'Oostende': 6872, 'Zeebrugge': 5225, 'Nieuwpoort': 2252}, 'Doornhaai': {'Oostende': 0, 'Zeebrugge': 0, 'Nieuwpoort': 0}, 'Hondshaai': {'Oostende': 225524, 'Zeebrugge': 256037, 'Nieuwpoort': 16363}, 'Zandhaai': {'Oostende': 1628, 'Zeebrugge': 249, 'Nieuwpoort': 399}, 'Horsmakereel': {'Oostende': 2325, 'Zeebrugge': 1505, 'Nieuwpoort': 426}, 'Haring': {'Oostende': 15634, 'Zeebrugge': 12371, 'Nieuwpoort': 877}, 'Makreel': {'Oostende': 4848, 'Zeebrugge': 5944, 'Nieuwpoort': 143}, 'Sprot': {'Oostende': 0, 'Zeebrugge': 0, 'Nieuwpoort': 34}, 'Garnaal': {'Oostende': 364303, 'Zeebrugge': 41711, 'Nieuwpoort': 102772}, 'Langoestine geheel': {'Oostende': 38634, 'Zeebrugge': 12153, 'Nieuwpoort': 0}, 'Langoestine staartje': {'Oostende': 19671, 'Zeebrugge': 17838, 'Nieuwpoort': 0}, 'Noordzeekrab': {'Oostende': 29749, 'Zeebrugge': 34544, 'Nieuwpoort': 837}, 'Zeekreeft': {'Oostende': 1204, 'Zeebrugge': 995, 'Nieuwpoort': 0}, 'Andere schaaldieren': {'Oostende': 3602, 'Zeebrugge': 7674, 'Nieuwpoort': 921}, 'Schelpen': {'Oostende': 126244, 'Zeebrugge': 158040, 'Nieuwpoort': 5750}, 'Inktvis': {'Oostende': 480202, 'Zeebrugge': 567934, 'Nieuwpoort': 51954}, 'Wulk': {'Oostende': 29721, 'Zeebrugge': 46517, 'Nieuwpoort': 15647}}
verschil
Schrijf een functie verschil met drie argumenten: een vissoort (string), een jaartal (int) en een haven (string).
De functie berekent het verschil tussen het aantal verhandelde kilogram van deze vissoort in de haven in het opgegeven jaar en het voorgaande jaar.
De functie retourneert een string:
'In A werd B kg meer C verhandeld in de haven van D dan in E.'
'In A werd B kg minder C verhandeld in de haven van D dan in E.'
'In D werd werd geen C verhandeld.'
Hierin worden respectievelijk aangevuld: A door het jaaral, B door het verschil in kilogram (altijd positief), C door de vissoort, D door de haven en E door het voorgaande jaar.
Als de vissoort niet voorkomt in de lijst van het opgegeven jaar of van het voorgaande jaar, of als beide 0 zijn, dan komt de derde zin.
Het opgegeven jaartal is steeds een getal tussen 2004 en 2019 zodanig dat de bestanden aanwezig zijn in het working directory op Dodona. De haven is steeds Oostende, Zeebrugge of Nieuwpoort. Je moet dit niet controleren.
>>> verschil('Kabeljauw', 2019, 'Oostende') 'In 2019 werd 11977 kg meer Kabeljauw verhandeld in de haven van Oostende dan in 2018.' >>> verschil('Schelvis', 2019, 'Oostende') 'In 2019 werd 458 kg minder Schelvis verhandeld in de haven van Oostende dan in 2018.' >>> verschil('Orka', 2019, 'Zeebrugge') 'In Zeebrugge werd geen Orka verhandeld.' >>> verschil('Roodbaars', 2019, 'Nieuwpoort') 'In Nieuwpoort werd geen Roodbaars verhandeld.'