Foto: Umberto / Unsplash

Del plattformen · kapittel 5

Teknologi og arkitektur

Teknologivalgene, de to parallelle dataarkitekturene og hvorfor begge finnes - med et konkret eksempel på hva den nyeste av dem gjør mulig.

Teknologivalgene

Portalen er bygget av én person. Det har styrt valgene mer enn noe annet: hvert verktøy må kunne læres, driftes og feilsøkes uten et team i ryggen. Der et stort miljø kan bære en spesialisert løsning, må dette prosjektet velge det som er godt nok og godt dokumentert.

Teknologivalg per lag, med begrunnelse
LagValgHvorfor
NettstedetNext.js med TypeScriptSidene bygges ferdig på forhånd, så en leser får statiske filer framfor å vente på at en database svarer. Typene fanger opp at en datafil har endret form.
UtseendeTailwind med egne fargeverdierVerdiene bor ett sted og brukes ved navn, slik at mørk modus og kontrastjusteringer kan gjøres samlet.
GraferRechartsGir kontroll over farger og etiketter, og lar hver graf ha en tabellutgave.
DatahentingPythonKildene har hvert sitt format. Python har verktøyene for å hente, rydde og skrive ut resultatet i en form nettstedet kan lese.
DatalagerDatabricks med Unity CatalogRådata lagres uendret og versjonert, og alle bearbeidingssteg er sporbare. Der ligger også AI-funksjonene som brukes i selve databehandlingen.
TransformasjondbtHvert steg fra rådata til ferdig tabell er en dokumentert og testet datamodell, ikke et skript noen kjørte en gang.
Lagring for nettstedetSupabasePoengsummer fra statistikkspillet og henvendelser. Lite data, enkle behov.
PubliseringNetlifyLegger ut de ferdigbygde sidene. Publisering skjer på kommando, ikke ved hver endring.
AutomatiseringGitHub ActionsKjører de 33 faste jobbene som holder portalen i gang.

To dataarkitekturer, ikke én

Portalen har to måter å behandle data på, som lever side om side. Det er verdt å si rett ut, fordi det ellers ser ut som rot.

DEN ENKLE VEIENdriver nesten alle sidene i dagKildeProgram rydderDatafil i sidenDATALAGERETfor de vanskelige kildeneKildeRådata lagresTestede steg
De to lever side om side. Den enkle veien kom først og er rask og lett å forstå; datalageret er tyngre å sette opp, men det eneste som duger når kilden er vanskelig.

Grunnen til at begge finnes er ærlig nok: den enkle veien kom først og virker godt nok for det den gjør. Å skrive om alt til den nye ville kostet mye og gitt leseren ingenting. Nye og vanskelige kilder bygges på den nye, og på sikt kan den ta over.

Hva et datalager er

Kapittel 1 sa kort hva et datalager er: data fra mange kilder samlet i sin opprinnelige form, med en katalog over hva som finnes og hvor hvert tall kom fra. Det som gjør den formen verdt bryet, er det neste.

Den viktige forskjellen er at rådataene blir liggende urørt. De bearbeidede utgavene bygges opp fra dem på nytt hver gang, framfor å endres på plass. Oppdager vi at en beregning var feil, retter vi oppskriften og kjører kjeden om igjen. Vi trenger ikke lete etter hvilke tall som ble påvirket, for de finnes ikke lenger enn til neste kjøring. Det er også derfor et tall alltid kan spores tilbake til kilden sin.

Prisen er at det er tyngre å komme i gang enn å hente et tall rett fra et API og skrive det inn på en side. Det er nettopp derfor portalen har to dataarkitekturer og ikke én: den enkle veien bærer fortsatt det meste, og datalageret brukes der det faktisk gir noe den enkle veien ikke kan.

Lagdelingen: rå, ryddet, ferdig

I datalageret går tallene gjennom navngitte lag, og hvert lag har én jobb. Regelen er at ingenting tolkes ved innhenting: det som kommer inn, lagres som det kom. All logikk ligger i stegene etterpå, der den kan leses, testes og kjøres om igjen.

