Hopp til innhald
Nynorsk
Fagstoff
Interaktivt innhald

Analyse av avanserte datasett med Python

Når vi måler data i industrien, får vi ofte store datamengder som er lagra i filer. Ved hjelp av Python kan vi hente inn, sortere og visualisere slike måleserier slik at tall blir til forståelig informasjon.

Dataanalyse med Python

Når du skal analysere data i Python, har du bruk for to programpakker: Matplotlib og pandas. Matplotlib er ei pakke for å visualisere data på ulike måter, for eksempel som grafer, 3D-modeller og animasjoner. Pandas brukes til å lese og skrive fra forskjellige fil-formater og til å bearbeide data.

Med disse to verktøya kan du oppsummere og visualisere data på en enkel og strukturert måte.

Opplasting av måleserier

Du begynner med å laste opp dataene du har samla inn. Funksjonen read_csv() fungerer på både .csv-filer og .txt-filer.

Viktig!

Fila du vil analysere, må ligge lagra på samme sted som kode-fila di.

I data som er lasta ned fra Deploii, inneholder hver rad et tidsstempel i UNIX-format og en måleverdi. UNIX-formatet i Deploii teller antall millisekund som har gått siden 1. januar 1970. Denne verdien må derfor omgjøres til vanlig dato og tid.

I tabellformat kan dataene vises på denne måten:

Datasett

Linje

Timestamp

Temp

Trykk

Fukt

02025-10-13 11:09:50.2043.6675 98.16000.4475
12025-10-13 11:09:51.234.940097.95500.4100
22025-10-13 11:09:52.2027.125098.05000.3800
32025-10-13 11:09:53.23311.627597.91250.3950

Funksjonen pd.read_csv() leser inn fila. Deretter brukes kolonnetitlene som er angitt i koden, og tidsstempelet fra UNIX blir omgjort til DateTime-formatet. Til slutt skrives de første linjene i datasettet ut.

Visualisering av data med Matplotlib

Nå som dataene er lasta opp, kan lage et plott med Matplotlib. Et eksempel på en slik programkode kan være:

Med denne koden kan dataene visualiseres i en graf der tidsdataene er knytta til x-aksen, og temperaturverdiene er knytta y-aksen.

Dette er den grunnleggende strukturen på de fleste plotta i Matplotlib. Du definerer plottet og legger til elementer som tittel, aksetittel, tegnforklaringer til grafen osv. Til slutt vil funksjonen plt.show() vise figuren.

Like enkelt kan du legge til flere plott i en figur. Det gjør du ved å definere enda en funksjon plt.plot(). Du kan legge til så mange linjer du vil, så lenge du gjør det før plt.show().

Et eksempel på en delkode som legger inn flere data i samme graf, kan du se her:

Med flere innlagte datasett vil du se flere grafer i samme bilde. I grafen under ser du temperatur og trykk i samme graf, basert på samme tidsstempel:

Pandas

Så langt har vi brukt pandas bare til å hente inn data, men den virkelige styrken til pandas ligger i de mange dataanalyseverktøya. Pandas er bygd rundt DataFrames, som kort sagt er rader og kolonner med data. Da vi lasta opp dataene, laga vi en DataFrame som vi kalte “data”.

Hver kolonne med data har et navn. Dette navnet bruker vi til å referere til kolonnen. For å få ei oppsummering av dataene kan vi bruke funksjonen .describe(). Vi kan også vise denne informasjonen i et boksplott.

Funksjonen data.describe()

Når du jobber med datasett i Python, for eksempel målinger, sensordata eller tall du har samla inn, er det viktig at du kan få en rask oversikt over dataene. Funksjonen data.describe() i pandas lager ei statistisk oppsummering av tallmaterialet.

Denne oppsummeringa består av flere nøkkelverdier som sier noe om antall datapunkter og om gjennomsnitt, spredning og fordeling av talla. Verdiene er vanlige statistiske mål som brukes i både matematikk, tekniske fag og programmering.

Enkel beskrivelse av benevnelsene

  • count: hvor mange tall datasettet inneholder

  • mean: gjennomsnittet av alle talla i datasettet

  • std: hvor mye talla varierer (standardavvik, engelsk: standard deviation)

  • min/max: laveste og høyeste verdi

  • 25 %, 50 %, 75 %: oppdeling av datasettet i kvartiler (talla i datasettet sorteres fra lavest til høyest og deles så opp i fire deler med like mange tall i hver del)

Forklaring på hver av de statistiske verdiene i resultatet fra describe().

count (antall datapunkter)

Dette tallet oppgir hvor mange tall som fins i datasettet. Har du for eksempel målt temperaturen 50 ganger, vil count være 50.

mean (gjennomsnitt)

Mean viser gjennomsnittet av alle datapunktene. Det beregnes slik:

mean=sum av alle datapunkterantall datapunkter

Gjennomsnittet gir et inntrykk av den typiske verdien i datasettet.

std (standardavvik)

