keskiviikko 21. marraskuuta 2012

Sormiharjoitus Twitter-datalla

Julkaisin viime viikolla twiitin, jossa kerroin erilaisista tunnusluvuista koskien Twitter:ni käyttöä ja lisäksi olin liittänyt mukaan kuvassa 1 näkyvän twiittieni sanapilven.

Avasin twiittieni tunnuslukuja ja piirsin sisällöistä sanapilven. (Kuva 1)
Mielestäni tekemäni sormiharjoitus oli siinä määrin hauska ja dataa monipuolisesti käsittelevä, että halusin jakaa kokemukseni. En väitä, että käsittelemäni menetelmät olisivat paras tapa selvittää kyseisiä Twitter-tilin tietoja, mutta käytän niitä tässä, koska ne ovat hyödynnettävissä hyvin monenlaisessa datan käsittelyssä.



Tarina sai alkunsa kun löysin netistä palvelun nimeltä All My Tweets, joka listaa annetun käyttäjän kaikki twiitit (3000 ensimmäistä). Egosentrisenä ihmisenä lähdin kokeilemaan oman tilini tilannetta ja löysin palvelulla tuolloin 1729 twiittiä. Tarkastin, että luku täsmäsi Twitter-profiilistani löytyvään arvoon.

Mieleeni tuli, että voisin visualisoida twiitit avainsanapilvenä. Ajattelin, että tämä olisi helppoa verkosta löytyvän Wordle-työkalun avulla, joka mahdollistaa avainsanapilvien toteuttamisen yksinkertaisesti syöttämällä palveluun sisältöä. Haluttu sisältö oli mahdollista kopioida All My Tweets -palvelusta leikepöydälle ja sieltä Wordle:en, mutta ongelma oli, että tässä selaimen ruudulta kopioidussa sisällössä olivat mukana twiittien aikaleimat (esim. Nov 17, 2012). Nämä aikaleimat mielletään Wordle:n puolesta myös osaksi sisältöä, joten halusin päästä niistä eroon, koska ne olisivat esiintymistiheytensä myötä nousseet avainsanapilvessä hallitsevaan asemaan. (Kuva 2)

Nappasin twiittini All My Tweets -palvelusta yksinkertaisesti maalaamalla ja kopioimalla koko sivun sisällön leikepöydälle. (Kuva 2)
Ratkaisin ongelman jatkokäsittelemällä Twitter-dataani. Datan käsittelyyn ja esimerkiksi tämankaltaisen aikaleimatiedon poistamiseen on useita eri mahdollisuuksia, mutta toteutin siivoamisen säännöllisten lausekkeiden avulla Sublime Text -editorissa. Sublime Text on periaatteessa hyvin tavallinen tekstieditori, joka kuitenkin sisältää konepeltinsä alla hyvin laajan ominaisuuksien kirjon. Yksi hyödyllisistä on "etsi/korvaa" -toiminnallisuus, joka mahdollistaa merkkijonojen korvaamisen –  perinteisen tavan lisäksi myös – säännöllisten lausekkeiden avulla.

Säännölliset lausekkeet mahdollistavat hakuehtojen muodostamisen erinäisten hahmojen (engl. pattern) avulla. Säännöllisten lausekkeiden avulla on esimerkiksi mahdollista hakea päivämäärää muodossa 2012-11-19 käskemällä ohjelman etsiä merkkijonoa jossa on:
  • neljä numeroa
  • viiva
  • kaksi numeroa
  • viiva
  • kaksi numeroa.
Näin ollen säännöllisten lausekkeiden avulla on mahdollista hakea kerralla kaikki tekstissä esiintyvät päivämäärät ja muuntaa ne esimerkiksi suomalaiseen muotoon 19.11.2012. Tavallisella etsi/korvaa -toiminnolla tämänkaltainen muuntaminen olisi mahdollista vain päivämäärä kerrallaan.

Tässä tapauksessa halusin poistaa tekstistä kaikki "Nov 16, 2012" -tyyliset merkkijonot. Hakemassani merkkijonossa tulisi siis löytyä:
  • kolme kirjainta
  • välilyönti
  • kaksi numeroa
  • pilkku
  • välilyönti 
  • neljä numeroa. (Kuva 3)
Säännöllisen lausekkeen löytämät merkkijonot näkyvät rajattuina suorakulmioihin. Haettu merkkijono korvataan tyhjällä eli käytännössä poistetaan. (Kuva 3)
Koska tavoitteeni oli poistaa löydetyt päivämäärää kuvaavat merkkijonot valitsin, että kyseisen haun tulokset korvattaisiin tyhjällä merkkijonolla. Haun löytämät merkkijonot näkyvät kuvassa 3 nelikulmioihin rajattuina. Rakentamassani säännöllisessä lauseessa käyttämäni hahmot ovat:

  • a-z, mikä tahansa pieni kirjain väliltä a-z
  • A-Z, mikä tahansa kapitaali kirjain välillä a-z
  • 0-9, mikä tahansa numero välillä 0-9.

