Een CSV lezen
Shopping is een project uit CS50 AI, de gratis AI-cursus van Harvard. Je krijgt de gegevens van duizenden bezoeken aan een webshop, en je bouwt een voorspeller die zegt of een bezoeker iets gaat kopen. Het project is in het Engels, en je maakt het op je eigen computer.
Het meeste ken je al: de voorspeller is k-NN, en het beoordelen per soort deed je bij eerlijk testen. Nieuw is dat de gegevens in een CSV-bestand staan, en dat de voorspeller uit een bibliotheek komt, scikit-learn. In dit project oefen je dat in je browser, met een paar regels van een eigen webshop. Je begint met het lezen.
Je gebruikt hier import uit Modules,
int() en float() uit Tekst naar getal,
een dictionary om op te zoeken uit
Dictionaries, with open
uit Een tekstbestand lezen,
en voorspel(nieuw, voorbeelden, k) uit
laat de buren stemmen.
Voorspel
import csv
regels = [
"maand,paginas,terugkerend,gekocht",
"Feb,3,TRUE,FALSE",
"Mar,12,FALSE,TRUE",
]
lezer = csv.reader(regels)
next(lezer)
for rij in lezer:
print(rij)
Wat print dit programma?
Antwoord
['Feb', '3', 'TRUE', 'FALSE']
['Mar', '12', 'FALSE', 'TRUE']
De kopregel print hij niet: next(lezer) slaat die over.
Zo werkt het
Een CSV-bestand is een tabel als tekst: elke regel is een rij, en de
komma's scheiden de kolommen. De eerste regel heeft de namen van de
kolommen. csv.reader knipt elke regel op de komma's in een lijst.
next(lezer) pakt de volgende rij. Doe je dat één keer vóór de loop, dan
sla je de kopregel over.
Hier lees je uit een lijst regels. Op je eigen computer lees je op dezelfde manier uit een bestand:
import csv
with open("shopping.csv") as bestand:
lezer = csv.reader(bestand)
next(lezer)
for rij in lezer:
print(rij)
Opdracht: tel de kopers
Tel hoeveel bezoekers iets kochten. Dat staat in de laatste kolom,
gekocht. Met de regels in de editor print je:
2 van de 4 bezoekers kochten iets
Begin klein, en breid de code stap voor stap uit:
- Draai de code: hij print elke rij als een lijst teksten.
- Print in de loop alleen de laatste kolom:
rij[3]. - Tel met een
ifhoe vaakrij[3]gelijk is aan"TRUE". Tel ook alle bezoekers, en print na de loop een zin zoals hierboven.
Tip
In stap 1 zag je 'TRUE' met aanhalingstekens. Is dat de waarde True, of
iets anders?
Antwoord
Dit vervangt alles onder de lijst regels:
lezer = csv.reader(regels)
next(lezer)
kopers = 0
bezoekers = 0
for rij in lezer:
bezoekers = bezoekers + 1
if rij[3] == "TRUE":
kopers = kopers + 1
print(kopers, "van de", bezoekers, "bezoekers kochten iets")
2 van de 4 bezoekers kochten iets
Vergelijk je met True zonder aanhalingstekens, dan telt hij 0 kopers:
alles wat uit een CSV komt, is tekst.
Door naar tekst naar getallen.