Dataserier og datarammer

Dataserier og datarammer

Store og små datamengder blir lagret i filer av ulik type. Den mest vanlige filtypen er såkalte csv-filer. Bokstavene csv står for «comma separated values». Skal vi for eksempel laste ned temperaturen gjennom et døgn fra en værstasjon, vil vi ofte få en slik fil.

For å laste inn slike filer kan vi bruke en modul som heter pandas. Med denne modulen får vi tilgang på en rekke nye funksjoner og objekter. Vi importerer pandas slik:

import pandas as pd

Tidligere har vi jobbet med lister og arrayer i Python. Pandas gir oss tilgang på to nye objekter, nemlig dataserier og datarammer.

Dataserier og datarammer

En dataserie er en 1-dimensjonal array med verier og en indeks

En dataramme er en 2-dimensjonal array med både rad- og kolonneindeks.

Eksempel 1

Vi ønsker å lage en overisk over hva som er til middag i kantinen de ulike ukedagene. Vi kan da lage en dataserie på følgende måte:

import pandas as pd

S = pd.Series(["Taco", "Kylling", "Laks", "Pizza", "Pasta"])
S
0       Taco
1    Kylling
2       Laks
3      Pizza
4      Pasta
dtype: object

Vi ser at vi får listet opp de ulike rettene i rekkefølgen vi skrev dem opp på. Tallene 0, 1, 2, 3, 4 er indeksene. Disse kan vi bruke til å hente ut data fra dataserien. Ønsker vi for eksempel å se hva som var til middag på torsdage, kan vi se hva som står på plass3:

S[3]
'Pizza'

Vi kan også bytte ut indeksen med for eksempel ukedagene:

S.index = ["Mandag", "Tisdag", "Onsdag", "Torsdag", "Fredag"]
S
Mandag        Taco
Tisdag     Kylling
Onsdag        Laks
Torsdag      Pizza
Fredag       Pasta
dtype: object

Vi kan også legge til en rad. Vil vi legge til hva som var til middag på lørdagen, skriver vi:

S["Lørdag"] = "Grøt"
S
Mandag        Taco
Tisdag     Kylling
Onsdag        Laks
Torsdag      Pizza
Fredag       Pasta
Lørdag        Grøt
dtype: object

Dersom vi ønsker å legge til kolonner, an vi gjøre dette. Men da må vi bruke datarammer.

# Vi kaller datarammen for df og gir første kolonne navnet "Rett":
df = pd.DataFrame(S, columns=["Rett"]) 
df
Rett
Mandag Taco
Tisdag Kylling
Onsdag Laks
Torsdag Pizza
Fredag Pasta
Lørdag Grøt

Dersom vi nå vil legge til prisen per rett, legger vil en kolonne med de ulike prisene:

df["Pris"]  = [59, 65, 70, 85, 75, 55]
df
Rett Pris
Mandag Taco 59
Tisdag Kylling 65
Onsdag Laks 70
Torsdag Pizza 85
Fredag Pasta 75
Lørdag Grøt 55

Ønsker vi å utvide kolonnen med antall retter som ble solgt de ulike dagene og hva inntekten ble de ulike dagene, kan vi gjøre det slik:

# Lager først en kolonne med antallet:
df["Antall"] = [32, 21, 35, 22, 67, 66]

# Så lager vi en kolonne som gir pris $\cdot $ antall:
df["Inntekt"] = df["Pris"] * df["Antall"]
df
Rett Pris Antall Inntekt
Mandag Taco 59 32 1888
Tisdag Kylling 65 21 1365
Onsdag Laks 70 35 2450
Torsdag Pizza 85 22 1870
Fredag Pasta 75 67 5025
Lørdag Grøt 55 66 3630

Til slutt kan vi summere opp tallene i den siste kolonnen. Det kan vi gjøre ved å bruke sum-metoden på kolonnen:

df["Inntekt"].sum()
16228

Oppgave

Per, Anders og Line eier en hytte sammen.

De skal betale utgiftene til strøm i forhold til hvor mange kilowattimer (kWh) hver av dem bruker. De leser av målerstanden hver gang de kommer til hytta og hver gang de reiser fra hytta. På den måten finner de ut hvor mange kWh hver av dem har brukt.

Første halvår 2021 ble forbruket slik (tall i kWh):

Navn

Målestand ankomst

Målestand avreise

Strømforbruk

Å betale

Per

12759

127788

Line

127788

128129

Anders

128129

128612

Line

128612

129578

Gå ut fra at prisen på 1 kWh er 0,78 øre.

Lag en dataramme som regner ut hvor mye hver av dem må betale.