keskiviikko 29. heinäkuuta 2015

Näin syntyi eduskuntavaalituloksen analyysijuttu

Teimme PlusDesk:ssä kevään eduskuntavaaleihin liittyen useampia juttuja.

Yksi niistä oli vaalitulosta analysoiva juttu "Kokeile, miltä vaalitulos näyttää, jos vain koulutetuimmat tai sairaimmat olisivat äänestäneet", jossa vaalitulosta katsottiin kunnittain viiden demografisen muuttujan kautta. Muuttujiksi olimme valinneet:
  1. tulot
  2. koulutus
  3. työttömyys
  4. eläkeläisten osuus
  5. terveys
Niin sanotun 100 kuntaa -koneen lähteenä käytettiin Tilastokeskuksen Kuntien avainluvut -aineiston tunnuslukuja 1) valtionveronalaiset tulot, 2) korkea-asteen tutkinnon suorittaneiden osuus, 3) työttömyysaste sekä 4) eläkkeellä olevien osuus väestöstä. Tiedot väestöltään 5) terveimmistä ja sairaimmista kunnista perustuivat THL:n sairastavuusindeksiin.

Lukijan oli mahdollista valita näkyville viiden eri muuttujan ääriarvot. (Kuva 1)

Jutun idea oli, että valitulla muuttujalla vaalitulos laskettiin ottaen huomioon vain 100 kuntaa.

Esimerkiksi jos muuttujaksi valitaan "koulutus" vaalitulos lasketaan niin, että otettiin huomioon vain 100 vähiten tai korkeiden koulutetun kunnan äänet. Vastaavasti jos muuttujaksi valittiin "tulot" pystyi näkemään miten vaalitulos olisi rakentunut jos vain Suomen pieni- tai suurituloisimmat kunnat olisivat äänestäneet. Idea oli lainattu ulkomailta.

Ajatuksenamme oli hypoteesi siitä, että vasemmiston kannatus korostuisi pienituloisissa kunnissa kun taas porvaripuolueiden kannatus olisi huipussaan suurituloisissa kunnissa. Toki näin suoraviivaisesti ei voi ajatella, mutta kantava ajatus analyysissa oli tämänkaltainen. Eli, että puolueiden voimasuhteet ovat riippuvaisia ihmisten demografisista ominaisuuksista.

Äänestysdatat saimme Ylen vaalipalvelun rajapinnan kautta. Tiedot tulivat sieltä .json-formaatissa.

Kehityskaari

Ensimmäisessa vaiheessa toteutimme uutissovelluksen niin, että valitsemalla muuttujan näki vaalituloksen jakautumisen puolueittain pylväsdiagrammeina. Eli lopullisen toteutuksen sen osuuden, joka näkyy sovelluksen vasemmassa laidassa. Tämä oli oikeastaan vähimmäisvaatimus toimivalle sovellukselle. (Kuva 2)

Pylväsdiagrammit esittivät äänestystuloksen valitulla 100 kunnalla sekä verrattuna todelliseen äänestystulokseen, jotta vertailu olisi helppoa. (Kuva 2)

Nopeasti kuitenkin tajusimme, että olisi tuloksen lisäksi hyödyllistä nähdä mitkä nämä 100 kuntaa ovat joista vaalituloksen laskenta tapahtuu ja missä päin Suomea ne sijaitsevat. Näin lisäsimme pylväsdiagrammin rinnalle Suomen kuntakartan, jossa esitetään valitut 100 kuntaa korostevärillä. (Kuva 3)

Valitulla muuttujalla laskennassa käytetyt kunnat korostettiin sinisellä. (Kuva 3)

Pelkkä kuntien esittäminen kartalla tuntui kuitenkin nopeasti liian kapealta näkökulmalta ja tajusimme, että olisi kiva tietää myös äänestystulos yksittäisten kuntien osalta. Lisäsimme tämän aineiston selattavaksi kartalle niin, että osoittamalla kuntaa näki yksittäisen kunnan äänestystuloksen. (Kuva 4)