Standardavviket forteller hvor mye dataene avviker fra gjennomsnittet.

  • Lavt standardavvik: datapunktene ligger tett samla

  • Høyt standardavvik: datapunktene varierer mye

Formelen kan teknisk sett uttrykkes slik:

std=(xi-mean)2n-1

(Pandas bruker sample standard deviation.)

min (minste verdi)

Dette er det laveste tallet i datasettet.

25 % (første eller nedre kvartil)

Første eller nedre kvartil er verdien som en fjerdedel av datapunktene ligger under når de er sortert fra lavest til høyest. Tallet brukes for å beskrive hvordan dataene fordeler seg.

50 % (andre kvartil, medianen)

Medianen er den midterste verdien når datapunktene sorteres fra lavest til høyest. I motsetning til gjennomsnittsverdien påvirkes ikke medianen av ekstremverdier.

Dersom antall datapunkter er et oddetall, er medianen tallet/verdien i midten. Er antall datapunkter et partall, er medianen snittet av de to midterste verdiene.

75% (tredje kvartil, øvre kvartil)

Dette er verdien som 75 % av datapunktene ligger under. Denne verdien brukes ofte sammen med 25 %-verdien for å måle spredning i datasettet.

max (største verdi)

Dette er det høyeste tallet i datasettet.

Visualisering i diagramform

Når måleverdiene presenteres i en tabell, kan de være vanskelig å tolke:

Måleverdier

Verdi

Temp

Trykk

Fukt

count19.00000019.00000019.000000
mean7.99078998.2302630.417237
std3.5089671.1128810.039999
min1.38500097.0000000.345000
25 %5.52500097.3712500.387500
50 %7.96500097.9550000.422500
75 %11.26500099.0300000.445000
max14.670000100.7750000.480000

Derfor er det ofte hensiktsmessig å få vist verdiene i diagramform, for eksempel som boksplott-diagram:

I programmet kan plottboksen kodes slik:

Her bruker vi ikke plt.plot(). I stedet bruker vi plot() direkte på dataene og legger inn noen ekstra parametere:

  • Parameteren kind='box' gjør at vi får et boksplott der den øverste svarte linja viser maksverdien. Toppen og bunnen av boksen er første og tredje kvartil, og den grønne linja er gjennomsnittet.

  • Parameteren subplots=True gjør at temperatur, trykk og fukt vises i ulike figurer i stedet for i én figur. Dette er lurt når verdiene er veldig ulike. I vårt eksempel ligger trykkverdiene på rundt 100, mens fuktverdiene ligger mellom 0 og 1.

  • Parameteren figsize=(12,3) bestemmer størrelsen på figuren. Denne kan du eksperimentere med for å få det utseendet du ønsker.

Datavisualisering med grafer

I Python kan du også visualisere de innhenta måleverdiene på andre måter, for eksempel ved å plotte grafer. Du kan velge ulike grafiske visninger ved å endre definisjonen av visning i koden.

Det er mulig å sette sammen de ulike grafene til visning under hverandre eller ved siden av hverandre:

I koden for sideveis visning la vi til parameteren layout=(1,3). På denne måten kan vi tvinge fram et bestemt format, i dette tilfellet ett lag med tre figurer. Har vi enda flere datastrømmer vi skal vise, kan vi for eksempel skrive layout=(2,3). Da får vi to lag med tre figurer.

Matematiske funksjoner

Du kan også utføre beregninger direkte på kolonnene. Det er nyttig ved beregninger som inkluderer flere kolonner med data.

Disse matematiske funksjonene kan programmeres. I eksempelet under brukes dataene for temperatur. Verdiene dobles og legges inn i en ny temperatur-variabel:

I tabellvisning kan da resultatet se slik ut:

Matematisk beregning

timestamp

temp

trykk

fukt

temp_pluss_temp

2025-10-13 11:09:50.2040003.66750098.1600000.4475007.335000
2025-10-13 11:09:51.2360004.94000097.9550000.4100009.880000
2025-10-13 11:09:52.2020007.12500098.0500000.38000014.250000
2025-10-13 11:09:53.23300011.62750097.9125000.39500023.255000
2025-10-13 11:09:54.20500011.70000097.5325000.44250023.400000

Nå er det altså lagt til en ny kolonne med dobla temperaturverdier. Hvis vi bruker Jupyter Notebooks, er det også mulig å legge til .style i stedet for print() for å få en finere tabell når vi skriver ut.

Sletting av kolonner

Du kan slette kolonner fra datasetta. Det gjør du ved å bruke funksjonen data.drop(). Under ser du et eksempel på en slik programkode. Den sletter kolonnen "temp_pluss_temp".

Histogram

Histogrammer er et godt valg når vi vil vise fordelinga av dataene. Hver søyle står for ei gruppe data innafor ei bestemt ramme, og høyden på søyla viser hvor mange måleverdier som er innafor denne ramma.

Du kan selv bestemme hvordan den grafiske visninga skal være, ved å justere layout, figurstørrelse. Du kan også fjerne linjer og grid.