Edelleen halusin poistaa All My Tweets -palvelun datasta "RT" merkinnät, koska nämä eivät sinällään olleet twiittien varsinaista sisältöä, jonka halusin mukaan sanapilveen. RT merkkijonon poistamisessa minun ei tarvinnut hyödyntää säännöllisiä lausekkeita, vaan hain yksinkertaisesti merkkijonoa "RT ". Eli hain merkkijonoa, jossa esiintyi järjestyksessä:
  • kapitaali R
  • kapitaali T
  • välilyönti. (Kuva 4)
Sublime Text näyttää tehdyn haun löytämien merkkijonojen esiintyminen määrän editorin vasemmassa alakulmassa, joten ennen kuin tein korvaamisen tarkistin, montako kertaa "RT " esiintyi datassa. Koska RT merkintä tarkoitti, että twiitti oli retwiitti, sain näin selville kuinka moni twiiteistäni oli retwiitti. (Kuva 1)

Halusin poistaa merkkijonot "RT ", mutta samalla selvittää kuinka monta kertaa se datassa esiintyi. (Kuva 4)
Samalla periaatteella ja etsimistoiminnolla tutkin montako kertaa datassa esiintyivät merkit "@" ja "#", jolloin sain selville montako kertaa olin maininnut henkilön ja montako kertaa olin viitannut johonkin Twitter-kanavaan (kts. Twitter-terminilogiaopas). Jälkikäteen ajateltuna olisi ollut, ehkä järkevää poistaa datasta myös henkilöiden maininnan, koska ne nousivat niin hallitsevaan rooliin lopputuloksessa. (Kuva 1)

Lopuksi kopioin käsittelemäni datan Sublime Text -editorista Wordle-palveluun. Wordle on hyvin yksinkertainen käyttää. Haluttu data kopioidaan leikepöydän kautta palveluun, jonka jälkeen käyttäjän on mahdollista piirtää avainsanapilvi haluamallaan tavalla lukuisiin eri muuttujiin perustuen. (Kuva 5) Itse olen käyttänyt lähinnä palvelun "randomize" toimintoa kunnes olen saanut mieleiseni lopputuloksen, mutta palvelu mahdollistaa muuttujien määrittämisen myös käsin. Lopputuloksen otin palvelusta talteen ruudunkaappausohjelmistolla.

Wordle-palveluun on mahdollista liittää mitä tahansa tekstiä tai suoraan haluttu RSS-virta. (Kuva 5)
Käytin siis hyväksi kahta verkosta löytyvää ilmaispalvelua – All My Tweets ja Wordle – sekä Sublime Text -editoria yhdessä säännöllisten lausekkeiden kanssa. Näiden työkalujen avulla keräsin, käsittelin, jäsensin, analysoin ja visualisoin dataa. Tämänkaltainen useiden eri työkalujen käyttäminen on usein tehokasta, koska toiset työkalut ovat hyviä toisissa asioissa kun taas toiset pureutuvat paremmin toisenlaisiin haasteisiin.

Ja eikun itse kokeilemaan! Kuulen mielelläni tuloksista :)

Muokkaus: 22.11.2012

Tässä Micke Hindsbergin versio:
https://twitter.com/mickhinds/status/271282180423032832

Muokkaus: 27.11.2012

Tässä Anna Emilia Alentolan versio:
https://twitter.com/anniemilia__/status/273505849203376128

Tässä Anna-Sofia Niemisen versio:
https://twitter.com/SofiaNieminen/status/273125304132845569

sunnuntai 18. marraskuuta 2012

Datajournalismia Aalto-yliopistolla 15.11.2012

Kävin viime torstaina Markku Reunasen pyynnöstä vierailuluennoimassa Aalto-yliopistolla datajournalismista opintojaksolla "Dynamic Visualization Design 1". Paikalla oli n. kymmenpäinen ja kansainvälinen joukko dynaamisesta visualisoinnista kiinnostuneita ihmisiä.

Vedin esityksen hyvin samalla pohjalla kuin viime kuussa Yle:llä pitämäni Datajournalismi-koulutuksen. Keskityin siis lähinnä erilaisten esimerkkien läpikäymiseen, koska mielestäni ne ovat parasta antia tämankaltaisessa sisällössä.

Lisäksi pääteemani oli kertoa, että kyse on teknisesti hyvin yksinkertaisista ja loogisista toteutuksista, jotka eivät todellakaan vaadi ylimäärin työtä tai osaamista taakseen. Lisäksi pyrin vahvasti tuomaan esiin, että käyttämäni työkalut ovat vapaasti saatavilla olevia avoimeen lähdekoodiin perustuvia toteutuksia. (Kuva 1)

Klikkaa kuvaa siirtyäksesi kalvoihin. (Kuva 1)
Havaitsin, että tarvetta olisi ollut esitellä asioita pidempäänkin kuin kolmen tunnin ajan ja etenkin itse kokeileminen ja konkreettisesti asioiden läpikäyminen – ihan teknologiatasolla – olisi kiinnostanut. Sovimmekin alustavasti Markun kanssa, että olisi mahdollista, että voisin tulla mukaan vetämään jonkinlaista työpajaa myöhemmin keväällä.

Joka tapauksessa minut nähdään ainakin datajournalismin merkeissä Tampereen yliopistolla maaliskuussa.

