v

Kuntatiedon visualisointi R:n gisfin-kirjastolla


Kuntatiedon visualisointi Suomen kartalla R-kielellä nousi kuluneella viikolla keskusteluun Finnish Open Data Ecosystem-foorumin Facebook-ketjussa.

Tähän on monta tapaa, ja valmiiden välineiden käyttö helpottaa tehtävää. Suomalaisen paikkatiedon visualisointiin suunnatussa gisfin-paketissa on valmiit wrapperit kuntatiedon visualisointiin. Päivitä paketin kehitysversio Githubista saadaksesi kaikki toiminnot käyttöön.

Kokosimme tähän blogipostaukseen tiiviit esimerkit. Lisää suomalaisen paikkatiedon R-työkaluista löytyy gisfin-paketin tutoriaalisivulta, jossa kuntien lisäksi saatavilla on mm. maakuntarajat, postinumeroalueet, äänestysalueet, aluejakokartat, Helsingin aluekarttoja, väestöruututietoja, spatiaalisia tilastoja ym.

Esimerkkidata: THL:n sairastavuusindeksi

Käytämme esimerkkinä kuntatason aineistojen visualisoinnissa sairastavuusindeksiä, jonka voi ladata THL:n sotkanet-palvelusta R:ään sotkanet-paketilla. Jostain syystä sotkanet-portaalin indeksiä ei saa vuotta 2010 pitemmälle joten otetaan se:

# List all available indicators from THL Sotkanet
library(sotkanet) 
sotkanet.indicators <- SotkanetIndicators(type = "table")

# Check specific indicators for 'sairastavuusindeksi'
# sotkanet.indicators[grep("sairastavuusindeksi", sotkanet.indicators$indicator.title.fi),]

# This shows that the index 244 is THL sairastavuusindeksi.
# Retrieve THL sairastavuusindeksi 2010 for municipalities
# (newer information is not available???)
healthindex <- GetDataSotkanet(indicators = 244, year = 2010, region.category = "KUNTA")

# Let us rename the value field for clarity
healthindex$Sairastavuusindeksi <- healthindex$primary.value

Voit tallentaa datat tiedostoon ja lukea ne sieltä takaisin (tai vaihtaa tilalle oman aineistosi):

# Write the data to file
write.csv(healthindex, file = "mydata.csv", row.names = FALSE)

# Read the same data from file
# (instead you can just use the original mydata that was written in this file)
# or alternatively you can replace your own data in the file mydata.csv:
healthindex <- read.csv(file = "mydata.csv")

Kuntarajojen lataus Maanmittauslaitokselta

Lataa kuntarajat R:ään seuraavalla komennolla. Tässä esimerkissä käytämme valmiiksi esikäsiteltyjä Maanmittauslaitoksen kuntarajoja 2013 (Yleiskartta-1000 Hallintoalueet). Muiden MML-aineistojen lataamiseen perehdy funktioon get_mml.

library(gisfin)
map <- get_municipality_map(data.source = "MML")

Toinen vaihtoehto olisi ladata kuntarajat GADM-palvelusta. GADMin kuntakartta sisältää tällä hetkellä vanhentunutta tietoa, joten sivuutamme sen tässä esimerkissä. GADMin kartoista voi kuitenkin olla apua muiden alueitten visualisoinnissa.

Tietojen liittäminen kuntakarttaan

Liitä THL:n sairastavuusindeksin tiedot MML:n kuntakarttaan kuntakoodin nojalla (MML-datassa “kuntakoodi” ja healthindex-datassa “region.code”):

sp <- sp::merge(map, healthindex, by.x = "kuntakoodi", by.y="region.code")

Visualisointi Maanmittauslaitoksen kuntarajoilla

Nyt datan voi visualisoida Suomen kuntakartalla sp-paketilla:

# Define the 20% quantiles for plotting
quantiles <- quantile(sp$Sairastavuusindeksi, probs = seq(0, 1, .2))

# Discretize the data. This is easier to comprehend than continuous scale.
# And I could not find how to change color scale in spplot for continuous scale -
# suggestions are welcome.
sp$Sairastavuusindeksi2 <- cut(sp$Sairastavuusindeksi, quantiles)

# Define blue-white-red palette 
library(leaflet)
palette <- colorNumeric(c("blue", "white", "red"), domain = range(quantiles), na.color = "black")

# Visualize:
spplot(sp, zcol = "Sairastavuusindeksi2", colorkey = TRUE,
	   main = "THL ikävakioimaton sairastavuusindeksi 2010 (Sotkanet-indeksi 244)",
	   col.regions = palette(quantiles))

center

Nopea visualisointi

Voit vaihtoehtoisesti käyttää aluedatan nopeaan visualisointiin räätälöityä wrapperiä. Tämä tuottaa ggplot2-objektin, jonka visualisointiparametreja voi halutessasi säätää lisää tarpeen mukaan:

p <- region_plot(sp, color = "Sairastavuusindeksi", region = "kuntakoodi")
print(p)

center

Vuorovaikutteinen kuntakartta

Karttojen vuorovaikutteiseen visualisointiin soveltuvat ainakin rMaps ja leaflet-paketit. Seuraava esimerkki tulostaa leaflet-paketin avulla selaimeen vuorovaikutteisen kuntakartan Dmitry Poletaevin koodia mukaillen. Lopputulos muistuttaa Dmitryn RPubs-esimerkkiä:

# Define the region and color variables and title:
region <- "kuntanimi"
color <- "Sairastavuusindeksi"
main <- "THL:n Sairastavuusindeksi"

# Define color palette
palette <- colorNumeric(c("blue", "white", "red"), NULL)

# Define the text for popup box
state_popup <- paste0("<strong>Kunta: </strong>", sp[[region]], 
                        "<br><strong>", main, ": </strong>", 
                        round(sp@data[,c(color)], digits=2))

# Generate interactive visualization
p <- leaflet(data = sp) %>%
       addTiles() %>% 
       addPolygons(fillColor = ~palette(get(color)), 
                fillOpacity = 0.7, 
                color = "#000000", 
                weight = 1,
                popup = state_popup)

# Open in browser
print(p)

rOpenGov-pakettien kehitys tapahtuu vapaaehtoispohjalta. Pakettien toiminnallisuuteen, dokumentaatioon, tutoriaaliin tai liittyvät kontribuutiot ovat tervetulleita. Julkaisemme mieluusti täydennyksiä tähän postaukseen sekä muita R-kielen käyttöä käsitteleviä blogikirjoituksia.


comments powered by Disqus