#!/usr/bin/env python
# coding: utf-8
# Dette ligger også som Jupyter notebook på https://github.com/janbrus/ssb-api-python-examples
# Hvordan lage JSON-stat spørring som gir både navn og (id)
# Eksempel HS-koder utenrikshandel
# Importerer biblioteker
# Bruker [pyjstat](https://pypi.org/project/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
tabid = "08799" #årstall ligger i '08801'
lang = "no" # language code can also be "en"
POST_URL = "https://data.ssb.no/api/v0/" + lang + "/table/" + tabid # 'https://data.ssb.no/api/v0/no/table/08799'
# Spørring, kan tas fra API-konsoll:
# Import / eksport alle varkoder til US, ca. 65000 celler.
# Max grense for en spørring i PxWebApi er 800.000 celler, inkl tomme celler.
json_q = {
"query": [
{
"code": "Varekoder",
"selection": {
"filter": "all",
"values": [
"*"
]
}
},
{
"code": "ImpEks",
"selection": {
"filter": "item",
"values": [
"1",
"2"
]
}
},
{
"code": "Land",
"selection": {
"filter": "item",
"values": [
"US"
]
}
},
{
"code": "ContentsCode",
"selection": {
"filter": "item",
"values": [
"Mengde1",
"Verdi",
"Mengde2"
]
}
},
{
"code": "Tid",
"selection": {
"filter": "top",
"values": [
"1"
]
}
}
],
"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)
type(ds)
# 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)
# Roles gir noen snarveier
ds_roles = ds['role']
print(ds_roles)
# Lager dataframes
# Vi må lage to dataframes, en med tekst og en med ID. Pyjstat tillater bare enten/eller
hstrade = ds.write('dataframe')
hstrade_id = ds.write('dataframe', naming='id')
hstrade.head()
hstrade_id.head()
# Lager en ny kolonne med både varekoder og navn slått sammen
hstrade['hstrade_combi'] = hstrade_id['Varekoder'] + ' ' + hstrade['varenummer']
hstrade.columns
# Lager en ny dataframe som bare har med kolonnene vi ønsker, i ny rekkefølge. Merk doble [[ ]]
hstrade_new = hstrade[['hstrade_combi', 'import/eksport', 'land', 'statistikkvariabel', 'måned', 'value']]
hstrade_new.tail()