Osoittamalla näki miten kannatus jakautui puolueittain yksittäisessä kunnassa. (Kuva 4)

Huomiot

Teknisesti tuote siis eli koko kehitysprosessin ajan. Tämä on luontevaa nykyaikaisessa ketterässä ohjelmistokehityksessä. Uusia ominaisuuksia lisätään toimivan tuotteen ympärille kun tarve niille havaitaan. Tätä voidaan kutsua esimerkiksi prototypoinniksi.

Datajournalismin ja uutissovelluksen rakentamisessa tämänkaltainen ketterä kehittäminen on erityisen luontevaa ja tehokasta, koska tilanteet voivat muuttua nopeasti ja mahdollisuus niiden ennakoimiseen on rajallista.

Ei ole tarkoituksenmukaista etukäteen määritellä syvällisesti mitä ollaan tekemässä ja lyödä lukkoon projektin alkuvaiheessa mikä on lopullinen toteutustapa, koska ymmärrys jota näiden päätösten tekemiseen vaaditaan rakentuu vasta kun sovellusta aletaan tekemään.

keskiviikko 10. kesäkuuta 2015

Geodeettiset koordinaatistoformaatit

Törmäsin eilen Poliisiammattikorkeakoulun toimittamaan aineistoon, jossa oli mukana paikkatietoa.

Koordinaatit esitettiin aineistossa seuraavasti:

KOORDINAATTI_N,KOORDINAATTI_E
5927140,1909800
5949646,2256613
5950522,2303040
5955028,2316795
5956577,2320602
6002411,2402822


Koordinaatit olivat kuvauksen mukaan WGS84-koordinaatistossa ja niiden piti osua maanteiden varsille. Emme kuitenkaan saaneet aluksi selvää missä muodossa koordinaatit ovat, koska sellaisenaan ne eivät olleet ainakaan suoraan asteita eivätkä ne tuntuneet olevan myöskään maantieteellisiä koordinaatteja.

Sitten huomasin, että koordinaattien kolmas ja neljäs numero juoksee niin, että se ei saanut ikinä arvoja yli 60, josta mieleeni tuli, että koordinaattejahan voi esittää myös minuutteina ja sekunteina. Minuuteissa ja sekunneissa suurin arvo on tuo 60.

KOORDINAATTI_N,KOORDINAATTI_E
6059804,2537278
6059975,2540441
6100120,2348604
6100178,2426829
6100207,2422961


Ensinsiksi oletin, että koordinaatit olivat muotoa
Eli, kaksi ensimmäistä numeroa kuvaavat asteita, kaksi seuraavaa minuutteja ja loput sekunteja ja sekuntien desimaaleja. Pian huomasin kuitenkin, että sekunnit juoksivat arvoihin yli 60. Eli esimerkiksi tässä itä-koordinaatissa:
  • 2426829 → 24° 26' 82.9''
joka ei voinut ollut oikein, koska sekunnit eivät voi saada arvoa yli 60. Eli täytyi olla niin, että koordinaatit olivat muotoa:
Eli edellä mainittu koordinaattipiste on muotoa:
  • 2426829 → 24° 26.829'

Muunnos


Halusin muuntaa koordinaatit muotoon:
koska tämä on Google Mapsin suoraan tukema formaatti. Tein konvertoinnin Excelissä seuraavalla kaavalla:
  • =REGEXEXTRACT(A2, "^([0-9]{2})") & "." & TEXT(ROUND(REGEXEXTRACT(A2, "^[0-9]{2}([0-9]{5})")/1000/60*100000), "00000")
