R-paketti avoimen Suomi-datan louhintaan

On tullut aika yhdistää voimavarat ja koota kattava kokoelma eri tahoilla kehitettyjä ratkaisuja avoimen datan käsittelyyn yhteen pakettiin. Kehitteillä oleva avoimen lähdekoodin sorvi-paketti on suunnattu palvelemaan erityisesti suomalaista avoimen datan yhteisöä ja kokoamaan yleiskäyttöisiä välineitä tietoaineistojen hakuun, putsaamiseen, yhdistelyyn, louhintaan ja visualisointiin.  Esimerkkejä paketin käytöstä Suomi-datan penkomiseen tullaan julkaisemaan lisää tässä blogissa.

Paketti on kehitysvaiheessa, ja uudet tekijät ja lisäykset ovat tervetulleita. Ensimmäisenä esimerkkinä sorvin käytöstä hain kuntien asukasluvut Väestörekisterikeskuksen sivulta ja visualisoin kuntien sukupuolijakauman Suomen kartalla. Miesvaltaiset kunnat on merkitty sinisellä ja naisvaltaiset punaisella.

Suomen kuntien sukupuolijakauma

Matkan varrella ilmeni seuraavia teknisiä ongelmia: 1) gadm-muotoinen Suomen kuntajako on vanhentunut versio, esimerkiksi Rovaniemen ja Rovaniemen maalaiskunnan yhdistyminen ei ole näytä olevan mukana tässä versiossa. Alueet, joille asutustietoja ei ollut saatavilla, on merkitty karttaan valkoisella. Kertokaa, jos tiedätte mistä ajantasaisempi kuntajako on saatavilla R:lle. 2) En onnistunut käsittelemään skandeja R-paketin käännössä, joten ne piti ensin poistaa kuntien nimistä. Tämä tuskin vaikuttanee tuloksiin. Osaako
joku kertoa, miten skandit jotenkin mukaan R-pakettiin? 3) Väestörekisterikeskuksen tiedot piti hakea parsimalla keskuksen verkkosivun taulukkoa XML-paketin työkaluilla. Kätevämpi tapa (kuten Juuso aiemmin mainitsi) olisi hyödyntää aineistoa suoraan PC Axis-muodosta esim. Tilastokeskuksen sivuilta, vinkkejä otetaan vastaan. Tässä vielä lähdekoodi Suomen kuntien sukupuolijakauman visualisointiin sorvi-paketin hakutoimintoja hyödyntäen:

# (C) 2011 Leo Lahti <leo.lahti@iki.fi> All rights reserved.
# License: FreeBSD, http://en.wikipedia.org/wiki/BSD_licenses

# Tama esimerkki on testattu sorvi-paketin versiolla 0.1.42

# Skripti hakee Suomen kuntarajat ja vaestorekisterin asukaslukutiedot
# kunnittain, ja laskee sekä visualisoi sukupuolten suhteellisen
# osuuden eri kunnissa Suomen kartalla.

# Lataa sorvi-paketti
# Asennusohjeet: http://sorvi.r-forge.r-project.org/asennus.html
library(sorvi)

# hae suomen kartta ja kuntarajat gadm-muodossa
gadm <- GetGADM("FIN_adm", "Kunta")

# vaestorekisterin asukasluvut kunnittain
vrek <- GetPopulationRegister("http://vrk.fi/default.aspx?docid=5127&site=3&id=0")

# Liita vaestorekisterin tiedot karttaobjektiin ja
# aseta nollaan asukasluku kunnissa joiden osalta se ei ole tiedossa
gadm$asukkaita <- log10(rowSums(vrek[gadm$Kunta, c("Miehet", "Naiset")]))
gadm$asukkaita[is.na(gadm$asukkaita)] <- 0
# Laske myos sukupuolten suhteellinen osuus
gadm$miehet.osuus <- vrek[gadm$Kunta, "Miehet"]/vrek[gadm$Kunta, "Yhteensa"]
gadm$naiset.osuus <- vrek[gadm$Kunta, "Naiset"]/vrek[gadm$Kunta, "Yhteensa"]
# Aseta arvoon 50% miesten/naisten osuus
# kunnissa joiden osalta vakiluku ei ole tiedossa
gadm$miehet.osuus[is.na(gadm$miehet.osuus)] <- 0.5
gadm$naiset.osuus[is.na(gadm$naiset.osuus)] <- 0.5


# paletin rajapisteet
varname <- "naiset.osuus"
interval <- max(abs(gadm[[varname]] - 0.5))
at <- seq(0.5 - interval, 0.5 + interval, length = 100)

# Piirra Suomen kartta varitettyna naisten suhteellisen osuuden nojalla
q <- PlotShape(gadm, varname, type = "twoway",
at = at, main = "Naiset Suomen kunnissa")

# Save the Figure into a file:
#png("Suomen.kuntien.sukupuolijakauma.png", width = 600, height = 600)
print(q)
#dev.off()

Tietoja antagomir

http://www.iki.fi/Leo.Lahti
This entry was posted in sorvi, Suomi, tiedonlouhinta, visualisointi. Bookmark the permalink.

