Project F - Analyseer een CSV-bestand
01 - Projectoverzicht
- In dit project maak je een Python-script dat een CSV-bestand inleest en samenvat.
- Het script lost het probleem op dat je ruwe tabeldata snel wilt controleren zonder Excel-formules te maken.
- Je gebruikt een CSV-bestand met kolommen zoals naam, categorie, datum, aantal en bedrag.
- Het script telt regels, controleert lege waarden en berekent totalen of gemiddelden per kolom.
- Het resultaat is een korte analyse in de terminal met de belangrijkste cijfers uit het CSV-bestand.
- Je gebruikt AI om Python-code te laten genereren die het bestand veilig opent en duidelijke foutmeldingen geeft.
- Je voert de code uit in VS Code en past de bestandsnaam aan naar jouw eigen CSV-bestand.
- Als AI de verkeerde kolommen gebruikt, verbeter je de prompt door de kolomnamen letterlijk mee te geven.
02 - Projectmap en Python-omgeving
Voorkennis: doorloop de voorgaande projecten. Het doel en gebruik van .venv zijn uitgelegd in project A, blok 02. Voor ieder nieuw project maak je een eigen omgeving; hieronder herhaal je die bekende stappen.
- Maak een eigen projectmap
project_fen open die map in VS Code. Maak daarin strakscsv_analyse.py. - Deze oefeningen voer je lokaal uit in de terminal van VS Code, omdat ze bestanden op je computer lezen of schrijven. Gebruik hiervoor de Python-installatie uit de basiscursus.
- Controleer je Python-versie. Werkt
pythonop macOS of Linux niet, gebruik danpython3voor het aanmaken van de omgeving.
python --version
python -m venv .venv
Activeer de omgeving. In Windows PowerShell:
.venv\Scripts\Activate.ps1
In de Windows-opdrachtprompt (cmd):
.venv\Scripts\activate.bat
Op macOS of Linux:
source .venv/bin/activate
Kies in VS Code via Python: Select Interpreter de interpreter uit .venv. Gebruik vanaf nu de geactiveerde terminal. Je verlaat de omgeving later met deactivate.
Dit project gebruikt alleen de standaardbibliotheek van Python. Extra pakketten installeren is niet nodig.
03 - Testgegevens voorbereiden
Maak gegevens.csv naast het script en neem onderstaande gegevens letterlijk over. Gebruik komma’s als scheidingsteken en een punt voor decimalen. bedrag is hier een bedrag per regel; we vermenigvuldigen het niet met aantal.
naam,categorie,datum,aantal,bedrag
Boek,leren,2026-05-01,2,25.00
Pen,kantoor,2026-05-02,3,4.50
Schrift,kantoor,2026-05-03,1,
Tas,overig,2026-05-04,1,fout
04 - Begrippen en hulpmiddelen vóór de opdracht
- Het CSV-formaat ken je uit project A.
DictReadermaakt van iedere gegevensrij een dictionary met de kolomnamen als keys.fieldnamesbevat de kopregel. - Decimal komt uit de standaardmodule
decimalen rekent met decimale getallen uit strings. Een f-string met:.2ftoont twee decimalen; de berekening zelf wordt daardoor niet gewijzigd. utf-8-sigleest UTF-8 en verwijdert een eventuele BOM: een onzichtbaar markeringspunt aan het begin van sommige tekstbestanden.issubsetcontroleert of alle verplichte kolommen aanwezig zijn.dict.fromkeys(..., 0)maakt voor iedere kolom een nulteller.getleest een dictionarywaarde met een standaardwaarde als de key ontbreekt.InvalidOperationis de Decimal-fout voor ongeldige invoer.is_finite()weigert oneindig en NaN.enumerate(..., start=2)telt vanaf de eerste gegevensregel onder de kop.
DictReadergebruikt de eerste regel als kolomnamen.utf-8-sigkan ook UTF-8-bestanden met een BOM lezen.Decimalrekent met decimale waarden. Het gemiddelde gebruikt alleen de twee geldige bedragen; lege en ongeldige bedragen zijn geen nul.- Dit script controleert de aanwezigheid van alle kolommen en analyseert de kolom
bedrag. Het valideert nog niet de datums en aantallen.
05 - Een gerichte AI-prompt maken
Geef AI eerst een concrete opdracht. Kopieer bijvoorbeeld deze prompt en vergelijk het antwoord met de voorbeeldcode in het volgende blok:
Maak met csv.DictReader en Decimal een script dat gegevens.csv naast het
script inleest met utf-8-sig. Vereis naam,categorie,datum,aantal,bedrag. Tel
gegevensregels en lege waarden per kolom. Bereken totaal en gemiddelde van
geldige, eindige niet-negatieve bedragen. Meld ongeldige bedragen met
regelnummer en tel ze apart; tel lege bedragen apart en neem beide niet mee
in het gemiddelde. Vang een ontbrekend bestand en ontbrekende kolommen af.
Vraag om uitleg bij onbekende regels en controleer welke bestanden de code leest en schrijft voordat je haar uitvoert. Gebruik de oefengegevens uit dit project.
06 - Een werkende basisversie
Dit is een complete basisversie voor csv_analyse.py. Neem de code over of vergelijk haar met het antwoord van AI.
from pathlib import Path
from decimal import Decimal, InvalidOperation
import csv
PAD = Path(__file__).resolve().parent / "gegevens.csv"
KOLOMMEN = ["naam", "categorie", "datum", "aantal", "bedrag"]
def main():
totaal = Decimal("0")
regels = geldig = ongeldig = 0
leeg = dict.fromkeys(KOLOMMEN, 0)
with PAD.open(newline="", encoding="utf-8-sig") as bestand:
lezer = csv.DictReader(bestand)
if not set(KOLOMMEN).issubset(lezer.fieldnames or []):
raise ValueError("Verwachte kolommen: " + ",".join(KOLOMMEN))
for nummer, rij in enumerate(lezer, start=2):
regels += 1
for kolom in KOLOMMEN:
if not (rij.get(kolom) or "").strip():
leeg[kolom] += 1
tekst = (rij.get("bedrag") or "").strip()
if not tekst:
continue
try:
bedrag = Decimal(tekst)
if not bedrag.is_finite() or bedrag < 0:
raise ValueError("Bedrag moet eindig en niet-negatief zijn")
except (InvalidOperation, ValueError):
ongeldig += 1
print(f"Ongeldig bedrag op regel {nummer}: {tekst}")
continue
totaal += bedrag
geldig += 1
print(f"Gegevensregels: {regels}; geldige bedragen: {geldig}; ongeldig: {ongeldig}")
print(f"Lege waarden: {leeg}")
print(f"Totaal: EUR {totaal:.2f}")
if geldig:
print(f"Gemiddelde: EUR {totaal / geldig:.2f}")
else:
print("Geen gemiddelde: er zijn geen geldige bedragen.")
if __name__ == "__main__":
try:
main()
except (OSError, ValueError, csv.Error) as fout:
print(f"Analyse niet voltooid: {fout}")
07 - Het script uitvoeren
- Sla de volledige code op als
csv_analyse.pyin je projectmap. Zet eventuele invoerbestanden op de plek die in blok 03 staat. - Open de geïntegreerde terminal in die projectmap en activeer
.venvals dat nog niet is gebeurd. - Voer het script uit met:
python csv_analyse.py
Lees eerst de terminaluitvoer en open daarna eventuele uitvoerbestanden. Controleer het resultaat met blok 08 voordat je met eigen gegevens verdergaat.
08 - Het resultaat controleren
- Verwacht vier gegevensregels, twee geldige bedragen, één ongeldig bedrag en één lege waarde bij
bedrag. - Het totaal is EUR 29.50 en het gemiddelde EUR 14.75. De melding over
foutverwijst naar regel 5. - Test een CSV met alleen de kopregel: totaal 0.00 en geen gemiddelde. Verander daarna
bedraginprijs: je krijgt een melding over kolomnamen.
09 - Fouten herkennen en oplossen
- Alle gegevens lijken één kolom? Het bestand gebruikt waarschijnlijk puntkomma’s. Pas
delimiteraan of gebruik de voorbeelddata met komma’s. - Een komma als decimaalteken? Spreek het formaat eerst af. In deze oefening is
4.50geldig; verander de invoer niet blind met tekstvervanging.
10 - Uitbreiden en afronden
Probeer deze vervolgstap pas als de basis werkt:
Vraag AI om ook aantal als geheel getal en datum als YYYY-MM-DD te controleren. Laat de aantallen fouten per kolom rapporteren en behoud het onderscheid tussen ontbrekende en ongeldige waarden.
Bewaar je werkende basisversie en verander één onderdeel tegelijk. Geef AI bij een fout de foutmelding, het relevante stukje code, je testinvoer en de verwachte uitkomst.
Het project is afgerond wanneer de basiscontrole uit blok 08 slaagt en je in eigen woorden kunt uitleggen welke invoer wordt gebruikt, hoe de verwerking werkt en waar de uitvoer terechtkomt.