tiistai 6. marraskuuta 2012

#Kuntavaalit-analyysi

Ajattelin ottaa lyhyesti osaa kuntavaalidatan perkaamiseen ja käsittelyyn. Tähän minut motivoi mm. A-Stream:stä tuttu toimittajana Jaakko Karhu, joka jakoi keräämänsä – Twitter-kavanalle #Kuntavaalit – kerääntyneen keskustelun. Asiaa edisti, että data oli .tsv-muodossa, joten ajattelin, että datan avaaminen ja jatkokäsittely esimerkiksi Excel:ssä olisi siten helppoa ja nopeaa.

Avasin aluksi datan kuitenkin LibreOffice:ssa, jotta sain tallennettua datan uudelleen .csv-muodossa, koska Excel ei oletusarvoisesti – ainakaan minulla – osaa avata .tsv-muotoista tiedostoa oikein. Tämän lisäksi korjasin n. 600 virheellisesti rivitettyä twiittiä säännöllisten lausekkeiden avulla Sublime Text -editorissa. Virheellisesti rivitetyt twiitit oli helppo paikantaa sen perusteella, että rivin ensimmäisenä arvona tuli olla aina yksittäisen twiitin numeerinen id-arvo eikä esimerkiksi kirjaimia.

Näiden toimenpiteiden jälkeen data oli valmis käsiteltäväksi Excel:ssä. Data piti sisällään viisi saraketta, jotka olivat:
  1. Yksittäisen twiitin numeeronen tunniste (ID)
  2. Käyttäjän, joka twiitin oli lähettänyt, käyttäjätunnus (esim. teelmo)
  3. Twiitin lähetyspäivä (esim. 31.10.2012)
  4. Twiitin lähetysaika (esim. 15:44)
  5. Twiitin sisältö
Data oli siis jo lähtökohtaisesti hyvin rakenteistettu eikä sitä tarvinnut siten jatkokäsitellä esimerkiksi pilkkomalla useampiin sarakkeisiin. (Kuva 3)

Analyysin tekemiseen käytin Excel:stä löytyvää Pivot-toiminnallisuutta, jolla sain helposti laskettua, että twiittejä datassa oli mukana yhteensä n. 19 000 kpl:tta. Pivot-taulukkojen avulla on helppoa tutkia datan jakautumista eri sarakkeiden arvoihin perustuen. Ensimmäiseksi tutkin miten twiittien määrä jakautui käyttäjien kesken ja piirsin datasta pylväsdiagrammin. Lopputulos on hyvin perinteinen esimerkki long tail -datasta. Eli pieni osa käyttäjistä oli erittäin aktiivisia kun taas suurin osa osallistui keskusteltuun vain harvoin (Samankaltainen käyttäyminen oli nähtävissä myös Lontoon mellakoista tehdyissä Twitter-analyyseissä). (Kuva 1)

Suurin osa käyttäjistä osallistui keskusteluun vain muutaman kerran. (Kuva 1)
Pivot-taulukosta oli luettavissa, että yksittäisiä twiittaajia datassa oli n. 2 900, joista n. 1 300 twiittasi kanavalle vain kertaalleen. Määrällisesti Top10-twiittaajien lista näytti seuraavalta:
  1. DimitriQvintus (762 twiittiä)
  2. EliasAarnio (319)
  3. EkholmTalas (306)
  4. juffek (274)
  5. jussisalonranta (253)
  6. juhanilohikoski (229)
  7. TimoSoinii (216)
  8. aleksieskelinen (186)
  9. FinlandInc (181)
  10. katleena (175)
Toiseksi halusin katsoa miten twiitit jakautuivat päivittäin. Edelleen Pivot-taulukoissa tämänkaltaisen tiedon esiin tuominen on helppoa. Suosituimmaksi päiväksi osoittautui 25.10., jolloin twiitattiin yhteensä 4 138 kertaa. Päivän suosio selittyy tuona torstaina Yle:n lähettämällä "Kuntavaalit 2012: Loppukiri" -kuntavaalitentillä. Päivien Top6-lista näyttää seuraavalta:
  1. 25.10. (4138 twiittiä)
  2. 24.10. (2183)
  3. 20.9. (1358)
  4. 19.10. (1295)
  5. 27.9. (1271)
  6. 29.10. (1218)
Mielenkiintoista on, ettei itse vaalipäivä (28.10.) nouse listalla kovin korkealle. Keskimäärin seurantajaksolla 20.9.2012 – 31.10.2012 (42 päivää) twiittejä #Kuntavaalit-kanavalle lähetettiin n. 460 kpl:tta (19470 twiittä / 42 päivää). Piirsin myös twiittien päivittäisestä jakautumisesta samankaltaisen pylväsdiagrammin kuin edellä. (Kuva 2)

Suurin päivittäinen keskustelupiikki osui Yle:n vaalitenttipäivälle 25.10. (Kuva 2)
Kolmanneksi tein vielä samankaltaisen analyysin twiittien jakautumisesta tunneittain. Tämän toteuttamiseksi minun piti irrottaa "tunti"-tieto twiitin lähettämisajasta. Onnistuin tekemään tämän Excel:ssä ajamalla jokaiselle twiitille, uudessa lisäämässäni sarakkeessa, seuraavanlaisen komennon.