10 vastausta artikkeliin R-paketti avoimen Suomi-datan louhintaan

  1. JTT sanoo:

    Tuohon kuntakarttaan liittyvä ehdotus. Maanmittauslaitos jakaa ilmaiseksi yleiskartan ESRI shape-tiedostona (http://www.maanmittauslaitos.fi/aineistot-palvelut/digitaaliset-tuotteet/ilmaiset-aineistot/hankinta). Yleiskartasta löytyvät muun muassa ajantasaisemmat kuntarajat. Lisenssiehtojen mukaisesti aineistoa voi vapaasti kopioida ja levittää tietyin rajoituksin (http://www.maanmittauslaitos.fi/node/6417). Ehkä tuon shapefilen voisi muuntaa vaikkapa SpatialPolygons-muotoon, niin se olisi vähän helpommin käytettävissä tuossa Sorvi-paketissa?

    • antagomir sanoo:

      Kiitos, tämä näyttää onnistuvan. Latasin Suomen shape-filet Maanmittauslaitoksen sivuilta ja konvertoin SpatialPolygon-muotoon readShapePoly-funktiolla (maptools-paketista). Oletusarvoinen projektio näyttää Suomen kartan hieman vääntyneenä, nyt vielä pitää etsiä oikeat parametrit CRS:lle (readShapePoly-funktion proj4string-argumentti), tai löytyykö muuta tapaa kokeilla eri projektioita SpatialPolygons-visualisoinnissa. Pistän esimerkin myöhemmin tähän blogiin.

  2. JTT sanoo:

    Olen onnistunut käyttämään skandeja R-paketeissa, ainakin Windows-ympäristössä, jos aineistoa, esimerkiksi data framea, on käsitelty UTF-8 muodossa. Skandithan eivät kuulu ASCII-merkistöön. Manuaalissa Writing R Extensions on muutamia hyviä vinkkejä asian ratkaisemiseksi (http://cran.r-project.org/doc/manuals/R-exts.html), mutta ratkaisu riippui muistaakseni vähän siitä, olivatko skandit aineistossa, ohjesivuissa vai jossakin muualla.

  3. MV sanoo:

    Katsoin sitä hae.väestörekisteri funktiota. Kannattaa hakea se htmllähdetiedosto ensin vaikkapa htmlParse:lla tai readLines:illä. Molemmat ottavat parametriksi URL:n ja molemmissa sen käytetyn merkistön voi vaihtaa. R:n pitäisi osata vaikka mitä merkistöjä joten ongelma on vain sen datan lukeminen oikeassa muodossa. Funktio iconv on parempi merkistömuunoksiin kuin gsub.

    Jos on niin että capabilities(“iconv”) on FALSE kannattaa asentaa R uusiksi tai hankkia ajantasainen käyttöjärjestelmä (Ubuntu).

    • antagomir sanoo:

      Kiitti vinkeistä, Tässä yhteydessä funktiossa käytetty readHTMLTable näyttäisi ajavan saman asian kuin htmlParse ja readLines; iconv-funktion avulla saadaan mäpätyksi eri enkoodaukset kätevästi, otetaan tämä käyttöön tulevissa versioissa.

  4. MVgroupie sanoo:

    Funktio dev.print() ei säilytä kartan mittasuhteita. Suomineito näyttänee paremmalta, jos käytät suoraan png()-funktiota.

  5. talouspiiri sanoo:

    Moi. Täydellinen Newbie täällä, jos sallitte. Asensin mäkille R version 2.13.2 ja R GUI:n. Aloitin elämäni ensimmäisen R-session tavoitteena kokeilla esimerkkiä.

    install.packages(“sorvi”, repos=”http://R-Forge.R-project.org”)
    Warning: dependencies ‘ggplot2’, ‘graph’, ‘igraph’, ‘plyr’, ‘ReadImages’, ‘RgoogleMaps’, ‘XML’ are not available
    also installing the dependency ‘sp’

    Onnistuin googlaamaan, että normaalisti paketteja asennetaan muualta, kuin R-Forgesta. Esim näin:
    install.packages(“plyr”)

    Mutta yksi ei onnistunutkaan:
    install.packages(“graph”)
    Warning message:
    In getDependencies(pkgs, dependencies, available, lib) :
    package ‘graph’ is not available (for R version 2.13.2)

    Googlailin apua, löytyi tämmöstä:
    source(“http://bioconductor.org/biocLite.R”)
    biocLite(“graph”)

    Ajaminen antaa varoitusta ja asennus ei onnistu:
    source(“http://bioconductor.org/biocLite.R”)
    BioC_mirror = http://bioconductor.org
    Change using chooseBioCmirror().
    Warning messages:
    1: In safeSource() : Redefining ‘biocinstall’
    2: In safeSource() : Redefining ‘biocinstallPkgGroups’
    3: In safeSource() : Redefining ‘biocinstallRepos’

    Mitäs nyt kannattais tehdä?

    Ja kehitysideana esimerkkeihin ja Sorviin: pystyisikö alun pakettien asentelun ohjeistamaan niin että tällainen pystymetsä-newbie onnistuu ensimmäisellä kokeilukerrallaan toistamaan esimerkkinne. Olis aivan mahtavaa!

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

You are commenting using your WordPress.com account. Log Out / Muuta )

Twitter-kuva

You are commenting using your Twitter account. Log Out / Muuta )

Facebook-kuva

You are commenting using your Facebook account. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s