Kaava ottaa koordinaatin ensimmäiset kaksi numeroa sellaisenaan. Viisi viimeistä numeroa muunnetaan minuuteista desimaaleiksi jakamalla 60:llä, jonka jälkeen luku kerrotaan tarvittavan suurella luvulla, jotta saadaan mukaan riittävästi tarkkuutta. Lopputulos pyöristetään kokonaisluvuksi ja lisätään mahdolliset tarvittavat etunollat text()-funktiolla. Lopuksi asteet ja asteiden desimaalit yhdistetään erottamalla ne pisteellä.


Opittua


Usein kun saan käyttööni paikkatietoa ovat koordinaatistot ja formaatit jonkinmoinen murheenkryyni, joka useimmin juontaa siihen, että aineistoa ei ole kuvattu riittävällä tarkkuudella. Välillä aineistosta ei käy edes ilmi missä koordinaatistossa koordinaatit ovat. Ja kun yhdessä koordinaatistossa koordinaatit voidaan esittää useammassa formaatissa (maantieteellisesti, metrejä ja geodeettisesti, asteita), niin on ongelma vielä monimuotoisempi. Ja tosiaan, geodeettiset koordinaatit voidaan esittää myös käyttäen minuutteja ja sekunteja.

perjantai 8. toukokuuta 2015

Nuijamaan rajamiehillä oli todella hyvä pito

Julkaisimme Yle Uutisten sivuilla 6.5. jutun "He valvovat rajojamme", joka kertoo rajavartioiden työstä Nuijamaalla. Juttu on erikoistaitettu, jossa on annettu suuri tila kuville ja videoille. Materiaalia jutussa on paljon eli juttu on siis pitkä lukupaketti. Jutussa edettiin vierittämällä alaspäin kuten netissä on luontevaa. (Kuva 1)

Juttu Nuijamaan rajavartioista julkaistiin keskiviikkona kello 11 jälkeen. (Kuva 1)
Juttu keräsi noin 20 000 klikkausta.

Juttu jakautui kuvien, videoiden ja grafiikoiden myötä 15:sta kokonaisuuteen. Seurasimme miten pitkälle lukijat vierittivät sivua. Tallensimme tiedon kun käyttäjä saavutti kokonaisuuden alun.

Ensimmäisen kokonaisuuden alkuun vieritti noin 18 000 käyttäjää. Heti alussa menetettiin siis noin 10 % kävijöistä. Tämän jälkeen pito oli todella hyvä. Loppuun asti jutun vieritti 11 600 käyttäjää eli noin 60 %:a kävijöistä. Tämä on todella suuri osuus, koska aikaisemmin olemme nähneet lähempänä 10–20 % olevia lukuja. Toki edelleen ymmärryksemme lukujen takana perustuu pieneen otantaan. Emme ole vielä tarpeeksi usein mitanneet kuinka kuinka pitkälle tämänkaltaisia pidempiä juttuja vieritetään.

Jotain perusteluja hyvälle pidolle voidaan kuitenkin etsiä julkaisuajasta. Juttu julkaistiin selkeästi päivällä – kello 11 jälkeen – jolloin ihmiset ovat työpaikoillaan tietokoneiden ääressä. Yleinen sääntö meillä julkaisulle on, että paras julkaisuaika on heti aamulla, mutta tästä ehkä opimme, että tämänkaltaisten erikoistaitettujen juttujen kohdalla viisautta voidaan hakea myös muunlaisesta julkaisuajankohdasta.

Tilastonikkareille


Luvut ovat Google Analyticsin yksilöidyt tapahtumat -lukuja.

Jutun lukijamäärä: 20 028
  1. osion alkuun: 18 176
  2. osion alkuun: 17 340
  3. osion alkuun: 16 240
  4. osion alkuun: 15 318
  5. osion alkuun: 14 981
  6. osion alkuun: 14 512
  7. osion alkuun: 13 774
  8. osion alkuun: 13 579
  9. osion alkuun: 13 142
  10. osion alkuun: 13 074
  11. osion alkuun: 12 516
  12. osion alkuun: 12 451
  13. osion alkuun: 11 928
  14. osion alkuun: 11 702
  15. osion alkuun: 11 432