Her bruker vi .hist() i stedet for .plot(). Ved å sette parameteren bins til 6 bestemmer vi at figurene skal ha seks søyler. Med layout= (1,3) har vi valgt at verdiene for temperatur, trykk og fukt skal vises i tre histogrammer i ett lag. Siden parameteren grid er satt til False, vises ikke grid og linjer. De tre figurene viser hvor mesteparten av dataene ligger, og hvor jevnt fordelt de er.

Korrelasjon

Det siste verktøyet vi skal se på, er korrelasjon. Korrelasjon er sammenhengen mellom to variabler: Korrelasjonsverdien viser om og hvordan endringer i den ene variabelen påvirker den andre variabelen.

Når du analyserer data, hjelper korrelasjonsverdien deg å se om to målinger følger hverandre.

Eksempel på korrelasjon

  • Hvis temperaturen øker og fuktigheten også øker, sier vi at det er en positiv korrelasjon mellom de to verdiene.

  • Hvis temperaturen øker, men fuktigheten synker, er korrelasjonen negativ.

  • Verdien for korrelasjon ligger alltid mellom –1 og +1.

For å programmere inn korrelasjon kan du bruke koden print(data.corr()).

I en tabell kan korrelasjon vises som i eksempelet under:

Korrelasjon

temp

trykk

fukt

temp1.000000-0.6019600.444773
trykk-0.6019601.000000-0.710422
fukt0.444773-0.7104221.000000

Tabellen viser for eksempel at korrelasjonen mellom temperatur og fukt er 0,44. Det betyr at det er en viss sammenheng mellom temperatur og fukt: Når temperaturen øker, kan vi også forvente at fuktverdien øker.

Filer

Under finner du filer du kan bruke som eksempler for dataanalyse med Python. Du får både et eksempel på Python-kode og ei .csv-fil som kan brukes til analyse.

Programkode

import matplotlib.pyplot as plt

import pandas as pd

from pathlib import Path

parent = Path(__file__).parent

data = pd.read_csv(parent / "data.csv") # Laster opp data

data.columns = ["timestamp", "temp", "trykk", "fukt"] # Gir navn til kolonnene

# Omgjør UNIX til dato og tid

data['timestamp'] = pd.to_datetime(data['timestamp'], unit='ms') # Hvis denne linja gir feilmelding, prøv å endre unit='ms' til 's'.

# Skriver ut første rader

print(data.head(4))

# -------------------------------

# Plotter temperatur over tid

plt.plot(data['timestamp'], data['temp']) # Tar inn data på x-aksen(timestamp) og data på y-aksen(temp)

plt.title("Temperature")

plt.show()

# -------------------------------

# Plotter temperatur og trykk

plt.plot(data['timestamp'], data['temp'], label="temp")

plt.plot(data['timestamp'], data['trykk'] + 1, label="trykk")

plt.title("Temperatur og trykk over tid") # tittelen

plt.xlabel("Tid") # Forklaring på x-aksen

plt.ylabel("temperatur (C)/ trykk(kPA)") # Forklaring på y-aksen

plt.legend()

plt.show()

# -------------------------------

# Vi starter med å sette indeksen til tida i stedet for å bruke 0, 1, 2, 3. Dette gjør det enklere å plotte

#fordi tida da alltid behandles som x-aksen. Da slipper vi å forholde oss til enda et datasett.

data.set_index("timestamp", inplace=True)

# -------------------------------

# describe og boxplot

print(data.describe())

# count: Antall punkter

# mean: Gjennomsnittet

# std: Standardavvik (avvik fra gjennomsnittet)

# min: Laveste datapunkt

# 25%: Det første kvartilet. De 25 % laveste datapunktene er under dette datapunktet.

# 50%: Medianen. Når vi sorterer alle datapunktene i stigende rekkefølge, er medianen punktet i midten.

# 75%: Det tredje kvartilet. De 25 % høyeste datapunktene er over dette datapunktet.

# max: Høyeste datapunkt

data.plot(kind='box', subplots=True, figsize=(12,3))

plt.grid(False) # Skjuler grids i figuren

plt.show()

# -------------------------------

# subplots av data

data.plot(kind='line', subplots=True, figsize=(10,4))

plt.suptitle("Plotter nedover") # Bytter plt.title til plt.suptitle fordi vi har subplots

plt.show()

# eller

data.plot(kind='line', subplots=True, figsize=(12,3), layout=(1,3))

plt.suptitle("Plotter sideveis")

plt.show()

# -------------------------------

# Legger sammen kolonner

data["temp_pluss_temp"] = data["temp"] + data["temp"]

print(data.head())

# -------------------------------

data = data.drop("temp_pluss_temp", axis=1) # Sletter temp_plus_temp-kolonnen.

# -------------------------------

# Lager histogrammer

data.hist(bins=6, layout=(1,3), figsize=(12,3), grid=False)

plt.show()

# -------------------------------

# Korrelasjon

print(data.corr())

Skrive av Roger Rosmo og Kristoffer Smedal Olsen. Rettshavar: Company of Things AS.
Sist oppdatert 19.10.2025