Tegemist on uuendatud versiooniga eelmisest postitusest Kuidas TAIst kergesti andmed Ri saada? seoses sellega, et muutus pakett pxweb
ning ka TAI andmebaasi aadress.
Eestis kogub tervise valdkonna statistikat TAI – Tervise Arengu Instituut, kes avaldab seda 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 sisse kas käsuga või pool-interaktiivsel moel.
Installeerime ja aktiveerime paketi pxweb
ja teised 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 pxweb_api_catalogue()
. Vaatame näiteks api kataloogi esimest elementi, mis on Rootsi statistikaametite leht.
pxweb_api_catalogue()[1]
## $api.scb.se ## Api: api.scb.se ## Statistics Sweden ## ('scb') ## Version(s) : v1 ## Language(s) : en, sv ## Limit(s) : 30 calls per 10 sec. ## 110000 values per call. ## Url template : ## http://api.scb.se/OV0104/[version]/doris/[lang]
Selleks, et pakett töötaks täielikult ka TAI andmetega, võiks lisada faili api.json TAI andmete asukoht ja vajalikud parameetrid, kuid seda ei ole tegelikult vaja.
Andmete esmakordseks allalaadimiseks, kui veel süntaksi kuju ei ole tuttav, siis on soovitatav kasutada interaktiivset käsku interactive_pxweb()
.
d <- pxweb_interactive()
Kui failis api.json
ei ol lisatud TAI andmebaasi, siis peaks näitama selle ära funktsioonis.
d <- pxweb_interactive("http://statistika.tai.ee/api/v1/et/Andmebaas/")
See juhendab samm-haaval kuni lõpliku andmepäringuni funktsiooniga
. Lõpliku andmepäringu kuju saab seejärel ise kergesti edasi töödelda.pxweb_get
Kui tabeli nimetus ja soovitud tunnuste väärtused on varasemalt teada, siis saab kirjutada andmepäringu 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.
Teeme valmis listi pxweb_query_list
, mis sisaldab meid huvitavate tunnuste väärtusi. Seejärel tõmbame andmed alla pxweb_data
objekti ning teeme selle andmetabeliks käsuga as.data.frame
. Andmetabel on pikal kujul. Listi saab ette anda ka JSON objektina ning andmed võib välja võtta samuti soovi korral JSON objektina.
pxweb_query_list <-list(
"Aasta"=c("2012","2013","2014","2015","2016","2017","2018","2019"),
"Ametiala"=c("0","1","2","3","4","5","6","7"),
"Tervishoiuteenuse osutaja liik" = c("0","1","2","3","4","5","6","7","8","9","10","11","12","13","14"),
"Brutokuupalga liik" = c("0","1","2","3","4","5","6","7"))
px_data <- pxweb_get(
url = "https://statistika.tai.ee/api/v1/et/Andmebaas/04THressursid/06THTootajatePalk/TT06.px", query = pxweb_query_list)
df_long <- as.data.frame(px_data, column.name.type = "text", variable.value.type = "text")
Ülal listis pxweb_query_list
võib kasutada ka tärni ‘*
‘, mis näitab, et soovime kõiki väärtuseid antud tunnuse puhul. Teine võimalus on kirjutada sinna sisse konkreetne väärtuste loetelu nagu ülal.
Ja ongi andmed alla laetud ja valmis töötlemiseks. Näiteks esitame allalaetud andmete põhjal tervishoiutöötajate mediaanpalkade arengu 2012-2019.
df_long %>%
filter(`Tervishoiuteenuse osutaja liik` == "Teenuseosutajad kokku",
`Brutokuupalga liik` == "Keskmine kuupalga mediaan (2. kvartiil)") %>%
ggplot(aes(y=`Tervishoiutöötajate brutokuupalk ja kuupalga kvartiilid`, x=Aasta, group=Ametiala, color=Ametiala)) +
geom_point() +
geom_line() +
labs(title = "Mediaanpalga areng", color="", x="", y="Euro", caption ="Allikas: TAI, tabel TT06;
arvutus: ~Documents/kommentaarid/TAIandmed/")
Vahel on andmete allalaadimise maht suurem, kui TAI andmebaas hetkel lubab ja päring annab veateate (vt ka https://github.com/rOpenGov/pxweb/issues/178). Sel juhul tasub proovida andmete alla laadimist osade kaupa. Näiteks, kui soovida laadida tervishoiukogukulude andmeid jupiti, siis tuleks lisada väärtus parameetrile $config$max_values_to_download
pxweb_query_list <-list("Aasta"=c("2008","2009","2010","2011","2012","2013","2014","2015","2016","2017", "2018", "2019"),
"Tervishoiuteenus"=c("0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15", "16","17","18","19","20","21","22","23","24","25","26","27","28","29", "30","31","32","33","34","35","36","37","38","39","40","41","42"),
"Rahastamismudel"=c("0","1","2","3","4","5","6","7","8","9","10","11"))
#andmetabel
url = "https://statistika.tai.ee/api/v1/en/Andmebaas/04THressursid/10Tervishoiukulud/KK01.px"
tai_pxweb <- pxweb(url)
#lisame täpsustava info, et korraga laeks osa andmeid
tai_pxweb$config$max_values_to_download <- 100000
#laadimine
px_data <- pxweb_get(tai_pxweb, query = pxweb_query_list)
Allikad:
Mans Magnusson, Leo Lahti and Love Hansson (rOpenGov 2014-2016). pxweb: R tools for PX-WEB API. URL: http://github.com/ropengov/pxweb