maanantai 27. huhtikuuta 2015

Yli 2 miljoonaa "swaippausta", Kandideitti oli menestys

Julkaisimme vaalien alla Kandideitti-nimisen sovelluksen, joka tunnettiin myöhemmin myös Vaalitinder-nimellä.

Kandideitti oli eräänlainen minivaalikone, jonka avulla sopivaa ehdokas etsittiin viiden asiakysymyksen kautta perustuen pelkästään ehdokkaiden kasvokuvaan, ikään ja etunimeen. Idea oli lainattu suositusta treffipalvelu Tinderistä.

Ehdokkaat saattoi joko hyväksyä tai hylätä annettujen tietojen perusteella. (Kuva 1)

Kandideitin tarkoitus oli lisätä erityisesti sellaisten ihmisten kiinnostusta vaaleihin, jotka eivät tavallisesti vaaleista innostu. Miten tämä tavoite täytty lukujen valossa?

Google Analytics -lukujen mukaan Kandideitillä oli noin 50 000 yksilöityä käyttäjää. Nämä käyttäjät hylkäsivät ja hyväksyivät ehdokkaita 2 150 000 kertaa. Eli reilut kaksi miljoonaa kertaa. Sovelluksen käyttäjät olivat siis erittäin ahkeria. Keskimäärin yksittäinen käyttäjä kävi läpi yli 40 ehdokasta, joka on todella suuri luku.

Tämä kertoo, että Kandideitti löysi erittäin aktiivisen käyttäjäryhmän, joka koki sovelluksen siinä määrin erittäin hyödylliseksi, että sen parissa viettiin paljon aikaa. Vaikeampi kysymys on arvioida ovatko nämä käyttäjät olleet etenkin sellaisia, jotka eivät muuten kiinnostu vaaleista. Ja vielä vaikeampi kysymys on saiko Kandideitti nämä ihmiset äänestämään tai vaikuttiko Kandideitti heidän äänestyspäätökseensä.

Kuten odottaa saattoi oli hylkääminen (1 800 000) erittäin paljon hyväksymistä (350 000) yleisempää. Löytöjä syntyi noin 57 %:ssa hyväksymisistä, joka on käytännössä sama kuin löydölle asetettu raja-arvo (3/5 asiakysymyksestä tuli olla samaa mieltä).

Kävijämäärä oli lopulta pienoinen pettymys. Odotimme jutulle yli 100 000 klikkausta, mutta jäimme tavoitteesta. Jutulla on tällä hetkellä ComScoren mukaan noin 79 000 klikkiä. Mutta ehkä näissä luvuissa näkyy juuri se, että Kandideitti oli kuitenkin lopulta pienemmän kohderyhmän niche-palvelu verrattuna Ylen muihin vaalituotteisiin (Vaalikone ja Vaaligalleria).

sunnuntai 19. huhtikuuta 2015

KML to GeoJSON to TopoJSON on Mac OS X

These introductions help you to convert a KML file to TopoJSON which allows you to reduce filesize.

Converting KML to TopoJSON


# Get KML (File -> Download -> KML)
https://www.google.com/fusiontables/DataSource?docid=153JjwSASwB6C4r1o0itwZr7imkDfuedEGIjk4LHr#map:id=3

# Install node via ports or brew (if not yet available)
port install npm
brew install node.js

# Install togeojson (might need admin privilidges)
npm install -g togeojson

# Rename file to data.kml
cd Downloads
mv Kuntarajat\ 2015.kml data.kml

# Convert KML to GeoJson with togeojson
togeojson data.kml > data.json

# Install topojson (might need admin privilidges)
npm install -g topojson

# Convert GeoJson to TopoJson
topojson data.json -o data.tjson -p Name

# Simplify if needed
topojson data.json -o data.tjson --simplify-proportion=0.5 -p Name

