R-ohjelmointi.org

Tilastotieteellistä ohjelmointia R-kielellä

KHO:n vuosikirjapäätökset

Korkein hallinto-oikeus (KHO) valvoo alempien viranomaisten lainkäytön oikeellisuutta, ja se käyttää ylintä tuomiovaltaa hallintolakiin liittyvissä asioissa. KHO julkaisee julkisia päätöksiään muun muassa vuosikirjapäätöksinä. Vuosikirjapäätökset ovat nykyisin kyseltävissä REST API:n kautta. Aineisto on julkaistu CC BY 4.0 -lisenssillä, ja tarkempiin käyttöehtoihin voi tutustua Oikeusministeriön, Aalto-yliopiston ja Edita Publishing Oy:n kehittämä Semanttinen Finlex datapalvelun käyttöehdot-sivulla. Katsotaanpa millaisia asioita on kokonaisuudessaan käsitelty eniten julkaistuissa vuosikirjapäätöksissä.

Datan haku

Data olisi näppärästi tallennettuna JSON-LD -muodossa (RDF), mutta en onnistunut löytämään yhtäkään ajantasaista R-paketti, jolla ko. tiedostoja pystyy suoraan lukemaan. Siksi tein haun tökerömmin käyttäen pelkkään JSON:ia, ja lopuksi poimimalla tuloksista halutut asiat merkkijonofunktoilla.

Latasin datan esillisiin tekstitiedostoihin seuraavalla skriptillä:

library(RCurl)
wrkdir<-"C:\\Users\\lenovo\\Desktop\\KHO\\"
type<-"KHO"
for(i in 2014:1990) {
   for(j in 1:500) {
      tmp<-try(getURL(paste0("http://data.finlex.fi/api/v1/judgements/ECLI:FI:KHO:", i, ":", j, "?content=txt&pretty")))
      if(class(try)!="try-error") {
         write(tmp, file=paste0(wrkdir, type, "_", i, "_", j, ".txt"))
      } else {
         break()
      }
      Sys.sleep(runif(1, min=1, max=5))
   }
}

Kultakin vuodelta haetaan korkeintaa 500 vuosikirjapäätöstä, mikä on aivan riittävästi, koska useimpina vuosina päätöksiä on paljon vähemmän. Ennen seuraavaa muokkausvaihetta poistin kaikki tiedostot, joissa ei ole oikeaa sisältöä (koko noin 1 kt).

Data muokkaus taulukoksi

Seuraavalla skriptillä muokkasin keskeiset tiedot yhteen suureen taulukkoon:

library(jsonlite)
trim <- function (x) gsub("^\\s+|\\s+$", "", x)
wrkdir<-"C:\\Users\\lenovo\\Desktop\\KHO2\\"
files<-dir(wrkdir)
 
res<-as.data.frame(matrix(nrow=length(files), ncol=7, data=NA))
colnames(res)<-c("paatos", "pvm", "oikeusaste", "asiasanat", "lait", "tiivistelma", "perustelut")
rownames(res)<-files
 
for(i in 1:length(files)) {
  tmp<-readLines(paste0(wrkdir, files[i]))
  tmp<-fromJSON(tmp)
  tmp<-tmp[[1]]
 
  paatos <- tmp$"@id"
  paatos <- gsub("http://data.finlex.fi/oikeus/ECLI:FI:KHO:", "", paatos)
  lait <- tmp$refToLegislation
  tiivistelma <- tmp$abstract$"@value"
  asiasanat <- tmp$description[[1]]
  asiasanat<-gsub("http://data.finlex.fi/voc/kho/fin/", "", asiasanat)
  n<-nchar(asiasanat)
  for(j in 1:length(asiasanat)) {
    asiasanat[j]<-substr(asiasanat[j], 1, n[j]-7)
  }
  asiasanat<-trim(gsub("_", " ", asiasanat))
  asiasanat <- paste(asiasanat, collapse=";")
  pvm <- tmp$issued
  oikeusaste <- tmp$subject
  oikeusaste <- gsub("http://data.finlex.fi/common/", "", oikeusaste)
  perustelut <- tmp$text$"@value"
 
  res[i,1] <- ifelse(is.null(paatos), "", paatos)
  res[i,2] <- ifelse(is.null(pvm), "", pvm)
  res[i,3] <- ifelse(is.null(oikeusaste), "", oikeusaste)
  res[i,4] <- ifelse(is.null(asiasanat), "", asiasanat)
  res[i,5] <- ifelse(is.null(lait), "", lait)
  res[i,6] <- ifelse(is.null(tiivistelma), "", tiivistelma)
  res[i,7] <- ifelse(is.null(perustelut), "", perustelut)
}

Aineiston kuvailua

Prosessoidussa aineistossa on yhteensä 2365 päätöstä vuosilta 1997 – 2016. Päätösten perustelut ja tiivistelmät ovat yhteensä noin 64 miljoonaa merkkiä. Koska yhdellä suomenkielisellä A4-sivulla on tyypillisesti noin 2000 merkkiä, on aineistossa noin 32 000 sivua. Entä mitkä ovat yleisimmät aineistossa esiintyvät asiasanat?

Päätöksissä esiintyvät asiasanat voi saada selville vaikkapa seuraavasti:

as.data.frame(head(sort(table(unlist(lapply(kho$asiasanat, function(x) strsplit(x, split=";")))), decreasing=T), 20))
                             Var1 Freq
1      maankaytto ja rakentaminen  182
2                   arvonlisavero  157
3  henkilokohtaisen tulon verotus  141
4          elinkeinotulon verotus  129
5                   kunnallisasia  116
6                 ulkomaalaisasia   92
7                   valitusoikeus   86
8               julkinen hankinta   83
9                   ymparistolupa   82
10             asiakirjajulkisuus   57
11                   poikkeaminen   57
12                 vammaispalvelu   57
13                     toimivalta   55
14                toimeentulotuki   45
15               kunnallisvalitus   43
16               verovelvollisuus   42
17                     asemakaava   39
18                   oleskelulupa   39
19                  hallintoriita   37
20                    tuloverotus   37

Asiasanat varmaankin puhuvat puolestaan. Eräät yleisimmin esiintyvät asiasanat ainakin liittyvät verotukseen. Maankäyttö- ja rakentamisasiatkin näemmä ovat korkealla listalla.

Jatkoajatuksia

Samaa rajapintaa käyttäen voidaan kysellä myös lainsäädäntöä. En ole aiemmin ajatellut asiaa, mutta nyt alkoi kutkuttaa ajatus laskea muun muassa eri asioista annettujen lakien yhteispituudet. Tiedettehän sen huijauksen, jossa kerrotaan eri lakien pituuksista (kaalihuijaus, ks. esim. http://www.bbc.com/news/magazine-35962999), joten olisi kiva tutkia, miten asiat oikeasti ovat Suomen lainsääsännössä.


Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

Category