01 RÅDATASlik kilden publiserte det.Aldri redigert.02 RYDDET17 datamodeller. Kolonnenavnog datatyper gjort ensartede.03 BEARBEIDET15 datamodeller. Her skjerregnearbeidet, og her tolkesdokumentene.04 FERDIG6 datamodeller. Tabellene altannet leser fra.
Ingenting tolkes ved innhenting. Det som kommer inn, lagres som det kom, og all logikk ligger i steg som kan leses, testes og kjøres om igjen.

Et ord om ordet: en datamodell er en oppskrift på hvordan én tabell regnes ut fra en annen. Den har ingenting med en språkmodell å gjøre, som er det vi mener når vi skriver om AI lenger ned. Vi skriver alltid ut hele ordet, nettopp fordi de to ellers glir sammen.

Til sammen 38 datamodeller. Alle har en beskrivelse og minst én automatisk test som sier fra hvis et tall plutselig mangler, blir negativt eller får en dato i framtiden.

Avhengighetsgraf med tre ryddede tabeller til venstre som peker inn i én ferdig tabell i midten, og videre til en nøkkeltallsvisning til høyre. Hvert kort lister kolonnene i tabellen.
Veien én tabell tar gjennom datalageret: tre ryddede tabeller slås sammen til én ferdig tabell, som igjen gir nøkkeltallene. Hvert steg har en beskrivelse og minst én test som sier fra hvis et tall blir urimelig.

Et eksempel: fra PDF til tall

Hvert kvartal publiserer NAV et notat om arbeidsavklaringspenger. Det inneholder tall som er verdt å følge over tid - hvor mange som mottar ytelsen, hvilke diagnoser som dominerer, hvordan utviklingen går. Notatet er en PDF. Vil du se ti års utvikling, må du åpne ti dokumenter og skrive av tallene for hånd.

Her gjør datalageret noe den enkle veien ikke kan: en språkmodell leser dokumentet i selve databehandlingen, henter ut de konkrete tallene i strukturert form, og skriver i tillegg et kort sammendrag på norsk. Resultatet er én rad per notat, i en tabell du kan spørre på tvers av.

Det interessante er ikke at det virker, men hva det krevde. Notatene bruker to ulike definisjoner av «antall» om hverandre: de som mottar ytelsen, og det bredere antallet registrert med nedsatt arbeidsevne. Forskjellen er titusener av mennesker. En tolkning som blander dem, gir et tall som ser riktig ut og er feil. Å lære tolkningen å skille konsekvent var mer arbeid enn å få den til å lese dokumentet i det hele tatt.

Tallene tolkningen ikke klarer å lese sikkert, blir stående tomme framfor å bli gjettet. Et hull er ærlig. Et gjettet tall i en statistikkportal er det ikke. Siste kapittel går nærmere inn på hva slikt arbeid faktisk koster.

Flere flater mot de samme tabellene

Når de ferdige tabellene først ligger der, kan flere ting lese dem. Portalen er den mest synlige flaten, men ikke den eneste - og heller ikke den første.

Et spørreverktøy på norsk

En egen app der du stiller spørsmålet i vanlig språk og får både spørringen og svaret tilbake som tabell. Den er lesetilgang bare, med en øvre grense på hvor mye den kan hente. Dette var faktisk prosjektets aller første del, bygget før portalen fantes.

Oversikter over datalageret

Sammendrag og oversiktsvisninger som leser de samme ferdige tabellene, blant annet et automatisk skrevet sammendrag av hva hver datakilde inneholder.

Spørsmål i vanlig språk

Egne rom der man kan spørre om tallene på norsk uten å kunne spørrespråk, mot de samme tabellene portalen viser.

Portalen selv

Sidene du leser nå. Den ene flaten som er laget for folk som ikke vet at det finnes et datalager bak.