=JOS(PITUUS(D30)=5;VASEN(D30;2);VASEN(D30;1))

Kyseinen koodi laskee sarakkeessa D rivillä 30 olevan tekstin pituuden merkkeinä ja palauttaa riippuen siitä onko pituus viisi vai ei joko kentän kaksi ensimmäistä tai vain ensimmäisen merkin. Sarakkeessa D on jokaisen twiitin lähetysaika muodossa hh:mm. Kyseinen ehto kahden ensimmäisen tai vain ensimmäisen merkin mukaan ottamisesta oli tehtävä, koska datassa "tunti"-tietoon ei oltu merkitty etunollia, joten ennen klo 10:ntä lähettyistä twiiteistä halusin ottaa mukaan vain ensimmäisen numeron kun taas klo 10:ltä ja sen jälkeen halusin mukaan kaksi ensimmäistä numeroa. (Kuva 3)

Excel:ssä onnistuu melko suurienkin datajoukkojen käsittely vaivattomasti. Hour sarake on luotu time sarakkeen perusteella syöttökentässä näkyvän koodin avulla. (Kuva 3)
Myös twiittien tunnittainen jakauma osoitti, että aktiivisimmat twiittausajankohdat osuivat yhtäaikaisesti TV:n iltaisin tulleiden vaalilähetysten kanssa. (Kuva 4)

Suurin osa keskusteluista ajoittui ilta-aikaan, jolloin myös TV:n vaaliväittelyt pidettiin. (Kuva 4)
Mielenkiintoista tunnittaisessa jakautumisessa on myös aamun korostuminen iltapäivään verrattuna sekä, ettei  keskustelua öisin juuri ollut, joka ei Internet-maailmassa ole niin itsestäänselvä tulos.

Analyysin perusteella minulle heräsi kysymys; ruokkiiko media toiminnallaan Twitter:n käyttöä vai onko Twitter Suomessa itsenäisesti elävä organimisti, jonka media on luonnollisesti ottanut mukaan toimintaansa. Analyysi osoittaa, että keskustelu oli aktiivista kun Twitter sai näkyvyyttä mediassa, mutta muuten keskustelua oli vähemmän. Toinen hyvä kysymys on; onko Twitter:n laaja läsnäolo esimerkiksi TV-lähetyksissä oikeutettua 2 900:n kansalaisen vuoksi. En tarkoita näitä kysymyksiä sinällään kritiikkinä Twitter:n läsnäoloa ja käyttöä kohtaan, mutta mielestäni tulokset ovat mielenkiintoisia.

Huomioitavaa analyysissä on, että tehnyt havainnot ovat vain yhtä hyviä kuin mitä alkuperäinen raakadata on (toki tekijälläkin on osansa). Esimerkiksi Olli Parviainen raportoi Twitter:ssä, että #Kuntavaalit-kanavalle olisi kirjoitettu reilusti yli 30 000 twiittiä. Uskoisin kuitenkin, koska tehdyt havainnot ovat siinä määrin järjellisiä ja tukevat ennakkohypoteeseja, ettei suurta muutosta tapahtuisi vaikka sama analyysi tehtäisiin tälle laajemmalle twiittimäärälle.

Muokkaus 6.11. klo 19:00

Ero Olli Parviaisen ja Jaakon Karhun keräämien twiittimäärien välillä selittyi sillä, että Olli Parviainen oli kerännyt sanan "kuntavaalit" sisältäneet twiitit kun Jaakko Karhu oli kerännyt nimenomaan #Kuntavaalit-kanavalle lähetetyt twiitit.

Twiittien kerääminen aloitettiin vasta 20.9. eli ensimmäisen kuntavaalitentin jälkeisenä päivänä, joten aineisto ei ole tältä osin täysin kattava eikä koko #Kuntavaalit-ilmiötä kuvaava.

Yksittäisten twiittaajien ja twiittien määrää analysoitaessa on huomioitava Nielsenin 90-9-1 -sääntö.



Siivoamani data Excel-muodossa on ladattavissa Dropbox-palvelusta. (13MB, .xlsx, suomenkielinen Excel).

Linkit alkuperäisiin raportointeihin Twitterissä:

maanantai 5. marraskuuta 2012

Näin tehtiin: "Tässä ovat Suomen parhaat terveyskeskukset"

Viime viikolla Yle:llä pitämästäni datajournalismi koulutuksesta innostuneena Sara Rigatelli Yle Uutisista otti minuun yhteyttä. Hän oli tekemässä juttua suomalaisen terveydenhuollon toimivuudesta ja ajatteli, että olisi mahdollisesti kiinnostavaa kuvata ilmiötä datajournalismin keinoin.

Ajatuksena Saralla oli, josko karttavisualisoinnin avulla voisi kuvata eri sairaanhoitopiirien välisiä eroja keskimääräisen jonotusajan ja toisaalta yleisesti lääkärille pääsemisen osalta. Alunperin ajattelimme, että olisi etenkin toimituksellisesti hyödyllistä nähdä data kartalla, koska tämä helpottaisi mm. alueellisten trendien hahmottamista. Keskustelimme toki, että karttaa olisi mahdollista käyttää myös uutisen yhteydessä mikäli lopputulos olisi selkeä ja lukijalle hyödyllinen.