# Use tools to determinate appropriate simplify value
http://www.mapshaper.org/
http://shancarter.github.io/distillery/



Implementation guidelines


# Get TopoJSON library
https://github.com/mbostock/topojson

# In your implementation define a map
var map = new google.maps.Map($('.map_container')[0], {
    center:new google.maps.LatLng(60.25, 24.87),
    mapTypeControl:false,
    mapTypeId:google.maps.MapTypeId.ROADMAP,
    minZoom:9,
    overviewMapControl:true,
    panControl:true,
    scaleControl:false,
    streetViewControl:false,
    zoom:yleApp.zoom,
    styles:styler,
    zoomControl:true
});

# Attach polygons to the map
$.getJSON('data.tjson', function (data) {
    yleApp.map.data.addGeoJson(topojson.feature(data, data.objects.data));
});

# Define polygon styles
yleApp.map.data.setStyle(function (feature) {
  return {
    cursor:'pointer',
    fillColor:'#f00',
    fillOpacity:0.6,
    strokeColor:'#666',
    strokeWeight:0.5
  }
});

# Attach listeners
map.data.addListener('mouseover', function (event) {
  yleApp.map.data.overrideStyle(event.feature, {
    fillOpacity:0.8,
    strokeWeight:1
  });
});

map.data.addListener('mouseout', function (event) {
  map.data.revertStyle();
});

maanantai 9. helmikuuta 2015

Ohjeilla on väliä ja reagointi kannattaa

Julkaisimme tänään 9.2.2015 jutun jossa käsittelimme pääkaupunkiseudun ikääntymistä. Juttuun olimme tehneet kartan josta ikääntymistä oli mahdollista tarkastella alueittain. (Kuva 1)

Uutissovelluksella pystyi tarkastelemaan ilmiötä monista eri näkökulmista. (Kuva 1)
Uutissovellusta oli mahdollista käyttää monella tavalla. Ilmiötä saattoi tarkastella pitkällä aikajaksolla koko pääkaupunkiseudun tasolla tai ottaa tarkasteluun vain yksittäisen alueen.

Aamulla kello 8–9 välillä tarkkailimme miten eri toiminnallisuuksia sovelluksessa käytettiin ja havaitsimme, että yksittäinen alue valittiin tarkasteluun yllättävän harvoin. Uutissovelluksessa saattoi siis valita tarkasteluun yksittäisen alueen tiedot. (Kuva 2)

Klikkaamalla aluetta sai nähtäväkseen valitun alueen tiedot viivadiagrammina. (Kuva 2)
Oletuksemme oli, etteivät ihmiset tajua, että karttaa on myös mahdollista klikata. Mietimme Plus-tiimimme kanssa miten voisimme tukea tämän toiminnallisuuden löytymistä.

Päätimme lyhyiden keskustelujen pohjalta yksinkertaisesti lisätä osoittaessa avautuvaan tietoikkunaan lisätekstin, että klikkaamalla saat lisätietoa. (Kuva 3)

Lisäsimme toteutukseen ohjeen jossa kehotettiin osoittamisen lisäksi myös klikkaamaan aluetta. (Kuva 3)
Mitä tapahtui? Alueen valitsemisen suosio alkoi välittömästi nousta ja siitä tuli sovelluksen käytetyin ominaisuus.

Toki myös muilla tekijöillä on vaikutusta tähän kuten, että yhdeksän jälkeen ihmisten työpöytäkäyttö kasvattaa suosiotaan suhteessa mobiilikäyttöön.

Summasummarun reaaliaikaisen käytön seurannan avulla pystymme reakoimaan nopeasti ja parantamaan uutissovellusten toimintaa.

maanantai 2. helmikuuta 2015

NODA15 – Päällimmäiset tuntemukset

Viime viikonloppuna Norjan Ålensundissa pidettiin järjestyksessään toinen pohjoismainen datajournalismikonferenssi. Viime vuonna tapahtuma järjestettiin Ruotsissa Tukholmassa, missä olin myös paikalla. Tässä päällimmäiset ajatukseni tämän vuoden meiningeistä. (Kuva 1)

