Tilastokeskuksen PC Axis-muotoisten aineistojen visualisointi Suomen kartalla

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.

Alla vielä lähdekoodi:


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

Tietoja antagomir

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

8 vastausta artikkeliin Tilastokeskuksen PC Axis-muotoisten aineistojen visualisointi Suomen kartalla

  1. Joona sanoo:

    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.

    • antagomir sanoo:

      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ä.

  2. Joona sanoo:

    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.

  3. antagomir sanoo:

    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.

  4. MV sanoo:

    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.

    • antagomir sanoo:

      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.

    • Joona sanoo:

      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.

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