Statistikkbanken
Pakken “dapla-statbank-client” kan brukes til å overføre tabeller til Statistikkbanken fra Jupyterlab i prodsonen og på Dapla. Den henter også “filbeskrivelsen” som beskriver formen dataene skal ha når de sendes inn til Statistikkbanken. Og den kan også hente publiserte data fra Statistikkbanken. Pakken er en python-pakke som baserer seg på at dataene (deltabellene) lastes inn i en eller flere pandas DataFrames før overføring. Ved å hente ned “filbeskrivelsen” kan man validere dataene sine (dataframene) mot denne lokalt, uten å sende dataene til Statistikkbanken. Dette kan være til hjelp under setting av formen på dataene. Å hente publiserte data fra Statistikkbanken kan gjøres gjennom løse funksjoner, eller via “klienten”.
Lenker: - Pakken ligger her på Pypi. Og kan installeres via poetry med: poetry add dapla-statbank-client
- Kodebasen for pakken ligger her, readme-en gir en teknisk innføring som du kan følge og kopiere kode fra, og om du finner noe du vil rapportere om bruken av pakken så gjør det gjerne under “issues” på github-sidene. - Noe demokode ligger i repoet, og kan være ett godt utgangspunkt å kopiere og endre fra.
Testoverføring fra STAGING - faktisk oppdatering fra PROD
Statistikkbanken opererer med ulike databaser for testing og produksjonssetting. Om du vil at tallene faktisk skal oppdateres på nettsidene så må du sende til Statistikkbankens “PROD”-database. Om du kun vil teste innsending skal du sende til databasen “TEST”. Disse databasene har de samme lastebrukerne, men passordene er ulike. Om du vil teste innsending må du derfor skaffe deg “test-passordet” til den lastebrukeren som du har tilgjengelig. For å gjøre tester via pakken må du være i staging på dapla: https://jupyter.dapla-staging.ssb.no/ eller staging i prodosonen: https://sl-jupyter-t.ssb.no/ Om du faktisk vil sende inn data til publisering i Statistikkbanken må du være i dapla-prod (den vanlige): https://jupyter.dapla.ssb.no/ eller i prodsonen på: https://sl-jupyter-p.ssb.no/ For å teste er det fint å skaffe seg noe data fra fjorårets publisering på et produksjonsløp man kjenner fra før. Evt. kan man hente data fra Statistikkbanken og sende disse tilbake snudd rett, og med riktig antall prikke-kolonner lagt til.
Kode-eksempler
Se mer detaljer i readme-en på prosjektets kodebase.
Opprette client
For å kunne bruke pakken må du importere klienten:
from statbank import StatbankClient
Så initialiserer du klienten med de innstillingene som oftest er faste på tvers av alle innsendingene fra ett produksjonsløp:
= StatbankClient(loaduser="LAST360", date="2050-01-01", overwrite=True, approve=2) statcli
Her vil du bli bedt om å skrive inn passordet til lastebrukeren.
Overfør data
Om du har dataene klare er det bare å overføre, men du må vite navnet på deltabell-dat-filene. (Statistikkbanken lagrer disse ned igjen som dat-filer.)
= {"kargrs01fylker1.dat" : df_07495_fylker,
data_07495 "kargrs01landet1.dat" : df_07495_landet,}
="07495") statcli.transfer(data_07495, tableid
Etter innsending kommer det en link til Statistikkbankens GUI for å følge med på om innsendingen gikk bra hos dem. Om det var det du ønsket, så er du nå ferdig… Men det finnes mer funksjonalitet her…
Hent Filbeskrivelse
For å hente filbeskrivelsen til en hovedtabell bruker du denne metoden under klienten:
= statcli.get_description(tableid="07495")
filbeskrivelse print(filbeskrivelse)
Med filbeskrivelsen kan du lett få en mal på dictionaryet du må plassere dataene i:
filbeskrivelse.transferdata_template()
Du kan også validere dataene dine mot filbeskrivelsen:
="07495") filbeskrivelse.validate(data_07495, tableid
Problematikk knyttet til avrunding
Det tas noe ekstra ansvar i pakken rundt avrunding av desimaltall, da filbeskrivelsen inneholder informasjon om hvor mange desimaler som blir lagret per kolonne, kan vi runde av til rett antall samtidig som vi tar ett bevisst valg rundt “hvilken vei vi skal runde av”. På barneskolen lærte vi at ved 2,5 avrundet til 0 desimaler, så runder vi opp til 3. Det samme skjer i utgangspunktet i SAS og Excel. Python og R runder derimot “mot nærmeste partall”, så fra 2,5 blir det rundet til 2, men fra 1,5 blir det også rundet til 2. Dette er for å forhindre bias i en retning. Dvs. om alle tall rundes opp, vil en hel kolonne med tall “dras oppover”, ved å gjøre annenhver opp og ned, vil ikke helheten bli “dratt en spesifikk vei”. Siden “round to even” ikke er det folk er vandte til, gjør vi derfor noe annet i denne pakken, enn det som er vanlig oppførsel i Python. Vi runder opp. Om du bruker følgende metoden under filbeskrivelsen på dataene, så vil denne runde oppover, samtidig som den konverterer til en streng for å bevare formateringen.
= filbeskrivelse.round_data(data_07495) # For å ta vare på endringene, så må du skrive tilbake over variabelen data_07495
Annen funksjonalitet du kan lese om i readme-en er:
- En date-widget for å visuelt endre til en valid dato.
- Lagring av overføring og filbeskrivelses-objekter til json-filer
- Uthenting av logg fra klienten
- Henting av publisert data fra statbanken
- Rotering av tabeller fra statbanken