Lisäsimme avoimen Suomi-datan R-pakettiin (sorvi) välineitä Maanmittauslaitoksen uusimpien julkisten kartta-aineistojen sekä Tilastokeskuksen StatFin-tietokannan PC Axis-muotoisten tilastojen lukemiseen ja esikäsittelyyn. Alla on visualisoitu esimerkiksi Suomen väestönkasvu kuntatasolla 2010.
Haasteita: (1) Visualisointi näyttää Suomen kartan nyt hassulla projektiolla. En vielä löytänyt tapaa projektion vaihtamiseen; vinkkejä otetaan vastaan. Visualisointi PlotShape-funktion kutsumalla spplot-funktiolla on ggplot2:a nopeampi. (2) PC Axis-datan lukemiseen käytetty pxR-paketti on vasta kehitteillä, ja sillä saa luetuksi vain osaa Tilastokeskuksen aineistoista.
# (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
# Asennusohjeet: http://sorvi.r-forge.r-project.org/asennus.html
# Esimerkki Suomen kuntatason vaestonkasvutilastojen (Tilastokeskus)
# visualisoinnista Maanmittauslaitoksen karttadatalla (vuonna 2010)
# Lataa soRvi
library(sorvi)
###############################################
# Lue Suomen kuntarajat SpatialPolygon-muodossa
# (C) Maanmittauslaitos 2011
# http://www.maanmittauslaitos.fi/aineistot-palvelut/digitaaliset-tuotteet/ilmaiset-aineistot/hankinta
data(MML)
sp <- MML[["1_milj_Shape_etrs_shape"]][["kunta1_p"]]
#################################################
# Lue kuntatason vaestonkasvutiedot tilastokeskuksen StatFin-tietokannasta
# http://www.stat.fi/tup/statfin/index.html
# PC Axis-muodossa ja muunna data.frameksi
px <- GetPXTilastokeskus("http://pxweb2.stat.fi/database/StatFin/vrm/synt/080_synt_tau_203_fi.px")
# Poimi taulukosta halutut tiedot
vaestonkasvu <- subset(px,
Väestönmuutos.ja.väkiluku == "Luonnollinen väestönlisäys" &
Vuosi == 2010)
################################################
# Lisaa tiedot karttaobjektiin
sp@data$vaestonkasvu <- vaestonkasvu$dat[match(sp$Kunta.FI, vaestonkasvu$Alue)]
# Korvaa puuttuvat arvot nollalla
sp[["vaestonkasvu"]][is.na(sp[["vaestonkasvu"]])] <- 0
################################################
# Piirra kuva
varname <- "vaestonkasvu"
int <- max(abs(sp[[varname]]))
q <- PlotShape(sp, varname, type = "twoway",
main = "Väestönkasvu 2010",
at = seq(0 - int, 0 + int, length = 11))
#png("vaestonkasvu.png")
jpeg("vaestonkasvu.jpg")
print(q)
dev.off()

