Når du analyserer komplekse datasett, er visualisering nøkkelen til å gjøre innsiktene lett tilgjengelige. I dette innlegget viser jeg hvordan jeg brukte Python til å visualisere historiske strømpriser i Norge, fra januar 2019 til november 2024, for ulike soner. For å gjøre dette, brukte jeg to kraftige Python-biblioteker: Pandas for databehandling og Matplotlib for datavisualisering.
Datasettet
Mange statistiske data er lett tilgjengelige på norske nettsteder, som for eksempel Statistisk sentralbyrå. Imidlertid er ikke all informasjon like enkel å finne eller laste ned direkte. I slike tilfeller må man ofte lage sine egne datasett, noe som krever ekstra arbeid for å samle, strukturere og transformere dataene til en brukervennlig form.
For dette prosjektet samlet jeg data fra offentlige nettsider og klargjorde det i en CSV-fil. Tabellen nedenfor viser hvordan dataene så ut på nettsiden før transformasjon:
Steg 1: Datatransformasjon
Datastrukturen måtte transformeres for å gjøre analysen enklere. Originalt hadde datasettet en kolonne per år, og månedene var skrevet på norsk. Målet var å gjøre datasettet mer brukervennlig ved å:
- Pivotere slik at hver sone fikk sin egen kolonne.
- Representere datoer i et standardisert format.
Pandas, et bibliotek spesielt laget for databehandling i Python, ble brukt til å håndtere disse operasjonene.
Pandas gir oss kraftige datastrukturer som DataFrame
, som er perfekt for å håndtere rader og kolonner.
Her er hvordan vi begynte:
Lese inn datasettet
Først må vi lese dataen fra CSV-filen:
import os
import pandas as pd # Importerer Pandas, et verktøy for databehandling
# Setter opp stien til filen
script_dir = os.path.dirname(os.path.abspath(__file__)) # Finner hvor scriptet kjører
file_path = os.path.join(script_dir, "electricity_prices_norway_raw.csv") # Setter riktig filsti
# Leser inn CSV-filen med Pandas
df = pd.read_csv(file_path, encoding="latin1") # Leser CSV-filen, støtter spesialtegn med latin1-encoding
# Viser de første radene i datasettet
print(df.head()) # Sjekker de første radene for å bekrefte innholdet
Gi kolonnene meningsfulle navn
Datasettet har ofte generiske eller uklare kolonnenavn. Vi gir dem mer forståelige navn:
df.columns = ["Måned", "Sone", "2024", "2023", "2022", "2021", "2020", "2019"] # Gir nytt navn til kolonner
print(df.columns) # Bekrefter nye kolonnenavn
Transformere datasettet
Datasettet var i bredt format med ett år per kolonne. Vi brukte pd.melt
til å gjøre det til langformatet:
df_long = pd.melt(df, id_vars=["Måned", "Sone"], value_vars=["2024", "2023", "2022", "2021", "2020", "2019"],
var_name="År", value_name="Pris")
print(df_long.head()) # Ser hvordan dataen ser ut etter transformasjon
Håndtere norske månednavn
Python forventer engelske månednavn når vi lager datoer. Vi oversatte de norske månedene til engelsk:
df_long["Måned"] = df_long["Måned"].map({
"Januar": "January", "Februar": "February", "Mars": "March",
"April": "April", "Mai": "May", "Juni": "June",
"Juli": "July", "August": "August", "September": "September",
"Oktober": "October", "November": "November", "Desember": "December"
})
print(df_long.head()) # Bekrefter at månedene er oversatt
Kombinere år og måned til dato
Deretter kombinerte vi år og måned til en enkelt Dato
-kolonne:
df_long["Dato"] = pd.to_datetime(df_long["År"] + "-" + df_long["Måned"], format="%Y-%B", errors="coerce")
print(df_long[["Dato", "Pris"]].head()) # Kontrollerer at datoene er opprettet korrekt
Pivotere dataen
Til slutt pivotérer vi dataen slik at hver sone får sin egen kolonne:
df_long = df_long.pivot(index="Dato", columns="Sone", values="Pris").reset_index()
print(df_long.head()) # Dataen er nå klar for visualisering
Steg 2: Visualisering
Når dataen er klar, kan vi lage en graf for å sammenligne prisutviklingen:
Lese bearbeidet data
Først leser vi den bearbeidede dataen fra CSV-filen:
df = pd.read_csv("electricity_prices_norway_processed.csv", encoding="utf-8")
df["Dato"] = pd.to_datetime(df["Dato"]) # Sikrer at Dato er i riktig format
df.set_index("Dato", inplace=True) # Setter Dato som indeks for enklere plotting
print(df.head()) # Bekrefter at dataen er riktig lastet
Opprett graf
Ved å bruke matplotlib
oppretter vi grafen:
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 6)) # Setter størrelse på figuren
for column in df.columns:
plt.plot(df.index, df[column], marker="o", label=column, linewidth=2, alpha=0.85) # Plotter hver sone
plt.title("Strømpriser per sone over tid", fontsize=18, color="#1a1a1a", weight="semibold")
plt.xlabel("Dato", fontsize=14)
plt.ylabel("Øre/kWh, inkl. mva", fontsize=14)
plt.legend(title="Sone", loc="upper left", bbox_to_anchor=(0.02, 0.98), fontsize=10, framealpha=0.9)
plt.grid(True, linestyle="--", alpha=0.7)
plt.tight_layout()
plt.savefig("electricity_prices_plot.png", dpi=300) # Lagre grafen som PNG
plt.show() # Viser grafen
Resultat
Grafen nedenfor viser utviklingen av strømpriser for ulike soner i Norge mellom 2019 og 2024. Hver linje representerer en sone.
Oppsummering
Denne guiden viser hvordan Python kan brukes til å analysere og visualisere data ved hjelp av Pandas og Matplotlib. Vi hentet strømprisdata, transformerte det fra råformat til en brukervennlig struktur, og visualiserte trender for ulike soner i Norge mellom 2019 og 2024.
Grafen fremhever viktige trender, som prisøkningen i sone 1 og 2 fra midten av 2022 og en viss stabilisering i 2023. Metoden kan brukes på andre datasett for å trekke innsikter og lage oversiktlige visualiseringer.
I kommende artikler planlegger jeg å vise mer interaktive visualiseringsverktøy som Chart.js og D3.js. Disse verktøyene gir mer interaksjon og responsivitet, og tilbyr flere alternativer tilpasset ulike behov. Matplotlib er en av de mer grunnleggende løsningene, men fungerer godt for mange typer analyser.
Vil du prøve selv? Se hele koden på mitt GitHub-repository.
Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *