Tilbake
3.5
Algoritmisk problemløsning i praksis

3.5 Algoritmisk problemløsning i praksis

Problemdekomponering, grådige algoritmer og backtracking.

60 min
6 oppgaver
ProblemløsningGrådige algoritmerBacktracking
Du leser den lesevennlige versjonen
Din fremgang i kapitlet
0 / 6 oppgaver

Data ligger sjelden klar i en liste

I den virkelige verden ligger data sjelden ferdig i en Python-liste. De ligger i filer, databaser og på nettet. For å bruke dem må du kunne lese dem inn, behandle dem og ofte lagre resultatet tilbake. Det starter med filhåndtering.

Du åpner en fil med open("filnavn.txt", modus). De viktigste modusene er "r" for å lese (standard), "w" for å skrive (som overskriver filen), "a" for å legge til på slutten, og "x" for å opprette en ny fil. Men den aller viktigste regelen er denne: bruk en with-blokk. Skriver du with open("data.txt", "r") as fil:, lukkes filen automatisk når blokken er ferdig – også hvis det skjer en feil. Åpner du filen uten with, må du huske fil.close() selv, og det er lett å glemme.

For norske tegn som æ, ø og å må du oppgi tegnsett: encoding="utf-8". Når du leser, har du flere valg: fil.read() gir hele filen som én streng, en for linje in fil-løkke gir én linje av gangen (bruk .strip() for å fjerne linjeskift), og fil.readlines() gir alle linjer som en liste. Med dette kan du for eksempel gå gjennom en loggfil og telle hvor mange linjer som inneholder «ERROR» eller «WARNING».

📝Oppgave Quiz 1

CSV og JSON – to formater for data

Ren tekst er fleksibelt, men strukturert data trenger struktur. To formater dominerer. CSV (Comma Separated Values) er et tekstbasert tabellformat med rader og kolonner, separert med komma. Det er enkelt, lesbart, kan åpnes i Excel og Google Sheets, og er standard for datautveksling. Pythons csv-modul har to lesere: csv.reader gir hver rad som en liste, mens csv.DictReader bruker første rad som nøkler så du kan referere til kolonner ved navn, for eksempel elev['karakter']. DictReader er anbefalt fordi det er mye lettere å lese. To norske fallgruver er verdt å huske: norske CSV-filer bruker ofte semikolon som separator – da må du skrive delimiter=";" – og desimaltall skrives ofte med komma i stedet for punktum.

JSON (JavaScript Object Notation) er et tekstbasert format for strukturerte data, brukt overalt i web-APIer og konfigurasjonsfiler. Det fine er at JSON oversettes nesten direkte til Python: et JSON-objekt {} blir en dict, en array [] blir en liste, true/false blir True/False, og null blir None. Pythons json-modul har fire nøkkelfunksjoner: json.load leser JSON fra en fil, json.loads fra en streng, json.dump skriver til en fil, og json.dumps til en streng. Når du skriver til fil, gjør indent=2 filen lesbar, og ensure_ascii=False bevarer de norske tegnene. JSON sin store styrke over CSV er at det støtter nestede strukturer – objekter inni objekter, lister inni lister.

📝Oppgave Quiz 2

Datarensing og pandas

Virkelige data er rotete. Datarensing er prosessen med å oppdage og korrigere feil, mangler og inkonsistenser. Vanlige problemer er manglende verdier (tomme celler eller «N/A»), feil datatype («atten» i stedet for 18), duplikater, inkonsistent format («Oslo», «oslo», «OSLO»), ekstra mellomrom, og uteliggere som en alder på 999. Arbeidsflyten går i fire steg: inspiser dataene for å finne problemer, valider datatyper og verdier, rens systematisk, og verifiser at rensingen virket. En tankevekkende tommelregel: du bruker ofte 80 prosent av tiden på datarensing og bare 20 prosent på selve analysen.

I praksis renser du gjerne mens du leser. Du fjerner mellomrom med strip(), standardiserer navn med title(), og bruker try/except rundt int() for å fange verdier som ikke lar seg konvertere – og forkaster eller markerer rader som ikke består validering, som en alder utenfor et rimelig intervall.

For større datasett finnes et kraftigere verktøy: pandas, standardbiblioteket for dataanalyse i Python. Kjernekonseptet er DataFrame – en tabell med rader og kolonner, som et regneark – mens en enkelt kolonne kalles en Series. Du leser data med pd.read_csv eller pd.read_json (husk sep=";" for norske filer), og inspiserer med df.head(), df.info() og df.describe(). Du filtrerer rader med df[df["alder"] >= 18], beregner statistikk som df["karakter"].mean(), og grupperer med df.groupby("alder")["karakter"].mean(). Pandas har også innebygd rensing: dropna() fjerner rader med manglende verdier, fillna() fyller dem inn, og drop_duplicates() fjerner duplikater. Det er både raskere enn løkker og langt kortere å skrive.

📝Oppgave Quiz 3

Oppsummering

Data ligger sjelden klar i en liste – vi må hente dem fra filer. Grunnregelen for filhåndtering er å bruke with open(...), som lukker filen trygt, og encoding="utf-8" for norske tegn. CSV er et flatt tabellformat der csv.DictReader gir tilgang til kolonner ved navn (husk delimiter=";" for norske filer), mens JSON støtter nestede strukturer og oversettes nesten direkte til Python sine dict og list, med indent=2 og ensure_ascii=False for lesbare filer.

Virkelige data krever datarensing – inspiser, valider, rens og verifiser – og det tar ofte mesteparten av tiden. For tyngre analyse bruker vi pandas, der en DataFrame er en tabell vi kan filtrere, gruppere og rense med innebygde metoder som dropna, fillna og drop_duplicates. Dermed kan rådata fra den virkelige verden bli til ryddig innsikt. Med dette har du fullført seksjonen om algoritmer og datastrukturer. I neste seksjon ser vi på API-er og nettverkskommunikasjon.

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.