En löytänyt funktioita “putsaa.shape.mml” ja “putsaa.px” Sorvi-paketista, varmaan tulossa seuraaviin versioihin? Tuosta projektiosta: miksi se on mielestäsi hassu? Mielestäni se näyttää ihan oikealta ETRS-TM35FIN -projektiolta, joka on määritetly MML:lta ladattuun shapeen. En ole R:ssä paljon projektioilla leikkinyt, mutta kun homma perustuu GDALiin niin readShapePoly:n proj4string-parametrilla voi määritellä projektiomuunnoksia. Toinen vaihtoehto olisi käyttää rgdal-paketin spTransform-funktiota.
Jep, oli jäänyt lisäämättä SVN:ään nuo funktiot, nyt pitäisi löytyä viimeisimmästä versiosta.
Karttaprojektio lie ok, lounais-Suomen kohdalla taitaa olla merialueitakin mukana mikä aluksi hämäsi. Koitin aiemmin muutella projektioita readShapePoly:n proj4string-parametrilla, esim. argumentilla proj4string=CRS(“+proj=merc”) en vielä onnistunut muuntamaan karttaa Mercatorin projektiolle, ehkä tässä pitäisi jotenkin muunnella myös datumien määrittelyjä? Sama tilanne spTransform:in kanssa. Lisäksi ggplot2:lla pitäisi onnistua vaihtamaan projektiota lennossa esim. coord_map(project= “mercator”), mutta tämäkään ei toiminut ainakaan alla olevan ggplot2-esimerkin kanssa. Mutta jo toimiva ETRS-TM35FIN -projektio on varsin standardi, joten ilman projektiovaihdoksiakin tultaneen toistaiseksi toimeen, ellei löydetä tähän toimivia esimerkkejä.
Se viimeisin versio on siis 0.1.10, tällä hetkellä saatavilla vain SVN-repon kautta (https://r-forge.r-project.org/scm/?group_id=1229), tulee 1-2 päivän viiveellä R-forgen jakeluun.
Joo, tuossa MML:n shapessa on tosiaan merialueita mukana. Leikkasin shapen Suomen rantaviivalla, shape voi ladata täältä: http://109.74.199.6:8080/share/kunta1_p_maa.zip . Kiemuraisen rantaviivan haittapuolena shapen koko kasvoi melkoisesti…
Karttaprojektion voi määrittää oikeaksi (ETRS-TM35FIN) sisäänlukuvaiheessa parametrilla proj4string=CRS(“+init=epsg:3047″), lisää tietoa yksityiskohdista löytyy täältä http://spatialreference.org/ref/epsg/3047/ . Kun projektio on määritelty sp-oliolle oikein, voi spTransform:in avulla muuntaa esim. tuon ETRS-Suomen vaikkapa lat/lon WGS84-Suomeksi seuraavasti:
sp <- readShapePoly("kunta1_p", proj4string=CRS("+init=epsg:3047"))
sp.wgs84 <- spTransform(sp, CRS("+proj=longlat +datum=WGS84"))
Vertailemalla näistä tehtyjä spplotteja, huomaa jo eroja.
ggplot:in käyttämä coord_map tukee ilmeisesti vain mapproj-paketin koordinaatti-järjestelmiä, joihin UTM (ETRS-TM35FIN:in projektio) ei kuulu toistaiseksi. ggplotillakin onnistuu Suomen piirtäminen kartalle kunhan tekee ensin tuon WGS84-muunnoksen ja sitten käyttää tuota sinunkin mainitsemaasi coord_map(project= “mercator”)-funktiota.
Loistavaa, kiitoksia. Hauska tuo shapen fraktaalinomainen rantaviiva. Pitää vielä vähän setviä, minkä verran valmiita datoja R-pakettiin voidaan/kannattaa lisätä. Projektioitten muuntelu onnistuu nätisti antamillasi esimerkeillä, tästä varmasti jatkossa apua. MML:n datoistakin näyttää löytyvän erikseen coast_p ja kunta1_p. Täytyy katsella operaatioita shapejen yhdistelyyn R:ssä myöhemmin tarpeen mukaan (esim. http://stackoverflow.com/questions/2962433/combining-bordering-shapefiles-in-r), ensi alkuun pärjättäneen valmiiksi tarjotuilla.
Ehkä tyhmä kysymys, mutta eikö tuo ETRS-TM35FIN ole nimenomaan järkevin projektio? Eikö se säilytä Suomen mittakaavan mahdollisimman järkevänä? Mercator tekee pohjoisista kunnista isompia. Mikä on jo valmiiksi ongelma kaikissa väestöpohjaisissa tarkasteluissa.
R:ssä ei ole kovin hyviä työkaluja kartogrammien tekemiseksi. Ei-jatkuvan muodon säilyttävän kartogrammin tekee helposti, mutta se ei Suomeen oikein sovi. Nimim. kokm. on. R:n cartogram -paketti vaatii väestöpohjatiedot ruudukkopohjaisena. Eikä siltikään tunnu piirtävän mielekkäitä karttoja.
Onkohan noiden MML:n kartta-aineistojen liittäminen pakettiin tai jakeleminen muokattuna netissä ihan lisenssiehtojen mukaista. Jos on, niin mahtavaa+upeaa.
ETRS-TM35FIN on standardiprojektio, mutta oltiin vaan yleisesti uteliaita muiden projektioiden visualisoinnin osalta. Koko maan lisäksi tarkoitus on visualisoida aineistoja esim. kaupunkitasolla taikka Suomea laajemmassa kontekstissa.
MML:n karttoja saa lisenssiehtojen mukaan jatkokäyttää varsin vapaasti ja käytäntömme on lisenssiehtojen mukainen (http://www.maanmittauslaitos.fi/node/6417). Kartat on MML:n sivuilla saatavilla vapaasti, mutta vasta erillisen kirjautumisen jälkeen. Tästä syystä niitä ei saada luettua R:ään suoraan verkon yli (toisin kuin esim. Tilastokeskuksen PC Axis-datat). Analyysien sujuvoittamiseksi päätettiin sen vuoksi toistaiseksi pistää MML:n peruskartat valmiiksi sorviin. Pitää kuitenkin ehkä miettiä muita tapoja jatkossa, jos tulee lisää vastaavia tilanteita. Yksi mahdollisuus on tehdä erillisiä datapaketteja tai jakaa aineistoja lisenssiehtojen mukaisesti vähemmin rajoituksin sopivalla palvelimella.
On, ETRS-TM35FIN on järkevin projektio ja siirtymävaiheen myötä uusi MML:n virallinen projektio. Muunnoksia saattaa kuitenkin tulla eteen muiden kuin MML:n aineistojem kanssa.