Dataserier og datarammer
Contents
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.