dapla-statbank-client

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:

notebook
from statbank import StatbankClient

Så initialiserer du klienten med de innstillingene som oftest er faste på tvers av alle innsendingene fra ett produksjonsløp:

notebook
statcli = StatbankClient(date="2050-01-01", overwrite=True, approve=2)

Her vil du bli bedt om å skrive inn lastebruker, og 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.)

notebook
data_07495 = {"kargrs01fylker1.dat" : df_07495_fylker,
              "kargrs01landet1.dat" : df_07495_landet,}
statcli.transfer(data_07495, tableid="07495")

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:

notebook
filbeskrivelse = statcli.get_description(tableid="07495")
print(filbeskrivelse)

Med filbeskrivelsen kan du lett få en mal på dictionaryet du må plassere dataene i:

notebook
filbeskrivelse.transferdata_template()

Du kan også validere dataene dine mot filbeskrivelsen:

notebook
filbeskrivelse.validate(data_07495, tableid="07495")

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.

notebook
data_07495 = filbeskrivelse.round_data(data_07495)  # For å ta vare på endringene, så må du skrive tilbake over variabelen

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