maanantai 21. syyskuuta 2015

PlusDeskin tavoitteet

Työskentelen Yle Uutisissa tiimissa nimeltä PlusDesk. Meitä on tiimissa kaksi tuottajaa, kaksi koodaajaa ja kolme graafikkoa.

Yhdessä muiden tiimien – kuten politiikka, talous, urheilu – kanssa teemme verkkoon uutisjuttuja, jotka poikkeavat esitystavaltaan tai sisällöltään perinteisestä uutisjutun muodosta. Teemme esimerkiksi käyttöliittymiä dataan, laskureita ja erikoistaittoja. Oikeastaan kaiken mihin sisällönhallintajärjestelmämme ei taivu.

Esimieheni pyysi minua listaamaan tavoitteeni. Sama kysymys esitettiin kaikille tiimin jäsenille. Mielestäni kysymys oli siinä määrin mielenkiintoinen, että päätin vastata siihen näin blogissa.



Kysymys kuului.

Millaisia juttuja haluat olla tekemässä jatkossa?

Kysymykseen sai vastata aihe, laajuus tai metodi -lähtöisesti.



Mielestäni vastaus on kiteytyy yksinkertaisesti

"Meidän täytyy tehdä sellaisia juttuja ja journalismia, joita muut Yle Uutisissa Suomessa eivät pysty tekemään."

Mitä tämä sitten tarkoittaa aiheen, laajuuden tai metodin näkökulmasta.



Aihe


PlusDeskin tulisi mielestäni tarttua ensisijaisesti journalistisesti isoimpiin ja tärkeimpiin aiheisiin. Esimerkiksi tällä hetkellä tiimimme työpöydällä olevien aiheiden pitäisi sivuta hallituksen sisäpoliittisia toimia tai pakolaiskriisiä.

Miksi? Koska nämä aiheet ovat erityisen yhteiskunnallisen huomion kohteena. Tämän takia osaaminen, jota meiltä löytyy tulisi olla valjastettu näiden asioiden selvittämiseen. Etenkin jos koetaan, että PlusDesk on Yle Uutisten verkon kerronnan keihäänkärki

Konkreettisesti tarkoitan, että meidän tulisi tehdä nyt enemmän juttuja kuten "Täältä turvapaikanhakijat tulevat – klikkaa ja tutki" ja vähemmän juttuja kuten "Hei hei Facebook! Tällaisen sosiaalisen median nuoret saivat tilalle".

Miksi? Ensinnäkin koska nuoret ovat aiheena ajaton, pakolaiskriisi tapahtuu juuri nyt. Toisaalta koska "nuorisojuttu" olisi voitu julkaista myös ilman meidän panostamme, "pakolaiskriisijuttua" taas ei tässä laajuudessa.

Tätä ei tarvitse ymmärtää niin, ettei meidän tulisi tehdä omia aiheita. Tai etteikö osaamistamme voisi hyödyntää myös kepeämpien aiheiden käsittelyssä.

Laajuus


Juttujen laajuus ei mielestäni ole millään tavalla itseisarvo, ei sen kannalta miten paljon jutun tekemiseen käytetään aikaa, kuin ei myöskään sen kannalta miten laajoja jutut ovat kuluttaa.

Jokaisen tarinan ja uutisen kohdalla on tarkoituksenmukaista pohtia laajuus erikseen. Joskus on hyvä kertoa aiheesta kattavasti eri näkökulmista, kun taas toisinaan on oleellista selvittää yksittäinen asia selkeällä tavalla.

Mielestäni kaltaisemme tiimin tulisi pystyä toimimaan yhtälaisesti nopeassa kuin pitkässä aikaikkunassa. Tämä on myös minulle tekijänä motivoitavaa kun prosessit ovat eri pituisia. On puuduttavaa tehdä vain pitkiä projekteja ja toisaalta stressaavaa jos aikaraja on aina huomenna.

Metodi


Metodia eli esitystapaa sivusin itseasiassa edellisessä postauksessani, joka herätti melko paljon keskustelua.

Mutta jos puhutaan siitä, minkälaista muotoa haluaisin olla tekemässä niin mielestäni PlusDeskin kaltaisen tiimin osaaminen tulee parhaiten hyödynnetyksi kun luomme jotain uutta ja kokeilemme. Toki aina sisältö edellä.

Toisaalta tämä tarkoittaa, että toistuvat muodot, jotka olemme havainneet toimiviksi kuten "järjestettävä taulukko", "erikoistaitto" tai "visa" tulee toteuttaa toimittajan työkaluiksi.

Muotojen toistuvuus ei ole tabu, mutta olemme PlusDeskissä muodon ammattilaisia, jolloin itseääntoistava työ ei inspiroi. Ja työ joka toistaa itseään on lopulta tarkoitettu automatisoitavaksi.

tiistai 1. syyskuuta 2015

Toimittaja: Älä pyydä aikajanaa!

Olen tuohtumuksen vallassa – yritän pitää kiinni siitä tähän postauksen loppuun asti.

Lähde: Twitter.

Ai miksi olen tuohtunut? Koska jos vain saisin euron jokaisesta kerrasta kun toimittaja kävelee luokseni tai lähettää sähköpostia kysyen:
"Saisinko mä tehtyä sellaisen aikajanan."
Sen verran usein tämä kysymys on tullut eteeni, että tänä aamuna katkesi pinna. Sanan aikajana voitte ajatuksissanne hyvät toimittajat korvata vaikka sanoilla:
  • viivadiagrammin
  • kartan
  • erikoistaiton
  • featurejutun
  • näyttävän pläjäyksen

You name it.

No mikä muka menee pieleen? Se, että ne ovat kaikki teknologialähtöisiä lähestymistapoja journalistiseen sisältöön. Ei meidän lukijoita kiinnosta nähdä teknisiä härveleitä, heitä kiinnostavat sisällöt.

Hyvä toimittaja, seuraavan kerran kun haluat tehdä jutun Syyrian pakolaiskriisistä tai SOTE-sopan vaiheista, älä mene pyytämään graafikolta tai datajournalistilta aikajanaa, älä karttaa, älä erikoistaittoa tai mitään muutakaan mielestäsi tosi siistiä diagrammia.

Kerro sen sijaan
  1. mistä aiheesta olet tekemässä juttua
  2. minkälaista aineistoa sinulla on
  3. mikä on viesti jonka haluat välittää

    ja miettikää sitten yhdessä ja keskustelkaa mikä toteutustapa on juuri siihen juttuun paras. Ja sitten jos joku graafinen tai tekninen ratkaisu on sille sisällölle paras lähtekää miettimään miten se kannattaa toteuttaa.

    Uskokaa – jutusta tulee niin parempi kun
    • puhutaan asioista ymmärrettävällä tavalla
    • ei rakenneta ominaisuuksia tai palveluita, vaan ratkaistaan ongelmia
    • haetaan palautetta ihmisiltä, jotka ajattelevat eri tavalla kuin itse
    • muistetaan, että lukijat ovat kallisarvoisia, meidän siistit ideat eivät

    Näillä eteenpäin. Pahoittelut.

    Lisälukemista: Real Chart Rules to Follow

    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();
    });