R-ohjelmointi.org

Tilastotieteellistä ohjelmointia R-kielellä

Suomen kuntakartta Tableau:hun (!?#%) – R avuksi!

Tableau on erityisesti datan esittämiseen ja visualisointiin kehitetty ohjelmisto. Suuri osa tavanomaisista aineistoista vilahtaa Tableau:hun kuin vettä vain, mutta yritäpäs änkeä sinne uusi karttapohja, niin ongelmissa ollaan. Tableau (9.0.4) ei nimittäin lue ESRI Shapefilejä, KML:ää eikä liioin GeoXML:ää. Kartta pitää syöttää ohjelmaan polygoneina. Seuraavassa on ratkaisuesimerkki käyttäen Suomen kuntakarttaa vuodelta 2013.

Mistä löytäisi kuntakartan?
Pohjoismaiden kuntakartat löytyvät Invison-sivuilta, mutta Suomen kuntakartta perustuu GADM-projektin tuottamaan karttaan, joka on vanha, eikä siis huomioi viime vuosien kuntaliitoksia.

Onneksi Suomen ajantasaiset kuntakartat vuosilta 2011-2016 löytyvät Datajournalismi-blogista KML-muodossa. Osa kartoista on leikattu rantaviivaan, osa ei. Vuoden 2013 kartta on leikattu rantaviivaan, ja käytämme sitä seuraavassa esimerkissä.

Muunnetaan kartta taulukoksi
Koska Tableau ei lue kml-muotoisia tiedostoja, luetaan seuraavassa ensin kml-tiedosto R:ään, muunnetaan se taulukkomuotoon, ja kirjoitetaan se levylle tekstitiedostoon. R-koodi näyttää seuraavalta:

library(sp)
library(maptools)
library(rgeos)
library(rgdal)
library(ggplot2)
 
kml<-readOGR("C:\\Users\\Acer\\Desktop\\Kuntarajat 2013.kml", "Kuntarajat 2013")
 
# Muuntaa kml:n taulukoksi
kmlf<-fortify(kml)
 
d<-data.frame(Municipality=kml$Name, id=0:max(as.numeric(kmlf$id)))
kmlf$Municipality<-d$Municipality[match(kmlf$id, d$id)]
write.table(kmlf, "C:/Users/Acer/Desktop/kmlf.txt", sep="\t", col.names=T, row.names=F, quote=F)

KML-tiedoston lukemisessaon ongelmana selvittää layer:in nimi. KML-tiedostosta löytyy rivi, joka kertoo readOGR()-funktiolle annettavan layerin nimen:

Kuntarajat 2013

Tuloksena on tekstitiedosto, joka voidaan lukea Tableau:hun. Tiedoston alku näyttää seuraavalta:

      long      lat order  hole piece group id Municipality
1 24.30094 62.98835     1 FALSE     1   0.1  0    Alajärvi
2 24.25858 62.98575     2 FALSE     1   0.1  0    Alajärvi
3 24.23192 62.98998     3 FALSE     1   0.1  0    Alajärvi
4 24.22859 62.99868     4 FALSE     1   0.1  0    Alajärvi
5 24.22623 63.00485     5 FALSE     1   0.1  0    Alajärvi
6 24.18045 63.00755     6 FALSE     1   0.1  0    Alajärvi

Tableau:ssa kentät pitää määritellä seuraavalla tavalla, kun Marks-kentän arvoksi on ensin asetetty Polygon:

long:         Columns
lat:          Rows
Municipality: Color
order:        Path
id:           Detail

Tämän jälkeen kartta näyttää Tableau:ssa seuraavalta:

Sisä-Suomen kunnat näkyvät kartalla oikein, mutta jos kunnan alueeseen sisältyy saaria, polygon näyttää oudolta, mikä näkyy paremmin yksityiskohdissa:

Tämä johtuu siitä, että saaret pitäisi määritellä omiksi polygoneikseen Tableau:hun siirrettävässä tiedostossa, mutta sitä ei ole tässä vielä tehty.

Lisätietoja polygonikarttojen siirtämisestä Tableau:hun on keskusteluketjuissa Tableau:n keskustelupalstalla [1, 2, 3].

EDIT 2015-08-24 20:22:00

QGIS-ohjelmistossa muokatusta kartasta tulee kauniimpi esitys. Tästä yksinkertaistetusta kartasta on leikattu pienet saaret pois. Ruutukaappaus Tableau:sta:

Ruutukaappausta vastaava taulukkotiedosto on ladattavissa omalle koneelle.

2 Responses to “Suomen kuntakartta Tableau:hun (!?#%) – R avuksi!”

  • Erkka sanoo:

    Onkohan tähän mahdollista saada lisäyksen, kuinka pienet saaret on saatu QGIS-ohjelmassa pois?

    • Jarno sanoo:

      Minulla ei taida olla tuosta sen tarkemmin auki kirjoitettavaa ohjetta, mutta seuraavassa miten tuo on karkeasti tehty: Kullekin polygonille on ensin laskettu pinta-ala, minkä jälkeen pinta-alaltaan pienimmät polygonit on suodatettu pois (filter). Osa saarista on suurempia kuin Kauniaisten kunta, joten tuossa pitää ensin hieman testata, millä raja-arvolla tule hyvä lopputulos. Toinen vaihtoehto on tehdä sama asia käsin eli valita kukin poistettava polygoni erikseen, ja sitten vaikkapa cut-työkalulla poistaa ne. Tämän jälkeen kartan voi tallentaa uudeksi tiedostoksi.


Category