Tarvitsemamme datan keräsimme THL:n ylläpitämästä Sampo-palvelusta. Palvelusta on mahdollista selata erilaisia terveydenhuoltoon liittyviä tilastoja eri muuttujiin perustuen. Otin tarvittavan datan Sampo-palvelusta talteen Excel-taulukkoon jatkokäsiteltäväksi yksinkertaisesti maalaamalla ja copy-pasteamalla. Itseasiassa käytin LibreOffice:n Spreadsheet -työkalua, jonka olen kokenut olevan hieman kätevämpi tämänkaltaisessa datankäsittelyssä (Kuva 1). Esimerkiksi .csv-tiedostojen avaaminen ja käsittely on ollut mielekkäämpää LibreOffice:ssa kuin Excel:ssä.

Taulukko on hyvä formaatti datan käsittelyyn, koska sen käyttäminen onnistuu niin toimittajalta kuin koneeltakin. (Kuva 1)
Seuraavaksi latasin tallentamani .csv-tiedoston Google Fusion Tables -työkaluun. Ajatuksenani oli, että saisin nopeasti tehtyä demon siitä minkälaiseksi kartta muodostuisi eri muuttujilla. Ongelma oli kuitenkin, ettei minulla ollut käytössäni sairaanhoitopiirien rajoja sisältävää karttapohjaa. Pystyin kuitenkin tekemään demon hyödyntämällä käytössäni ollutta kuntakarttapohjaa yhdistämällä siihen tiedot siitä mihin sairaanhoitopiiriin kukin kunta kuuluu. Sairaanhoitopiirien jäsenkunnat löysin ladattavassa muodossa Kunnat.net -palvelusta.

Yhdistettyäni ensinnäkin käytössäni olleen kuntakarttapohjan sairaanhoitopiiritiedon ja toiseksi keräämämme terveydenhuoltodatan kanssa sainkin demon toteutettua (Kuva 2). Ongelma tässä toteutuksessa – lopulliseen versioon verrattuna – oli kuitenkin, että kartta pohjautui kuntarajoihin eikä sairaanhoitopiirien rajoihin. Tämä aiheutti ongelman, ettei kahta sairaanhoitopiiriä voinut erottaa visuaalisesti toisistaan mikäli ne asettuivat samaan arvoalueeseen ja saivat siten saman värityksen. Esimerkiksi kuvassa 2 nähtävästä esimerkkitoteutuksesta on mahdotonta erottaa Pohjois-Pohjanmaan ja Lapin sairaanhoitopiirien rajaa.

Sairaanhoitopiirit eivät erotu kartassa jos kahden vierekkäisen sairaanhoitopiirin väri on sama. (Kuva 2)
Koimme kuitenkin esimerkkitoteutuksesta, että kartasta muodostui mielenkiintoinen ja tietoja oli hauskaa selata sen kautta. Lähdinkin seuraavaksi toteuttamaan karttaa aikaisemminkin käyttämälläni Raphaël-karttapohjalla. Raphaël on JavaScript-kirjasto, joka mahdollistaa mm. räätälöityjen karttavisualisointien toteuttamisen. Alkuperäinen ongelma kuitenkin säilyi sillä edelleenkään minulla ei ollut käytössäni kuin Suomen kuntakarttapohja ja edellenkään vierekkäisiä sairaanhoitopiirejä ei ollut mahdollista erottaa toisistaan jos ne sattuivat ominaisuuksiensa kautta saamaan saman värityksen. (Kuva 3)

Myös räätälöidyssä JavaScript-toteutuksessa ilmenee sama ongelma käytettäessä kuntapohjaista karttaa. Vierekkäisten sairaanhoitopiirien rajaa ei ole mahdollista erottaa jos sairaanhoitopiirit kuvataan samalla värillä. (Kuva 3)
En myöskään keksinyt mitään (helppoa) tapaa, jolla olisin onnistunut kummassakaan toteutustavassa (Google Fusion Tables tai Raphaël) korostamaan sairaanhoitopiirien rajoja, jotta ne olisivat erottuneet kuntarajoista, joten päädyin etsimään uutta karttapohjaa, joka perustuisi nimenomaan sairaanhoitopiireihin.

Onnekseni löysinkin – edelleen Kunnat.net -palvelusta – kartan, jossa sairaanhoitopiirien rajat oli kuvattu. Haaste oli, että karttadata oli julkaistu .pdf-muodossa ja minulla ei ollut aikaisempaa kokemusta siitä miten .pdf-muotoista dataa olisi mahdollista visualisoida ja hyödyntää etenkään JavaScript-pohjaisessa toteuksessa. Päätin kuitenkin lähteä kokeilemaan miten tämä onnistuisi. Tiesin, että tavoitteena minulla olisi saada karttadata .svg-muotoon, koska tämä oli käyttämäni Raphaël-kirjaston tukema tiedostomuoto.

