Päivitys: Uudempi postaus tästä aiheesta!
HS Open 3-ryhmääni kuului alunperin graafikko Miska ja toimittaja Pauliina. Tapahtuman alussa selvisi kuitenkin että molemmat olivat tulleet kipeäksi, eivätkä päässeet paikalle. Onneksi toimittaja Elina Kervinen HS:ltä tuli kuitenkin korvaamaan Pauliinaa ja Miskakin osallistui Skypen välityksellä antaen vinkkejä visualisointiin liittyen.
Projektimme pohjana toimi aiemmassa blogipostauksessani esittelemä karttavisualisointi Helsingin asuntohinnoista. Tällä kertaa asuntojen hinnat on esitetty katukohtaisina mediaanihintoina aiemman postinumerokohtaisen jaottelun sijaan. Lisäksi kartalla näytetään pääkaupunkiseudun lukiot ja niiden valtakunnallinen ranking yo-suoritusten mukaan, poimittu Hesarin artikkelista.
Päivän aikaansaannos tässä, pitää olla ihan tyytyväinen kun aikaa kuitenkin oli vain neljä tuntia:
Kuvaus visualisoinnista: Kartalle on poimittu Oikotie-palvelun asuntojen neliöhinnat (mediaani, pyyntihinnat) 2010–2011 sekä pääkaupunkiseudun lukioiden ylioppilaskirjoitustulokset vuodelta 2011. Ylioppilaskirjoitustulokset perustuvat HS:n selvitykseen (31.5.2011), ja ne on laskettu keskiarvona neljästä pakollisesta aineesta. Kartalla on esitetty tällä tavoin annettu ranking-numero.
Havaittuja ongelmia ja parannettavaa: Luettavuuden parantamiseksi asuntojen hinnat olisi hyvä pysyä esittämään kartalla esimerkiksi alueen keskiarvon mukaan väripohjana. Tämä ei onnistunut vielä, sillä postinumeroiden ja Helsingin alueiden välistä suoraa yhteyttä ei löytynyt. Lisäksi koulujen nimet pitäisi pystyä saamaan näkyviin esim. klikkaamalla. Tähän aika ei tänään riittänyt.
Pohdintaa itse ideasta: Lukion saa valita vapaasti, joten kalliin alueen koulumenestyksen ei voi suoraan tulkita kertovan esimerkiksi alueellisesta eriarvoisuudesta. Sama harjoitus toteutettuna esimerkiksi ala-asteen tuloksien perusteella jollakin tavalla kertoisi enemmän, koska ala-astella oppilaat käyvät pääosin lähikoulua. Wera-tietokannan kautta on ilmeisesti saatavissa tietoa esimerkiksi luokalle jäämisestä. Tämä jatkoajatuksena. Dataan voisi yhdistää myös esimerkiksi tietoja, kuten työttömyysaste tai äidinkieli, jolloin kuva olisi kattavampi.
Kiitos Elinalle & Miskalle yhteistyöstä sekä Esalle HS Openin järjestämisestä!
Tässä käytetty R-koodi. Tarkoituksena on muokata koodi siistimmäksi käyttäen sorvi-paketin funktioita, joten päivitän tätä varmaan lähiaikoina.
# This script is posted to the Louhos-blog
# http://louhos.wordpress.com
# Copyright (C) 2008-2011 Juuso Parkkinen <juuso.parkkinen@gmail.com>. All rights reserved.
# This program is open source software; you can redistribute it and/or modify
# it under the terms of the FreeBSD License (keep this notice):
# http://en.wikipedia.org/wiki/BSD_licenses
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# Install soRvi package
# Instructions in http://sorvi.r-forge.r-project.org/asennus.html
# NOTE! This script has been udpated 26.12.2011 to use sorvi version 0.1.40!
library(sorvi)
# Get Oikotie myynnit data
Oikotie <- GetOikotie()
hr.myynnit <- Oikotie$hr.myynnit
# Get Lukio data
Lukiot <- GetLukiot()
hr.lukiot <- Lukiot$hr.lukiot
# Compute mean and median prices per square meter for each street - zip code combination
means <- aggregate(hr.myynnit$Price.per.square, list(hr.myynnit$Zip.code, hr.myynnit$Street), mean)
medians <- aggregate(hr.myynnit$Price.per.square, list(hr.myynnit$Zip.code, hr.myynnit$Street), median)
hri.dat <- cbind(means, medians[,3])
names(hri.dat) <- c("Postinumero", "Katu", "Hinta.keskiarvo", "Hinta.mediaani")
## Get Helsinki Map (use function 'ggooglemap' from earlier HS open 3 blogpost)
Helsinki.center <- c(lon=24.93, lat = 60.20)
HelsinkiMap <- GetStaticmapGoogleMaps(center = Helsinki.center, zoom = 11, maptype="Map", scale=1)
theme_set(theme_bw())
hplot <- ggplot(HelsinkiMap, aes(x=lon, y=lat))
hplot <- hplot + geom_tile(aes(fill=fill)) + scale_fill_identity(legend=FALSE)
hplot <- hplot + scale_x_continuous('Longitude') + scale_y_continuous('Latitude')
hplot <- hplot + opts(title = 'Map of Helsinki')
##########################
## Geocode street names ##
##########################
# Get geocodes for the address combinations using GoogleMaps API
# NOTE! Can query only 2500 times per day
# Could use OpenStreetMap as well, see get.geocode.OpenStreetMap
hr.geo.codes <- list()
for (i in 1:2500) { #First day
# Second day: for (i in (2501:nrow(combs))[-c(3699:3701-2499)]) { # Remove Tarkk'ampujankatu because it causes an error
if (i %% 100 == 0)
cat(i, ".")
temp <- GetGeocodeGoogleMaps(paste(hri.dat$Katu[i], hri.dat$Postinumero[i], "FI", sep=", "))
hr.geo.codes[[i]] <- as.numeric(temp)
}
# Filter out missing geocodes
totake <- which(sapply(hr.geo.codes, length)==2)
lons <- as.numeric(sapply(hr.geo.codes[totake], function(x) x[2]))
lats <- as.numeric(sapply(hr.geo.codes[totake], function(x) x[1]))
# Filter our locations outside the map in use
totake2 <- which(lons >= min(HelsinkiMap$lon) & lons <= max(HelsinkiMap$lon) & lats >= min(HelsinkiMap$lat) & lats <= max(HelsinkiMap$lat))
# Add locations to price data
hri.dat2 <- cbind(hri.dat[totake[totake2],], Lon=lons[totake2], Lat=lats[totake2])
# Filter out extreme values in median prices
hri.dat2 <- subset(hri.dat2, (Hinta.mediaani >= 2000 & Hinta.mediaani <= 6000))
# Filter out schools not in map range
hr.lukiot2 <- subset(hr.lukiot, min(HelsinkiMap$lat) <= lat & lat <= max(HelsinkiMap$lat) & min(HelsinkiMap$lon) <= lon & lon <= max(HelsinkiMap$lon))
# Plot prices and high schools
hplot2 <- hplot + geom_point(data=hri.dat2, aes(x=Lon, y=Lat, colour=Hinta.mediaani), size=2.5, alpha=0.8)
hplot2 <- hplot2 + scale_colour_gradient(low="blue", high="red")
hplot2 <- hplot2 + geom_point(data=hr.lukiot2, aes(x=lon, y=lat, size=Keskiarvo))
hplot2 <- hplot2 + scale_area(to=c(5,8), breaks=seq(15, 21, 2))
hplot2 <- hplot2 + geom_text(data=hr.lukiot2, aes(x=lon, y=lat, label=Ranking), colour="white", size=2)
hplot2 <- hplot2 + opts(title="Pääkaupunkiseudun asuntojen neliöhinnat ja lukioiden paremmuus kartalla")
ggsave("Helsinki_price_highschools_20111010_final.png", plot=hplot2, width=10, height=9)

Päivitysilmoitus: Oikotien myyntihinnat ja lukioiden paremmuus pääkaupunkiseudulla | Louhos
Järjestysnumeroiden hahmottaminen on vähän hankalaa. Koulut voisi binittää vaikkapa ryhmiin “hyvä”, “keskinkertainen”, “huono”, värikoodata binit ja piirtää kartalla.
Päivitysilmoitus: HS Next - Blogit - HS.fi