# -*- coding: utf-8 -*-
# Hvordan lage JSON-stat spørring som gir både kommunenavn og kommunenummer (id)
# Ligger også som Jupyter notebook på https://github.com/janbrus/ssb-api-python-examples
# Bruker pyjstat og pandas. Pandas lastes som del av pyjstat
from pyjstat import pyjstat
import requests
# URL med tabellens metadata, som vi skal poste spørringen mot
POST_URL = 'https://data.ssb.no/api/v0/no/table/07459'
# Spørring - kan også tas fra konsoll
json_q = {"query":[{"code":"Region","selection":{"filter":"item","values":["0301","1103","5001"]}},
{"code":"Kjonn","selection":{"filter":"item","values":["1","2"]}},
{"code":"Alder","selection":{"filter":"item","values":["000","001","002"]}},
{"code":"ContentsCode","selection":{"filter":"item","values":["Personer1"]}},
{"code":"Tid","selection":{"filter":"item","values":["2019","2020","2021"]}}
],
"response":{"format":"json-stat2"}}
# poster spørringen
res = requests.post(POST_URL, json=json_q)
# Leser JSON-stat resultatet med biblioteket pyjstat
# Lagrer det som datasett ds.
ds = pyjstat.Dataset.read(res.text)
# Se datasettet ds
ds
# Henter noen overordnete metadata fra JSON-stat datasettet
tittel = ds['label']
print(tittel)
# Sist Oppdatert som GMT
last_update = ds['updated']
print(last_update)
# Henter kilde
source = ds['source']
print(source)
# Leser resultatet til en dataframe
df = pyjstat.Dataset.read(res.text)
#Vi må lage to dataframes, en med tekst og en med ID. Pyjstat kun tillater enten/eller
befolkning = ds.write('dataframe')
befolkning_id = ds.write('dataframe', naming='id')
# lager en ny kolonne med både kommunenummer og navn slått sammen
befolkning['kommune'] = befolkning_id['Region'] + ' ' + befolkning['region']
# lager en ny dataframe som bare har med kolonnene vi ønsker, i ny rekkefølge. Merk doble [[ ]]
befolkning_ny = befolkning[['kommune', 'kjønn', 'alder', 'år', 'value']]
print(befolkning_ny)
# ### Kommunereformen 2020 - sammenslåtte tidsserier
# Merk at spørringen i eksempelet over bruker rene kommunenummer, og ikke K-koder tall for sammenslåtte kommuner i tidsserier.
# En spørring som inkluderer tidsserier for kommuner som er berørt av kommunereformen, kan ikke benytte "item".
# K-koder må ha agg: og navnet på aggregeringen KommSummer istedet, "filter": "agg:KommSummer".
# Benytter også "agg:FemAarigGruppering" på alder.
# Eksempel på en spørring for Oslo og Moss. Tallene for Oslo blir de samme som om jeg hadde brukt 0301,
# mens tidsserien for K-3002 Moss inkluderer kommunene som inngår i nye Moss, dvs. tidligere 0104 Moss og 0136 Rygge.
json_q1 = {"query":
[{"code":"Region","selection":{"filter":"agg:KommSummer","values":["K-0301","K-3002"]}},
{"code":"Kjonn","selection":{"filter":"item","values":["1","2"]}},
{"code":"Alder","selection":{"filter": "agg:FemAarigGruppering", "values":["F00-04", "F05-09"]}},
{"code":"ContentsCode","selection":{"filter":"item","values":["Personer1"]}},
{"code":"Tid","selection":{"filter":"item","values":["2019","2020","2021"]}}
],
"response":{"format":"json-stat2"}}
# samme med ny spørring
res1 = requests.post(POST_URL, json=json_q1)
ds1 = pyjstat.Dataset.read(res1.text)
befolkning1 = ds1.write('dataframe')
befolkning_id1 = ds1.write('dataframe', naming='id')
print(befolkning1)
# (...)