Poenget er at grunnarbeidet gjøres én gang. Å tolke ti år med dokumenter er dyrt; å lese den ferdige tabellen fra en ny flate er nesten gratis. Det er hele begrunnelsen for å ha et datalager framfor å hente rett til hver enkelt visning.

Hvorfor publisering er et bevisst valg

De fleste nettsteder legges ut på nytt hver gang koden endrer seg. Denne gjør ikke det, og det er med vilje.

Portalen henter data mange ganger i døgnet. Ville hver slik henting utløst en full utlegging, ville nettstedet blitt bygget om igjen dusinvis av ganger daglig - også for endringer ingen leser merker, som en rettet skrivefeil i en intern beskrivelse. I stedet skjer utleggingen når en datajobb faktisk har noe nytt å vise, eller når noen ber om det.

Prisen er at en kodeendring ikke er synlig før neste utlegging. Gevinsten er at det som legges ut, er en samlet og kontrollert tilstand framfor en tilfeldig.

Se det i portalen

Se hvordan denne siden henger sammen med restenNabolagskartet viser sidene, begrepene og kildene den er koblet til

Nytt på portalen

Vis:
HelseNytt

Omsorgsbehovet i din kommune mot 2050

Alle 357 kommuner har til sammen 285 000 innbyggere over 80 i dag. SSBs framskriving gir 591 000 i 2050. Sida lar deg velge kommune og bytte mellom hovedalternativet, sterk aldring og svak aldring, regner om til brukere av institusjon, omsorgsbolig og hjemmetjenester, og viser hvordan kommunen løser oppgaven i dag mot resten av landet. Kommuneøkonomien er koblet på: dagens netto driftsutgifter per innbygger over 80, ganget med hvor mange over 80 kommunen får.

HelseNytt

Oslo mot 2050: bydelene der antall over 80 mer enn dobles

Oslo kommunes egen framskriving gir 55 000 personer over 80 i 2050, mot 24 000 i dag. Veksten er skjevest i indre by og sør: Gamle Oslo, Søndre Nordstrand og Grünerløkka mer enn tredobler antallet, mens Stovner og Grorud vokser minst. Sida regner om til brukere av institusjon, omsorgsbolig og hjemmetjenester per bydel med samme regnestykke som landssida, viser Oslo mot landet i dag fra SSB 12003, og setter det opp mot NAVs tall for hvor mange i hver bydel som står utenfor arbeid.

HelseNytt

Omsorgsbehovet mot 2060: hva skjer når antall eldre nesten dobles

Norge har 938 000 personer over 67. I 2060 venter SSB 1,59 millioner. Bruker de eldre omsorgstjenestene som i dag, går antall eldre brukere av institusjon, omsorgsbolig og hjemmetjenester fra 171 000 til 391 000, og årsverkene fra 94 000 til 215 000. Sida tegner regnestykket år for år, i tre framskrivingsalternativer og med en test på friskere aldring, og sammenligner tall for tall med Ulf Andersen i NAV, som regnestykket er inspirert av.

KilderOppdatert

Historikken sier hva som kom inn og hva som ble revidert, for alle datasett

Hver gang pipelinen henter tall på nytt, sammenligner den med forrige versjon: hvilke måneder, kvartaler eller år som kom til, og hvilke tall tilbake i tid kilden har revidert. Det står i historikk-knappen, på oppdateringshistorikken og på kildesida for hver datafil, og er rekonstruert bakover fra git for alle femti datasett. På prissida, AAP, uføre, befolkning, valuta og konkurser står det også som en chip ved siden av kildehenvisningen på hver graf.

EnergiOppdatert

Kryptoandelen i datasentrene: en lesers regnestykke gir 48 til 60 prosent

Regjeringen oppgir 20 prosent, vi har regnet 38 med bare de to Bitdeer-anleggene. En leser har gått gjennom anleggene ett for ett og kommer til 48 prosent som gulv, og 60 når anlegget i Mo i Rana som ikke er meldt inn til Nkom, tas med. Regnestykket står i egen boks, anlegg for anlegg, merket som leserens.