Päädyin Googlettamaan asiaa hakusanoilla ".pdf to .svg" ja yllätyin, että kyse olikin suhteellisen triviaalista operaatiosta. Tiesin kyllä etukäteen, että .pdf on vektorigrafiikkaan perustuva formaatti, mutta jostain syystä ajattelin, ettei yksittäisten elementtien poimiminen .pdf:stä olisi niin helppoa. Toteutin muunnoksen lopulta Inkscape-ohjelmalla Wikipediasta löytyviä ohjeita mukaillen. Muunnoksessa kyse on käytännössä 1) tiedoston avaamisesta ohjelmassa 2) halutun sivun valitsemisesta ja 3) tiedon uudelleentallentamisesta .svg-muodossa.

Lopulliseen visualisointiin toteutimme mahdollisuuden valita karttaan tarkastelun alle kaksi eri tilastoa:
  1. Missä lääkärille pääsee nopeimmin?
  2. Missä lääkäriajan saa helpoimmin?
Lisäksi merkitsimme karttaan sinisillä palluroilla tilastojen mukaan parhaat terveyskeskukset. (Vis 1)

Kartta sisällytettiin uutisen yhteyteen ja siitä oli mahdollisista tarkastella sairaanhoitopiirejä haluamansa muuttujan perusteella. (Vis 1)
Toteutin projektin pääasiassa viikonlopun (26.10. - 28.10.) aikana, mutta maanantaina ja tiistaina jouduin tekemään vielä muutamia pieniä viilauksia esimerkiksi, jotta saimme kartan toimimaan Internet Explorer -selaimessa. Lisäksi halusimme alunperin toteuttaa kartan "inline-koodina", joka upotettaisiin suoraan uutissivuston leipätekstin sekaan, mutta jouduimme lopulta tyytymään iframe-toteutukseen. Inline-koodin etu iframe-toteutukseen nähden olisi ollut laajempi yhteensopivuus eri laitteiden kanssa sekä parempi mobiilikäytettävyys. Edellä mainituissa viilauksissa sain apua Yle:n Web-suunnittelija Oskari Blombergilta, josta suuri kiitos.

Lopullinen uutinen julkaistiin sunnuntaina 4.11. maanantaina 5.11. ja on luettavissa Yle Uutisten verkkosivuilta.

keskiviikko 31. lokakuuta 2012

Kun datajournalismi tapettiin

Tämä on tarina siitä kun datajournalismi meni pieleen.

Oli perjantai 12.10. ja päätimme Svenska Yle:n suunnittelijan ja kollegani Mårten Seiplax:n kanssa ottaa irtioton muista töistä ja tuottaa datajournalismia toteuttamaamme Maktbasen-järjestelmään perustuen. (Kuva 1)

Perjantaisin pyrimme ottamaan aikaa projekteille, jotka muuten jäävät työsyklin ulkopuolelle. (Kuva 1)
Maktbasen on Svenska Yle:n toteuttama järjestelmä, joka pitää sisällään kaikkien suomenruotsalaisten kuntien (n. 30kpl kun Ahvenanmaa lasketaan ulkopuolelle) kuntavaltuutettujen tiedot (Kuva 2). Keräämämme tietokanta yhdistää tietoja n. 1 400:sta kuntavaltuutetusta pitäen sisällään mm. heidän kytköksensä yrityksiin, jotka olemme saaneet Asiakastiedolta.

Suomenruotsalaiset kunnat löytyvät Pohjanlahden rannikolta sekä Suomenlahden rannikolta. (Kuva 2)
Maktbasen on ollut iso satsaus Svenska Yle:ssä ja olimme siten motivoituneita hyödyntämään järjestelmään keräämäämme tietoa (Kuva 3). Ajatuksenamme Mårtenin kanssa oli, että olisi kiva nähdä minkälaisia eroja suomenruotsalaisten alueiden välillä on katsottaessa niiden kunnanvaltuustoja. Esimerkiksi oma hypoteesini oli, että RKP:n kannatus on suhteellisesti suurempaa Pohjanmaalla verrattuna taas esimerkiksi pääkaupunkiseutuun ja Uudenmaan-alueeseen.

Maktbasen listaa suomenruotsalaisten kuntapoliitikkojen tietoja sisältäen heidän kytkökset yrityksiin sekä erilaista kuntiin liittyvää tietoa. (Kuva 3)
Menetelmämme tuon eron esiintuomiseen oli yhdistää alueiden kunnanvaltuustot yhteen. Alunperin ajatuksenamme oli verrata keskenään pelkästään Pohjanlahden ja Suomenlahden rannikon alueita, mutta päädyimme jakamaan Suomenlahden rannikon alueen useampaan eri osa-alueeseen samalla jakoperiaatteella kuin aluetoimituksemmekin toimii (Kuva 2). Samalla saimme alueista asukasluvullisesti enemmän keskenään samankaltaisia (toki edelleen pääkaupunkiseutu on omassa luokassaan). Alueiksi muodostuivat siten:
Toteutimme alueiden kuntavaltuustojen yhdistämisen yksinkertaisesti laskemalla alueiden kuntien valtuustot yhteen. Laskimme esimerkiksi Pohjanmaalla SDP:n valtuutettujen määrän yhteen ja vertasimme tätä lukua alueen kuntien valtuustopaikkojen yhteismäärään. Tällä tavalla laskimme alueittain kaikille puolueille prosentuaaliset valtuustopaikkojen osuudet. Lopputulos vastasi sitä, että kunnat toimisivat ns. kunnanosavaltuustoina koko alueen valtuustolle. Kunnat käyttämässämme mallissa olivat siis edelleen itsenäisesti äänestäneet omat valtuustonsa, mutta nämä valtuustot yhdistettiin osaksi koko alueen valtuustoa. Menetelmä vastaa periaatteeltaan tapaa, jolla eduskunta muodostetaan vaalipiireissä valituista ehdokkaista.

