Få Kode og Tekst - eksempel med HS-koder i månedlig Utenrikshandel

#!/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()