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.
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()

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?
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.
Tämän postauksen esimerkki käyttää vanhentuneita kuntarajoja GADM-tietokannasta. Nyt blogista löytyy myös esimerkki, jossa ajantasaiset kuntarajat on haettu Maanmittauslaitoksen tietokannasta, ja hyödynnetty Tilastokeskuksen PC-Axis-muotoisten aineistojen visualisoinnissa. Esimerkki löytyy täältä: http://louhos.wordpress.com/2011/10/19/tilastokeskuksen-pc-axis-muotoisten-aineistojen-visualisointi-suomen-kartalla/
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.
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).
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.
Funktio dev.print() ei säilytä kartan mittasuhteita. Suomineito näyttänee paremmalta, jos käytät suoraan png()-funktiota.
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!
graph- ja igraph-paketteja ei tällä hetkellä tarvita, poistin ne nyt toistaiseksi riippuvuuksista ja lisäsin ehdottamiasi lisätietoja paketin asennuksesta ja muista riippuvuuksista projektin kotisivulle http://sorvi.r-forge.r-project.org/ (sivu päivittyy vuorokauden sisään)
Yksityiskohtaisemmat ohjeet paketin asennukseen ja käyttöönottoon on nyt lisätty sivulle http://sorvi.r-forge.r-project.org/asennus.html