Databehandling med Python
Python er et flott verktøy for å behandle og manipulere data. Med grunnleggende kontrollstrukturer som for-løkker og if-setninger kan du filtrere, transformere og analysere data på en enkel og effektiv måte.
Hva kan du lære i dette kapittelet
- Bruke for-løkker for å iterere gjennom data
- Filtrere data med if-setninger
- Transformere data til nye formater
- Telle og summere basert på betingelser
- Kombinere løkker og betingelser for dataanalyse
Grunnleggende løkker i Python
En av de viktigste strukturene i programmering er løkker, som lar deg gjenta kode for hvert element i en samling.
For-løkker
For-løkker brukes til å iterere gjennom en sekvens (liste, tuppel, streng) eller andre iterable objekter.
# Enkel for-løkke over en liste
tall = [1, 2, 3, 4, 5]
for nummer in tall:
print(nummer)
# Output:
# 1
# 2
# 3
# 4
# 5
# For-løkke med range
for i in range(5): # range(5) gir tallene 0, 1, 2, 3, 4
print(f"Indeks {i}: {tall[i]}")
# Output:
# Indeks 0: 1
# Indeks 1: 2
# Indeks 2: 3
# Indeks 3: 4
# Indeks 4: 5
If-setninger
If-setninger brukes til å utføre kode bare hvis en bestemt betingelse er oppfylt.
tall = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for nummer in tall:
if nummer % 2 == 0: # Sjekker om tallet er delelig med 2 (partall)
print(f"{nummer} er et partall")
else:
print(f"{nummer} er et oddetall")
# Output:
# 1 er et oddetall
# 2 er et partall
# 3 er et oddetall
# ...etc.
Filtrere data med løkker og betingelser
En vanlig oppgave er å filtrere ut bestemte elementer fra en liste basert på visse kriterier.
# Liste med testresultater
resultater = [65, 72, 81, 58, 93, 45, 86, 79, 61, 94]
# Filtrere ut resultater over 80 (bestått med glans)
bestaatt_med_glans = []
for resultat in resultater:
if resultat >= 80:
bestaatt_med_glans.append(resultat)
print(f"Resultater over 80: {bestaatt_med_glans}")
# Output: Resultater over 80: [81, 93, 86, 94]
# Filtrere ut resultater under 60 (ikke bestått)
ikke_bestaatt = []
for resultat in resultater:
if resultat < 60:
ikke_bestaatt.append(resultat)
print(f"Resultater under 60: {ikke_bestaatt}")
# Output: Resultater under 60: [58, 45]
# Beregne antall i hver kategori
antall_glans = len(bestaatt_med_glans)
antall_ikke_bestaatt = len(ikke_bestaatt)
antall_vanlig = len(resultater) - antall_glans - antall_ikke_bestaatt
print(f"Bestått med glans: {antall_glans}")
print(f"Bestått: {antall_vanlig}")
print(f"Ikke bestått: {antall_ikke_bestaatt}")
Tips: List Comprehension
Python har en elegant måte å filtrere og transformere lister på, kalt "list comprehension", som er en forkortet syntaks for løkker og betingelser.
# Samme filtrering som over, men med list comprehension
bestaatt_med_glans = [resultat for resultat in resultater if resultat >= 80]
ikke_bestaatt = [resultat for resultat in resultater if resultat < 60]
print(f"Resultater over 80: {bestaatt_med_glans}")
print(f"Resultater under 60: {ikke_bestaatt}")
Transformere data
Løkker og betingelser kan brukes til å transformere data fra ett format til et annet.
# Omregne temperaturer fra Celsius til Fahrenheit
celsius = [0, 5, 10, 15, 20, 25, 30, 35, 40]
fahrenheit = []
for temp in celsius:
# Formelen for omregning: F = (C × 9/5) + 32
temp_f = (temp * 9/5) + 32
fahrenheit.append(temp_f)
print(f"Celsius: {celsius}")
print(f"Fahrenheit: {fahrenheit}")
# Output: Fahrenheit: [32.0, 41.0, 50.0, 59.0, 68.0, 77.0, 86.0, 95.0, 104.0]
# Med list comprehension
fahrenheit = [(temp * 9/5) + 32 for temp in celsius]
Telle og summere basert på betingelser
For-løkker er svært nyttige for å beregne summer og tellinger basert på bestemte kriterier.
# Elevdata med navn, alder og karakterer
elever = [
{"navn": "Anna", "alder": 15, "karakter": 5},
{"navn": "Bjørn", "alder": 16, "karakter": 4},
{"navn": "Camilla", "alder": 15, "karakter": 6},
{"navn": "David", "alder": 16, "karakter": 3},
{"navn": "Emma", "alder": 15, "karakter": 5},
{"navn": "Fredrik", "alder": 16, "karakter": 4},
{"navn": "Gina", "alder": 15, "karakter": 5}
]
# Telle antall elever med karakter 5 eller bedre
antall_over_4 = 0
for elev in elever:
if elev["karakter"] >= 5:
antall_over_4 += 1
print(f"Antall elever med karakter 5 eller 6: {antall_over_4}")
# Output: Antall elever med karakter 5 eller 6: 4
# Beregne gjennomsnittsalder
total_alder = 0
for elev in elever:
total_alder += elev["alder"]
gjennomsnitt_alder = total_alder / len(elever)
print(f"Gjennomsnittsalder: {gjennomsnitt_alder}")
# Output: Gjennomsnittsalder: 15.43...
# Beregne gjennomsnittskarakter per aldersgruppe
sum_15 = 0
antall_15 = 0
sum_16 = 0
antall_16 = 0
for elev in elever:
if elev["alder"] == 15:
sum_15 += elev["karakter"]
antall_15 += 1
elif elev["alder"] == 16:
sum_16 += elev["karakter"]
antall_16 += 1
gjennomsnitt_15 = sum_15 / antall_15 if antall_15 > 0 else 0
gjennomsnitt_16 = sum_16 / antall_16 if antall_16 > 0 else 0
print(f"Gjennomsnittskarakter for 15-åringer: {gjennomsnitt_15:.2f}")
print(f"Gjennomsnittskarakter for 16-åringer: {gjennomsnitt_16:.2f}")
# Output:
# Gjennomsnittskarakter for 15-åringer: 5.25
# Gjennomsnittskarakter for 16-åringer: 3.67
Praktisk eksempel: Analyse av test-resultater
Kasus: Analyse av testresultater
La oss si at du har resultatene fra en test der elevene har fått poeng fra 0 til 100. Du vil analysere resultatene og kategorisere dem i ulike karakterer.
# Testresultater
poeng = [87, 65, 92, 78, 43, 56, 91, 75, 63, 88, 82, 71, 58, 95, 77, 69, 83, 52, 74, 86]
# Kategorier for karakter
# A: 90-100, B: 80-89, C: 70-79, D: 60-69, E: 50-59, F: 0-49
# Telle antall i hver kategori
antall_a = 0
antall_b = 0
antall_c = 0
antall_d = 0
antall_e = 0
antall_f = 0
for p in poeng:
if p >= 90:
antall_a += 1
elif p >= 80:
antall_b += 1
elif p >= 70:
antall_c += 1
elif p >= 60:
antall_d += 1
elif p >= 50:
antall_e += 1
else:
antall_f += 1
# Utskrift av resultatene
print(f"Analyse av {len(poeng)} testresultater:")
print(f"A (90-100): {antall_a} elever")
print(f"B (80-89): {antall_b} elever")
print(f"C (70-79): {antall_c} elever")
print(f"D (60-69): {antall_d} elever")
print(f"E (50-59): {antall_e} elever")
print(f"F (0-49): {antall_f} elever")
# Beregne prosentandeler
total = len(poeng)
prosent_a = (antall_a / total) * 100
prosent_b = (antall_b / total) * 100
prosent_c = (antall_c / total) * 100
prosent_d = (antall_d / total) * 100
prosent_e = (antall_e / total) * 100
prosent_f = (antall_f / total) * 100
print("
Prosentfordeling:")
print(f"A: {prosent_a:.1f}%")
print(f"B: {prosent_b:.1f}%")
print(f"C: {prosent_c:.1f}%")
print(f"D: {prosent_d:.1f}%")
print(f"E: {prosent_e:.1f}%")
print(f"F: {prosent_f:.1f}%")
# Beregne gjennomsnitt
gjennomsnitt = sum(poeng) / len(poeng)
print(f"
Gjennomsnittlig poengsum: {gjennomsnitt:.1f}")
# Finne høyeste og laveste poengsum
høyest = max(poeng)
lavest = min(poeng)
print(f"Høyeste poengsum: {høyest}")
print(f"Laveste poengsum: {lavest}")
# Finne antall bestått (poeng >= 60)
antall_bestått = 0
for p in poeng:
if p >= 60:
antall_bestått += 1
prosent_bestått = (antall_bestått / total) * 100
print(f"
Antall bestått: {antall_bestått} av {total} ({prosent_bestått:.1f}%)")
Mer avansert: Nestede løkker
Nestede løkker (løkker inne i løkker) kan brukes for mer komplekse databehandlingsoppgaver.
# Eksempel på bruk av nestede løkker for frekvenstabeller
# Data: antall mål per kamp
mål_per_kamp = [0, 1, 2, 3, 1, 2, 0, 2, 4, 1, 2, 3, 1, 2, 2, 3, 0, 1, 2, 1]
# Finne unike verdier
unike_verdier = []
for verdi in mål_per_kamp:
if verdi not in unike_verdier:
unike_verdier.append(verdi)
unike_verdier.sort() # Sorterer verdiene i stigende rekkefølge
# Telle forekomster med en nestet løkke
frekvenser = []
for verdi in unike_verdier:
teller = 0
for mål in mål_per_kamp:
if mål == verdi:
teller += 1
frekvenser.append(teller)
# Skriv ut frekvenstabell
print("Mål | Frekvens")
print("------------")
for i in range(len(unike_verdier)):
print(f"{unike_verdier[i]} | {frekvenser[i]}")
# Produsere en liste basert på frekvenstabellen
alle_mål = []
for i in range(len(unike_verdier)):
# Legger til verdien det antall ganger den forekommer
for j in range(frekvenser[i]):
alle_mål.append(unike_verdier[i])
print(f"
Generert liste basert på frekvenstabellen:")
print(alle_mål)
# Denne listen skal være identisk med den opprinnelige mål_per_kamp-listen,
# men vil være sortert etter stigende verdi.
Oppsummering
I dette kapittelet har du lært hvordan du kan:
- Bruke for-løkker til å iterere gjennom data
- Bruke if-setninger til å filtrere data
- Kombinere løkker og betingelser for å analysere data
- Telle og summere verdier basert på ulike kriterier
- Transformere data fra én form til en annen
- Bruke nestede løkker for mer komplekse operasjoner
Disse grunnleggende verktøyene er byggesteinene for all databehandling i Python. Med disse ferdighetene kan du løse mange praktiske dataanalyseproblemer, selv uten å bruke avanserte biblioteker.