Ajatuksenamme oli, että Svenska Yle:n aluetoimitukset voisivat tehdä työkalumme avulla omia juttuja ja pohtia asiaa rinnastaen omaan alueensa. Mielestämme esimerkiksi, että nykyisin eduskunnan 3. suurin puolue Perussuomalaiset sai tällä tavalla laskettuna Pohjanmaalla vähemmän valtuustopaikkoja kuin paikallinen "Oravais – ändring nu!" -puolue, oli erittäin mielenkiintoinen yksityiskohta.

Julkistimme visualisoinnin sisäisesti (Vis 1) ja siitä kirjoitetun esimerkkijutun maanantaina 14.10., jonka perusteella uutistoimitus teki siitä oman versionsa. Juttu julkaistiin verkossa myöhemmin maanantain aikana.

Toteutus oli interaktiivinen ja mahdollisti tietojen tarkastelemisen alueittain. (Vis 1)
Jotain meni kuitenkin pieleen. Artikkeli keräsi nopeasti paljon hämmentyneitä ja kriittisiä kommentteja, jotka koskivat etenkin pääkaupunkiseutua. Analyysin sanottiin olevan väärä, epäselvä ja koko artikkelin poistamista vaadittiin. Pyrimme toimituksessa vastaamaan tähän kritiikkiin mahdollisimman avoimesti ja kertomaan siitä mistä kartassa oli kyse.

Ongelma oli, että kun puolueiden kannatus alueellisesti määräytyi edellä kuvatulla tavalla syntyi alueen valtuustossa vääristymä, joka johtuu siitä, että valtuuston koko ei kasva lineaarisesti suhteessa kunnan asukaslukuun. Esimerkiksi Kauniaisissa on runsaat 8 800 asukasta ja valtuustossa istuu 36 valtuutettua. Tällöin Helsingissä, missä asukkaita on n. 600 000, tulisi valtuuston koon olla runsaan 2 400 valtuutetun suuruinen. Helsingin valtuustossa istuu kuitenkin vain 86 valtuutettua, jolloin nähtiin, että tekemämme analyysi antoi pääkaupunkiseudulla Kauniaisten äänestäjille liian suuren painon.

Ongelma oli, että emme pystyneet tarpeeksi selkeästi kommunikoimaan toisaalta toimitukselle, joka julkaisi artikkelin ja toisaalta siksi artikkelin kautta lukijoille mistä kartassa oli kyse. Tilannetta ei auttanut, vaikka julkaisimme alkuperäisen datan sisältävän Google-dokumentin avoimesti uutisen yhteydessä sekä selitimme vielä kommenteissa mistä jutussa oli kyse. Toteutus nähtiin lopulta liian epäselvänä ja se poistettiin sivuilta keskiviikon aikana.



Projektista jäi kuitenkin kokonaisuutena hyvin positiivinen jälkimaku. Opimme niin tekniikan ihmisinä journalistisista prosesseista kuin journalisteina siitä mitä datalla on mahdollista tehdä ja siitä miten dataa on mahdollista tulkita väärin. Opimme, että jatkossa kun keksimme vastaavanlaisia ideoita viemme projektin läpi paljon tiiviimmässä yhteistyössä eri osaajien kanssa ja harkitsemme tarkemmin onko toteutus relevantti sekä onko olemassa vaaraa virheellisille tulkinnoille.

Tulemme toivottavasti lähiaikoina julkaisemaan visualisoinnista päivitetyn version, joka tarkastelee ilmiötä eri näkökulmasta ja jonka olemme suunnitelleet alusta asti yhdessä uutistoimituksen kanssa.

maanantai 29. lokakuuta 2012

Kunnallisvaalit: Oikein voitettu vai väärin mitattu?

Eilisten kuntavaalien jälkeen Kokoomus ja Jyrki Katainen juhlivat Suomen suurimman puolueen asemaa. Asemaa, jonka he pystyivät säilyttämään eduskuntavaaleista. Voitossa on kuitenkin paljon mätää.

Ensimmäiseksi; Ongelma on, että kuntavaaleissa ei ole millään tavalla mielekästä mitata puolueiden valtakunnallista ja absoluuttista kannatusta. Valtakunnallinen kannatus on tulevien kuntavaltuustojen kannalta täysin irrelevantti joskin toki annettakoon, että suuntaa antava. Miksi näin?

