PÄIVITYS 2020-11-02: gisfin-paketin kehitystyö on lopetettu ja kehitystyö on siirtynyt geofi-paketin pariin. Tämä alun perin Louhos-blogissa julkaistu kirjoitus on arkistoitu rOpenGov-blogiin esimerkkinä aiempien vuosien kehitystyöstä. Alla esitetyt esimerkit eivät todennäköisesti enää toimi geofi-paketin uusilla versioilla.
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))
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)
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.