Kuidas TAIst kergesti andmed Ri saada?

Eestis kogub tervise valdkonna statistikat TAI – Tervise Arengu Instituut, kes avaldab info enda tervisestatistika ja terviseuuringute andmebaasis. Nende andmebaas kasutab programmi PC-Axis, mis on välja töötatud Rootsi Statistikaameti poolt.
Sellele tarkvarale on kirjutatud R-is valmis pakett pxweb (vt info CRANis), mis võimaldavad neid andmeid otse lugeda R-i kas otse käsuga või pool-interaktiivsel moel.

Installeerime ja aktiveerime paketi pxweb ning aktiveerime ka paketid dplyr ja ggplot2 andmete töötlemiseks ning kuvamiseks.

install.packages("pxweb")
library(pxweb)
library(dplyr)
library(ggplot2)

Paketiga tuleb kaasa fail tekstifail api.json, mis asub paketi kataloogis /pxweb/extdata/api.json. Failis on kirjas asutused, mis teadaolevalt samuti kasutavad tarkvara PC-AXIS ja võimaldavad andmeid alla laadida. Neid saab loetleda funktsiooniga api_catalogue. Vaatame näiteks api kataloogi kolme esimest elementi, mis on Rootsi ja Soome statistikaametite lehed.

api_catalogue()[1:3]
## [[1]]
## Api: api.scb.se ('scb')
##      Statistics Sweden 
## Version(s)   : v1 
## Language(s)  : en, sv 
## Limit(s)     : 30 calls per 10 sec.
##                1e+05  values per call.
## Url template :
##  http://api.scb.se/OV0104/[version]/doris/[lang] 
## 
## [[2]]
## Api: pxnet2.stat.fi ('statfi')
##      Statistics Finland 
## Version(s)   : v1 
## Language(s)  : fi, sv, en 
## Limit(s)     : 30 calls per 10 sec.
##                1e+05  values per call.
## Url template :
##  http://pxnet2.stat.fi/PXWeb/api/[version]/[lang] 
## 
## [[3]]
## Api: pxwebapi2.stat.fi
##      Statistics Finland (old version) 
## Version(s)   : v1 
## Language(s)  : fi 
## Limit(s)     : 30 calls per 10 sec.
##                1e+05  values per call.
## Url template :
##  http://pxwebapi2.stat.fi/PXWeb/api/[version]/[lang]

Selleks, et pakett töötaks ka TAI andmetega, tuleb lisada faili api.json TAI andmete asukoht ja vajalikud parameetrid. Selleks on nüüd kaks võimalust:

a) lisada käsitsi juurde faili api.json TAI andmed suvalise tekstiredaktoriga.
b) või kirjutame faili api.json üle, kui on kindel, et me teiste riikide andmeid kasutada ei soovi.

Alljärgnevalt kasutan teist varianti: nimetan orignaalfaili ümber ja kirjuta uue faili vaid TAI andmetega.

file.rename("~/R/win-library/3.4/pxweb/extdata/api.json", 
"~/R/win-library/3.4/pxweb/extdata/api_orig.json")
tai_api <- 
  '{
  "apis": {
     "pxweb.tai.ee": {
      "alias" : ["tai_et"],
      "description" : "Estonian National Institute for Health Development",
      "url" : "http://pxweb.tai.ee/PXWeb2015/api/[version]/[lang]/",
      "version": ["v1"], 
      "lang": ["en", "et"],
      "calls_per_period": 10,
      "period_in_seconds": 10,
      "max_values_to_download" : 100000
     }
  },

  "local_apis": {}
}'
write(tai_api, file = "~/R/win-library/3.4/pxweb/extdata/api.json")

Andmete esmakordseks allalaadimiseks, kui veel süntaksi kuju ei ole tuttav, siis on soovitatav kasutada interaktiivset käsku interactive_pxweb().

d <- interactive_pxweb()

See juhendab samm-haaval kuni lõpliku andmepäringuni, mis tehakse funktsiooniga get_pxweb_data. Lõpliku andmepäringu kuju saab seejärel ise kergesti edasi töödelda.

Kui tabeli nimetus ja soovitud tunnuste väärtused on varasemalt teada, siis saab kirjutada andmepäringu juba otse. Näiteks laeme alla tervishoiutöötajate palgad kõikide aastate, ametialade, teenuse osutaja liigi ja palga liigi lõikes. Ma tean, et see asub TAI andmebaasi alamkataloogis 04THressursid/06THTootajatePalk, tabelis TT06.px.

df_long <- 
  get_pxweb_data(
    url = "http://pxweb.tai.ee/PXWeb2015/api/v1/et/04THressursid/06THTootajatePalk/TT06.px",
             dims = list(Aasta = c('*'),
                         Ametiala = c('*'),
                         "Tervishoiuteenuse osutaja liik" = c('*'),
                         "Brutokuupalga liik" = c('*')),
             clean = TRUE)

Ülal päringus tähistab tärn *, et soovime kõiki väärtuseid antud tunnuse puhul. Teine võimalus on kirjutada sinna sisse konkreetne väärtuste loetelu. Valik clean võimaldab valida, kas soovitakse andmeid pikas formaadis (long), kus iga väärtus on eraldi reas, või laias formaadis (wide), kus iga väärtus on eraldi veerus. clean = TRUE annab andmed pikas formaadis.
Kui sooviksin andmeid laias vormis, siis paneksin lihtsalt clean = FALSE


df_wide <- 
  get_pxweb_data(
    url = "http://pxweb.tai.ee/PXWeb2015/api/v1/et/04THressursid/06THTootajatePalk/TT06.px",
             dims = list(Aasta = c('*'),
                         Ametiala = c('*'),
                         "Tervishoiuteenuse osutaja liik" = c('*'),
                         "Brutokuupalga liik" = c('*')),
             clean = FALSE)

Ja ongi andmed alla laetud ja valmis töötlemiseks. Näiteks esitame allalaetud andmete põhjal tervishoiutöötajate mediaanpalkade arengu 2011-2017.

df_long %>%  
  filter(`Tervishoiuteenuse osutaja liik` == "Teenuseosutajad kokku", 
         `Brutokuupalga liik` == "Kuupalk koos kõigi lisatasudega, mediaan") %>% 
  ggplot(aes(y=values, x=Aasta, group=Ametiala, color=Ametiala)) +
  geom_point()  +
  geom_line() + 
  labs(title = "Mediaanpalga areng", color="", x="", y="Euro", 
       caption = "Allikas: TAI, tabel TT06")

plot of chunk palgajoonis

Allikad:

Mans Magnusson, Leo Lahti and Love Hansson (rOpenGov 2014). pxweb: R tools for PX-WEB API. URL: http://github.com/ropengov/pxweb

Advertisements
Rubriigid: Näpunäide, Uncategorized, sildid: . Salvesta püsiviide oma järjehoidjasse.

Lisa kommentaar

Täida nõutavad väljad või kliki ikoonile, et sisse logida:

WordPress.com Logo

Sa kommenteerid kasutades oma WordPress.com kontot. Logi välja /  Muuda )

Google photo

Sa kommenteerid kasutades oma Google kontot. Logi välja /  Muuda )

Twitter picture

Sa kommenteerid kasutades oma Twitter kontot. Logi välja /  Muuda )

Facebook photo

Sa kommenteerid kasutades oma Facebook kontot. Logi välja /  Muuda )

Connecting to %s