Behovskartan
AI Sweden
Sveriges prognosutforskare för elbehov. Visualiserar prognostiserat behov över regioner, sektorer och scenarier fram till 2050. Byggt för Energimyndigheten.
Hur mycket el kommer vi att behöva? Scenariebaserade efterfrågeprognoser från historiska data, med interaktiva diagram och geografiska kartor.
Demand-verktyget levereras som ett mall-repository. Forka det, rikta en kodningsagent mot konfigurationsfilerna, och anpassa det för din egen region och data.
Ett ramverk med full-stack för att prognostisera elbehov. Python-generator, Node.js + DuckDB API, SvelteKit-explorer. Forka det, byt in dina data och scenarier, driftsätt.
config.yaml ← Scenarios, geographies, segments, parameters
│
▼
Generator (Python) ← Historical data + modular transformations
│
▼
/data/*.parquet ← Base scenarios + parametric variations + aggregations
│
▼
API (Node.js + DuckDB) ← Static JSON endpoints + dynamic time series queries
│
▼
Explorer (SvelteKit) ← Charts, maps, reports, scenario comparison, exportGeneratorn tar historiska elbehovsdata och applicerar modulära transformeringar för att skapa framtidsscenarier. Transformeringssystemet är komponerbart: bygg scenarier genom att stapla funktioner som modifierar efterfrågekurvor för specifika segment och tidsperioder.
Definiera oberoende parametrar (elektrifieringsgrad, tillväxtfaktorer, effektivitet) som skapar ett multiplikativt scenarioutrymme. Varje parametervariation lagras separat och kombineras vid fråga.
Prognoser genereras per efterfrågesegment: industri, bostäder, transport, tjänster, etc. Segment kan aggregeras eller visas oberoende genom API:et.
Data lagras som Parquet-filer med förberäknade aggregeringar för vanliga frågor (geografi × år, segment × år, nationellt × år). Detta ger 50–100× snabbare dashboard-frågor.
Allt definieras i config.yaml:
scenarier, geografier, segment, parametrar, enheter. Ändra konfigurationen
och regenerera, och inga kodändringar krävs.
Ett OpenAPI 3.1 REST-API som kombinerar förbyggda statiska endpoints med DuckDB-drivna dynamiska frågor. API:et läser Parquet-filer direkt, utan ETL-steg, ingen databas att underhålla.
| Endpoint | Typ | Beskrivning |
|---|---|---|
| /scenarios | Statisk | Scenariodefinitioner med parameterkombinationer |
| /geographies | Statisk | Geografiska regioner med metadata |
| /parameters | Statisk | Tillgängliga år, segment, upplösningar |
| /config | Statisk | Ramverkskonfiguration |
| /globals | Statisk | Min/max-gränser för diagramskalor |
| /demand | Dynamisk | Tidsseriedata med flexibel filtrering, upplösning (1h–1Y) och aggregering (sum, mean, max) |
En SvelteKit-applikation som renderar prognosdata som interaktiva visualiseringar. Byggd med Svelte 5 runes, Tailwind CSS, LayerChart och Mapbox GL. Genereras som en helt statisk webbplats som kan serveras från valfri statisk host eller CDN.
Tidsserier, histogram, sektorsuppdelningar, värmekartor, geografiska stapeldiagram. Varje diagram har per-diagramsparameter-överstyrningar, scenariojämförelse, och export i flera format (PNG, SVG, CSV, JSON).
Koropletkartor drivna av Mapbox GL med regional nedbrytning. Visar efterfrågan per geografi med år- och segmentval. Responsiv från mobil till desktop.
Sidor och rapporter skrivs i Markdown med inbäddade interaktiva komponenter. Anpassad direktivsyntax låter domänexperter skriva berättande innehåll med levande datavisualiseringar inline.
Teknisk referens för implementatörer. Expandera avsnittet nedan för API-detaljer, datapipelinens interna delar, fillayout och utvecklingsrutiner.
/data/generate-api.js bygger JSON-filer i /data/+page.ts hämtar initial data och skickar props till komponenterFörbyggda JSON-filer som serveras direkt. Regenereras av node generate-api.js --defaults.
| Endpoint | Beskrivning |
|---|---|
GET /globals | Min/max-gränser för olika aggregeringsnivåer |
GET /parameters | Tillgängliga år, geografier, segment, upplösningar |
GET /scenarios | Scenariodefinitioner med tillväxttakter och parameterkombinationer |
GET /geographies | Geografimetadata och GeoJSON |
GET /config | Allmän konfiguration |
GET /demand: Tidsseriedata driven av DuckDB-frågor på Parquet-filer.
1h, 1d, 1w, 1M, 1Ysum, mean, maxgeography='total' och segment='total' för server-side-aggregeringTidsseriedata returnerar en array av poster:
{ "period": "2025-01-01T00:00:00Z", "value": 123.45, "geography": "SE01", "segment": "housing" } /data/
├── base/
│ └── {scenario_id}/
│ └── data.parquet # Base scenario data
├── scenarios/
│ └── {param1}={val1}/
│ └── {param2}={val2}/
│ └── data.parquet # Parametric variations
├── aggregated/
│ ├── geography_yearly.parquet # For maps
│ ├── segment_yearly.parquet # For sector charts
│ ├── national_yearly.parquet # For time series
│ └── scenario_metadata.parquet # Parameter combinations
└── [static JSON endpoints] type(scope): descriptionLive-applikationer byggda med Demand-ramverket.
AI Sweden
Sveriges prognosutforskare för elbehov. Visualiserar prognostiserat behov över regioner, sektorer och scenarier fram till 2050. Byggt för Energimyndigheten.
Stacken har två driftsättbara delar: en statisk frontend och ett API i container. Kör dem på din egen infrastruktur med det moln, den containerplattform eller statiska host du föredrar. Inget i ramverket är bundet till en specifik leverantör.
Explorer byggs till ett helt statiskt paket. Driftsätt det till valfri statisk host eller CDN. Content-hash-cache-busting på assets låter dig sätta långa cache-tider säkert.
API:et levereras som en Docker-container som paketerar all Parquet-data. Kör det på valfri containerplattform med hälsokontroller och nolltidsuppdateringar.