Ålesundissa tapahtuma ei ainakaan jäänyt maisemista kiinni. (Kuva 1)

1. Suomalaisedustuksen kapeus

Verrattuna muihin pohjoismaihin ja etenkin Norjaan ja Ruotsiin suomalaisten edustus oli konferenssissa hävyttömän kapea. Suomalaisista mediayhtiöistä olivat paikalla HS ja Yle kun muut pohjoismaat edustivat valtamedioiden lisäksi myös maakuntatasolla. Tästä kertoo jo sekin, että konferenssi järjestettiin 40 000 asukkaan Ålesundissa. 

Tietenkään tekemisen tasoa ei voida pelkästään mitata konfferenssiosallistumisilla, mutta mielestäni tämä on hälyttävä merkki kun sama tilanne oli myös viime vuonna Ruotsissa.

2. Ei palkintoja Suomeen

Konferenssissa jaettiin pohjoismaiset datajournalismipalkinnot viime vuoden tapaan. Viime vuonna Suomesta ehdolla oli töitä Yleltä ja Helsingin Sanomilta ja voittokin yhdessä kategoriassa tuli HS:lle. Tänä vuonna ehdolle pääsi enää Helsingin Sanomat, mutta palkinnot kiersivät Suomen mennen Norjaan, Tanskaan ja Ruotsiin.

Pelkästään tästäkään ei dramaattisia johtopäätöksiä kannata vetää, mutta fiilis on, että viime vuoteen verrattuna myös tekemisen tasossa olemme jääneet pohjoismaisia kumppaneitamme jälkeen. Näkemykseni on, että Ruotsissa Suomi nähtiin vielä pohjoismaisella tasolla datajournalismin edelläkävijänä. Enää tästä ei ollut pelkoa.

3. Melkein 400 osallistujaa

Datajournalismista ei voida puhua pienen porukan puuhasteluna. Konfenressiin oli ilmoittautunut melkein 400 henkilöä siitäkin huolimatta, että tapahtuma järjetettiin kaikella kunnioituksella hieman vaikeiden kulkuyhteyksien päässä. Paikalla oli hyvin arvovaltainen puhujajoukko sekä akateeminen puoli. (Kuva 2)

Ja miksi puhuttaisiinkaan. NY Timesin viime vuoden top 20:sta luetuimmasta jutusta puolet oli datajuttuja. Sama trendi on nähtävissä Ylellä. Vuonna 2013 top 5:sta luetuimmasta kolme oli PlusDeskin tuotantoa. Vuonna 2014 sama lukema oli kaksi. Datajournalistiselle tekemiselle on tilausta.

Illallisella ei tyhjiä paikkoja ollut. (Kuva 2)

4.  Haasteet ovat yheiset

Suurista pieniin toimijoihin kaikilla tuntui olevan samat asiat mielessä. Miten voimme analysoida lukijoitamme paremmin? Miten käännämme huomiomme lukijamääristä vaikuttavuuteen? Mobiilikäytön kasvu ja sen vaikutukset verkon tekemiseen sekä datajournalismiin? Verkkovideon muoto? Mitä normaalin toimittajan pitäisi opiskella? Miten ottaa sosiaalinen media huomioon? Mikä tulee olemaan vanhan median rooli?

Kovin selkeitä vastauksia näihin kysymyksiin ei saatu, mutta on jotenkin lohduttavaa, että The Guardian kaikkine resursseineenkaan ei ole juurikaan pidemmällä esimerkiksi uutissovellusten sisäisessä analytiikassa.

5. NODA16 Helsingissä

Vuoden 2016 Nordic Datajournalism Conference järjestetään huhtikuun lopulla Helsingissä. Silloin viimeistään on suomalaisen median aika herätä muutokseen.