Kuntavaaleissa jokainen kunta toimii omana vaalipiirinään ja kuntalaisten on mahdollista äänestää vain oman kuntansa ehdokkaita. Kunnissa valtuustopaikkoina realisoitumattomaksi jäänyt kannatus ei valu ei esimerkiksi naapurikuntiin ja lisäksi kuntien valtuuston koko ei määräydy lineaarisesti kunnan asukasluvun mukaan.

Edellä mainittujen tekijöiden vuoksi puolueiden absoluuttinen ja valtakunnallinen kannatus ei ole relevantti tapa mitata kuntavaalien tulosta tai oikea tapa kertoa siitä mikä on valtakunnallisesti johtava kuntapuolue. Vaalien tulos tulisikin mielestäni mitata perustuen puolueiden saamien valtuutettujen määrään. Näin mitattuna vaalien tulos näyttääkin hyvin erilaiselta:

  • Keskusta, 3 078 valtuutettua
  • Kokoomus, 1 735 valtuutettua
  • SDP, 1 729 valtuutettua
  • Perussuomalaiset, 1 195 valtuutettua

Toiseksi; Ongelma on, että nykyjärjestelmässä äänestäjä valitsee äänestyskopissa listalta yksittäisen henkilön ja luulee, että ääni menee juuri hänelle. Näin ei kuitenkaan ole vaan jokaisen meidän ääni menee ensisijaisesti puolueelle, jota henkilö edustaa. Yksilöille annettavilla äänillä on merkitystä vain kun verrataan puolueiden jäsenten keskinäistä järjestystä. Nykyjärjestelmässä puolueen eniten ääniä saanut ehdokas saa kaikki puolueelle kohdistetut äänet, toiseksi tullut puolet äänistä, kolmanneksi tullut kolmasosan ja niin edelleen.

Ongelma on, että tämä johtaa absurdeihin tilanteisiin, jossa vain muutamalla (alle kymmenellä) äänellä on mahdollista päästä läpi valtuustoon, koska puolueen ääniharava vetää perässään vähemmän ääniä saaneita puolueen jäseniä.

Kolmanneksi; Ongelma on, että puolueiden on mahdollista kuntakohtaisesti luoda keskenään vaaliliittoja. Vaaliliitto kahden (tai useamman) puolueen kesken tarkoittaa, että todellisuudessa nämä kaksi puoluetta ovat vaalien ajan teknisesti yksi ja sama puolue. Toisin sanoen omalle puolueelle ja omalle ehdokkaalle annettu ääni voi lopulta auttaa aivan toisen puolueen ehdokkasta pääsemään läpi.

Ongelma on, että vaaliliittojen kohdalla äänestäjän oikeusturvan kannalta hänen olisi kannattanut itseasiassa jäädä äänensä kanssa kotiin.



.... ja tosiaan kauniin ja aurinkoisen syyspäivän päätteeksi äänestysprosentti oli 58,2%.

Muokkaus 30.10.2012

Kts. myös Ruotsin vaalijärjestelmä ja D'Hondtin menetelmä.

Muokkaus 2.11.2012

Jos nykyinen absoluuttinen, ei vaalijärjestelmää huomioiva, tapa olisi käytössä myös USA:n presidentin vaaleissa voitaisiin toinen puolue julistaa vaalien voittajaksi vaikka presidenttiyden viekin toinen puolue.

perjantai 26. lokakuuta 2012

Datajournalismiaamu Yle:llä 24.10.2012

Pidin Yleisradiossa keskiviikkona datajournalismin koulutustilaisuuden. Kolmen tunnin sessiossa oli mukana hyvin sekalainen joukko eri alojen osaajien ympäri Yle:ä. Mukana oli niin kovan luokan tutkivia journalisteja maan ykkösluokan ohjelmista kuin jokapäiväistä uutistoimintaa pyörittäviä toimittajia sekä muita asiasta kiinnostuneita. Hienoa, että asiat kiinnostavat ja session aikana saimmekin aikaan useita mielenkiintoisia keskusteluja.

Twitterissä keskustelimme kanavalla #ddjyle ja saimme sen jopa nousemaan pinnalle Suomalaisena trendinä, joka toki suomalaisessa Twitterissä ei tarkoita muutamaa tweettiä enempää. (Kuva 1)

Suomalaiset trendit on tietokoneohjelma, joka pyrkii tunnistamaan suomalaisia Twitter-trendejä. (Kuva 1)
Toteutin kalvot Impress.js-kirjastolla, joka on JavaScript-kirjasto. Tämä tarkoittaa, että kalvot toimivat selaimessa ja niihin on siten helppo sisällyttää mitä tahansa sisältöä videoista ja kuvista jopa kokonaisiin verkkosivuihin. (Kuva 2)

Klikkaa kuvaa siirtyäksesi kalvoihin. (Kuva 2)

Kalvot eivät sinänsä sovellu itseopiskelumateriaaliksi, mutta toivottavasti niistä on silti hyötyä. Tapahtuma myös videoitiin yleisön pyynnöstä. Tämä tallenne saattaa tulla myöhemmin nähtäville.

Edit: Näillä näkymin seuraavan kerran puhun aiheesta datajournalismi  15. marraskuuta Aalto-yliopistolla seminaarikurssin Dynamic Visualization Design tiimoilla.