Näytetään tekstit, joissa on tunniste Google Spreadsheet. Näytä kaikki tekstit
Näytetään tekstit, joissa on tunniste Google Spreadsheet. Näytä kaikki tekstit

torstai 6. maaliskuuta 2014

Python hoitaa, eli kuinka Plus-deski kokeili screen scrapingia

Kun keskustelu Keva-johtaja Merja Ailuksen työsuhde-eduista oli jatkunut jo jonkin aikaa, Yle:n toimittaja Jarno Liski alkoi pyöritellä mielessään kysymyksiä: kuinka kannattava työsuhdeasunnossa asuminen on, kuka siitä todella hyötyy ja millä tavalla työsuhdeasuminen otetaan verotuksessa huomioon. Hänen lähtöoletuksensa oli, että työsuhdeasuntojen verotusarvo vastaisi huonosti asunnoista vapailla markkinoilla maksettavaa vuokraa.

Liski otti yhteyttä Plus-deskin tuottaja Juho Salmiseen, joka lähti yhdessä Teemo Tebestin kanssa viemään asiaa eteenpäin. Lopputulos on nähtävissä täällä.

Verottajan väite syyniin

Verottajan mukaan asuntojen verotusarvo vastaa keskimäärin 90-prosenttisesti asunnosta pyydettyä vuokraa. Esimerkiksi 700 eurolla vuokrattavan asunnon verotusarvon pitäisi olla noin 630 euroa. Tämä tuntui kuitenkin pitävän huonosti paikkansa. Ideana olikin tutkia, minkä suuruisia verotusarvoja asunnot todellisuudessa saavat ja kuinka hyvin verotusarvo vastaa asunnoista pyydettävää vuokraa.

Verottaja määrittelee työsuhdeasunnoille laskukaavan, jonka avulla verotusarvo määritellään asuntokohtaisesti. Verotusarvon laskennassa vaikuttavat asunnon sijainti (pääkaupunkiseutu/muu maa), pinta-ala sekä valmistumisvuosi. Työntekijä saa asuntoedusta lisähyötyä silloin, kun verotusarvo on todellista markkina-arvoa selkeästi alhaisempi, koska tällöin hänen verotuksensa on keveämpi kuin sen tulisi olla.

Teemo ja Juho pohtivat, miten asiaan pääsisi käsiksi. Verottajan kaavan pitäisi tuottaa arvo, joka on hyvin lähellä markkinahintaa. Jarno Liskin idea oli kerätä suuri määrä olemassa olevien vuokra-asuntojen tietoja ja laskea asunnoille verottajan kaavan avulla verotusarvo.

Suomessa on muutama suuri vuokra-asuntoja listaava verkkopalvelu, joiden dataa olisi mahdollista käyttää verottajan kaavan testaamiseen. Käsityönä verotusarvon ja markkina-arvon kattava vertailu ei kuitenkaan onnistuisi, sillä vuokra-asuntoja on sivustoilla tuhansia.

Oli siis kirjoitettava koodinpätkä, jonka avulla pystyttäisiin keräämään tietyn verkkopalvelun vuokra-asuntoja koskeva data, laskea niiden perusteella asunnoille verotusarvo ja analysoida saatuja arvoja. Datan keräämiseen käytettävää menetelmää kutsutaan ruudunraavinnaksi (engl. screen scraping, tuttavallisesti screippaus). Asuntojen tiedot voisi poimia miltä tahansa vuokra-asuntoja listaavalta sivustolta. Teemo käytti tässä tapauksessa Alma Median ylläpitämän Vuokraovi.com-palvelun tietoja.

Koodi ja tietokanta valmiiksi

Ruudunraapijan kirjoittamiseen Teemo päätti käyttää Python-kieltä. Screipatessa kirjoitettu koodi käy järjestelmällisesti läpi verkossa olevia nettisivuja, poimii sivulta halutut elementit ja siirtää ne tietokantaan. Tietokannaksi Teemo valitsi ennestään tutun MongoDB:n. MongoDB sopi käyttötarkoitukseen hyvin, koska noSQL-tietokannassa datalle ei tarvitse määrittää tarkkaa rakennetta etukäteen, vaan sitä voidaan täydentää ja muokata tarpeen mukaan.

Kun Teemo laittoi homman aluilleen 29. marraskuuta, Vuokraovi-palvelussa oli tarjolla noin 6 000 vuokra-asuntoa eri puolilta Suomea. Yhdelle hakutulossivulle saa näkyviin kerrallaan 10–30 vaihtoehtoa, joten tarvittavien kyselyjen määrän minimoimiseksi Teemo sääti määrän maksimiinsa. Näin screipattavaksi jäi hieman yli 200 erillistä sivua, jolla jokaisella oli 30 asuntoa. (Kuva 1)

Helmikuussa 2014 Vuokraovi-palvelussa oli tarjolla n. 8 100 vuokra-asuntoa. (Kuva 1)
Datan keräämistä mutkisti se, että kaikki tarvittavat tiedot eivät löytyneet tältä hakutulossivulta. Koodin tuli käydä läpi myös jokaisen asunnon oma sivu, sillä asunnon rakennusvuotta ei mainita kaikkien asuntojen listauksessa. Kyselyjä piti siis lopulta tehdä 200 hakutulossivuille ja 6 000 yksittäisten asuntojen omille sivuille.

Teemon ensimmäinen ajatus oli kokeilla ScraperWiki -palvelua, jota hän oli kuullut käytettävän screippaukseen. Palvelu on ollut etenkin toimittajien suosiossa ja Teemo ajatteli, että palvelun testaamisen jälkeen hän voisi opettaa sen käyttöä muille toimittajille.

ScraperWiki mahdollistaa esimerkiksi Python-koodin kirjoittamisen ilman erillisten ohjelmointiympäristöjen asentamista. Siksi palvelu sopii esimerkiksi journalisteille, joilla ei usein ole mahdollisuutta tai taitoa asentaa kaikki tarvittavia ohjelmistoja. Teemo päätyi kuitenkin tekemään toteutuksen omalla koneella omassa ympäristössä, koska tämä oli lopulta hänelle kätevämpää.

Scraper käy läpi HTML-koodia ja tallentaa määritellyt osiot talteen myöhempää käyttöä varten. (Kuva 2)
HTML-merkkauksen siivouksessa ja käsittelyssä Teemo käytti hyväkseen BeautifulSoup-nimistä Python-kirjastoa. BeautifulSoup on kirjasto, jonka avulla verkkosivuilla käytetty HTML-merkkaus voidaan muuttaa koneelle ymmärrettävään muotoon. Lopulta koodi ryömi Vuokraovi.comin sivuja muutaman tunnin ajan. Ajo tehtiin vielä uudelleen lopullista uutista varten 2. joulukuuta.>

Trouble shooting vei aikaa

Kun Teemo testasi koodia ensimmäisiä kertoja, koodi ei hakenut dataa halutulla tavalla. Vian etsintään menikin hetki. Lopulta Teemo tajusi tutkiessaan HTTP-pyyntöä, että Vuokraovi.com -sivusto asetti Internet-selaimessa tukun evästeitä, eli cookieita, joiden puute esti scraperin toiminnan. Hän päätteli, että asian korjaamiseksi samaiset evästeet tulisi asettaa myös tietokoneohjelman tekemään HTTP-pyyntöön. Tällöin HTTP-pyyntö vaikuttaisi Vuokraovi.comin näkökulmasta täysin samanlaiselta kuin jos sen tekisi esimerkiksi Google Chrome -selaimella. (Kuva 3)

HTTP-pyyntöihin liittyvät evästeet näkee Google Chrome -selaimessa Inspect Element -valikon takaa. (Kuva3)
Joskus screipatessa voi käydä niin, että jos pyyntöjä tehdään suuri määrä, palvelin voi tulkita ne vihamielisiksi ja estää ne. Vuokraoven tapauksessa reilut 6 000 pyyntöä hukkui luultavasti normaalin verkkoliikenteen sekaan. Screippausta suunnitellessa kannattaa kuitenkin miettiä, voiko rajoituksista tulla ongelmia. Esimerkiksi hakukoneyhtiö Google tunnistaa tehokkaasti koneellisesti tehtävät haut ja estää ne, koska koneellisesti tehtävät haut ovat osa heidän maksullista palveluaan.

Toteutus on ladattavissa avoimena lähdekoodina (CC-BY-SA 4.0) Ylen Github-sivulta.

Yhden päivän työ

Ennen julkaisua aineistosta siivottiin pois sellaiset kohteet, joista puuttui jokin tarvituista tiedoista, kuten rakennusvuosi, sekä autotallit ja kalustetut asunnot. Näin aineistosta saatiin vertailukelpoista. Karsimisen jälkeen pohja-aineistoksi jäi noin 5 000 vuokra-asunnon tiedot. MongoDB:stä data tulostettiin .csv-muodossa ja vietiin Googlen Spreadsheets-taulukkolaskentaohjelmaan, jossa lopullinen verotusarvolaskenta tehtiin. Aineisto on ladattavissa Ylen sivuilta Excel-muodossa.

Jutun teknisten osien toteuttaminen järjesteltävine taulukoineen kesti noin työpäivän verran, joskin homma olisi sujunut nopeammin, jos eväste-ongelman selvittämiseen ei olisi mennyt aikaa. Jatkossa vastaavanlaisia toteutuksia tehtäessä evästeet osataan ottaa paremmin huomioon.

Eräs aineistosta tehty havainto oli, että erot markkinavuokrassa suhteessa verotusarvoon olivat alueellisia. Niinpä juttu sai otsikon: Asuntoedusta hyötyy eniten Helsingissä ja kehyskunnissa – katso oman kuntasi tilanne. Jutun yhteydessä käyttäjä sai tutkia asuntojen markkinavuokran ja verotusarvon eroa sekä kunnan että postinumeroalueen perusteella.

Aineisto myös paljasti, että verotusarvon ja markkina-arvon välinen vastaavuus oli keskimäärin 73 prosenttia, siis huomattavasti verottajan edustajan ilmoittamaa 90 prosenttia pienempi.

Juttu ei ollut varsinainen yleisömenestys. Asuntoedusta nauttii Suomessa alle 20 000 henkilöä, joten kohdeyleisökään ei ollut järin suuri. Vaikuttavuutta ei voida kuitenkaan mitata pelkästään lukijamäärän perusteella.

Screippaus-kokeiluna juttu oli Plus-deskille uusi aluevaltaus ja on hyvin todennäköistä, että tulevaisuudessa tällaisia omaan datan hankintaan perustuvia "skuuppeja" tulee enemmän.

Laita siis Python töihin!

Heidi Kähkönen
Kirjoittaja on vapaa toimittaja ja datajournalismikouluttaja
Twitter:  @heidikahkonen

tiistai 8. lokakuuta 2013

Social network analysis of one's Facebook friends

This blog post is in English as you may have noticed. It is made for a training session held at Södertörn University for the Swedish media organizations.

Objective:
Create a network visualization of one's Facebook friends.

Requirements:
Gephi, Python, MongoDB, Google Chrome, Scraper, Google Account

0. Network visulialization examples 


First here are some of examples where network analysis has given insigth to the given story.
  1. Social network analysis of a shooter suspect's Facebook friends
  2. Probing the murky web of foreign ownership in Finnish firms
  3. Spotlight - Party of the True Finns and islamophobia
As you can see network visualizations can be used in various ways. They can be used both in the background and also as an interactive end user application.

 1. Get your Facebook friends


Your own Facebook friends data is available through Facebook API. To access your Friends list through Facebook API browse to address:
https://graph.facebook.com/me/friends?access_token={place_valid_access_token_here}

A valid access token can be acquired from Graph API Explorer. (Pic 1)

You can get your own Facebook friends data from Facebook API in JSON format fairly easily. (Pic 1)

But only your own Facebook friends data is available through the API. So if you desire to get the friends data of any other profile it is vital to know that it is not available through Facebook API. So if you want to make a social network analysis of your friend's Facebook friends you need to make a little detour.

The detour here is called screen scraping. Screen scraping is a method where we use the computer to read the data what we see on our screen. We do this while computers are much faster doing it and make less mistakes. At simplest screen scraping is done from one page but it can be done from any number of pages.

A tool called Scraper is a very good for doing this when we just need to scrape data from one to two pages. Scaper is Google Chrome addon. if you desire to know more see a tutorial by Jens Finnäs.

For scraping we will use Facebook's mobile interface while it has much simpler outlook. This is nice when doing screen scraping because we have to deal with less code.

The following steps allow you to screen scrape your own friends list (that was also available through the API).
  1. Go to your Friends list. It is located at https://m.facebook.com/{place_your_username_here}?v=friends
  2. First scroll down as many times you need to get all of your friends to show on the screen. To achieve this it is quite handy to used the pagedown functionality. You may experience problems if you have more than 500 friends or so.
  3. Next open the context menu while clicking one of your friend and from the context menu select scrape similar. You need to have the Scraper plugin installed and enabled. (Pic 2)
  4. After clicking scrape similar you'll get a new window. On the left side you can define what you are scraping for and on the right side you see what you get. (Pic 3)
  5. To define what you are looking for you need to use either XPath or jQuery. The default selection is XPath and that suits us. Enter the following code without the quotes into the available field "//div[@class='_4mn c']/a" and click Scrape. What the code says is that we want to get the anchor elements (aka. links) which are located under a <div>-element which has class attribute value "_4mn c". In the section columns set XPath to "@href". That tells the code to fetch the @href parameter from those anchors.
  6. Export the dataset to Google Docs and open the document in Google Docs. Remove unnecessary columns B to E.
  7. Download the data as a .csv-file to your local computer. File -> Download as -> Comma separated values (.csv, current sheet)

(Pic 2)

(Pic 3)

 2. Create the connections between friends


Now we have a .csv-file of all your friends. From this we could make a network visualization which would show that all your friends are connected to you.

What we want to do is to figure out how your friends are connected which each other. This can be accomplished via Facebook API's Friend property which allows us to ask wheater to Facebook profiles are friends with each other. This is nice while you can do this for any two Facebook profiles regardless of their privacy settings.

Key point here is that one can't ask Facebook API who are all the friends of a Facebook profile. But one can ask one-by-one wheather to profiles are friends. So if you have a list of Facebook profiles it is possible to make the network. And as you may have realized we have list while we have screen scraped it. This also means that sometimes you can't get the profile list you deside due user's privacy settings. For example users can hide their friends list from users that they have not friended.

But how to use the Friend property. One can access it via Graph API Explorer which we already used to acquire the proper access token.

With Graph API Explorer we could make the network by hand by entering all the queries to Graph API one-by-one. For example the query:

"SELECT uid1 FROM friend WHERE uid2 = 635279474 AND uid1 = 732028610"

tells us whether these to user id's are friends with each other. But for any larger network this would be a pain in the ass while you would have to make hundreds and hundreds of queries. (Pic 4)

(Pic 4)
Fortunately this is not the case. I have written a Python script that does the work for us. But unfortunately I'm quite sure that the script won't work out of the box for most users.

Download the script.

Place the script file in some good place where you can access it. Copy also the .csv-file that same folder. Next open terminal, browse to that folder and run:

python facebook_network.py {filename} ({use_existing = True|False})

for example:

python facebook_network.py teemo_tebest.csv False

When you are asked for an access token please refer to Graph Api Explorer to get one. You may phase several problems while running the script. First check that you have Python installed. Secondly you need a running MongoDB. Thirdly you need to have atleast two Python libraries installed called pyfacegraph and pymongo. (Pic 5)

The script need to be run in terminal environment. (Pic 5)
The script runs for a while. First it fetches all the metadata available from the profiles. After that the script forms the connecions between the users. After all is done the script outputs the data into a network file format.

3. Visualize the data with Gephi


Now that we have the data in a network format (.gexf) we can visualize it with available tools. One great and free tool is called Gephi.

If you failed to form your own dataset you can download and example dataset.

First open Gephi and use the basic file opening functionality to open the .gexf-file created in the previous step. You'll see a pop up window that gives you an overview of the data. After Gephi has loaded the data you'll see a junk of data. (Pic 6)

The data is layouted randomly when the file is loaded for the first time. (Pic 6)

Without adjusting any settings we don't get much out of the data. We can zoom into it and point single nodes to see the edges leaving from it but that is just it.

What we need to do is to define the layout algorithm, the node size and the color values for the nodes to get more out of the data.

Just to make clear:
Node: balloon
Edge: connection between nodes.

For social networks a layout algorithm called ForceAtlas2 is a proper choise so we will use that. Check that your settings are as in the picture. (Pic 7)

ForceAtlas is great for social networks. Other available layout algorithms include for example Geo Layout. (Pic 7)
After you hit run you'll see the magic happening in just a few seconds. The nodes are settled in the network based on the edges between them. Meaning that the nodes which have more connections between each other are grouped closer to each other and the nodes that have less connections to each other are torn apart.

Next you want to define the colors and the node sizes. But before then you need to count some figures. Mainly you want to run Modularity and Eigenvector centrality. Modularity will divide the nodes into groups and eigenvector centrality will allow us to define the node size. (Pic 8)

Statistics can be calculated from the right side. (Pic 8)
Now we can use these figures to define the colors. (Pic 9)

You can change the colors if you want. (Pic 9)
And the node sizes. (Fig 10)

You may define the min and the max node size. (Pic 10)
After doing so your network could look example like this. (Pic 11)

The separate groups are in different colors defined by Modularity and the node sizes tell how central the node is in the network. (Pic 11) 
You can zoom into the groups and point out single nodes to see the edges. To enable the labels click the small arrow icons below the network. (Pic 12)

You may enable the node labels. (Pic 12)
You are all done. You may adjust your colors and nodes sizes. You can test for example to use the gender information to define the colors. You can also try other layout algorithms to see what is available.

See also Olli Parviainen's great slides about visualizing your Twitter network with Gephi. Slides 8 to 17 show you the main visualizing steps inside Gephi that we've also used here.

4. Summary


Using network visualizations to show the connections between your Facebook friends or social media connections in general is a great way to make insight.

There are also several Javascript tools available that enable you to publish your network online as an interactive visualization:
Network visualizations are not that familiar way of visualization for a common user. Not like bar charts or maps. People tend not to understand what they are about and call them these odd spyderweb visualizations.  From this perspective I am not that eager to publish them online. But for professionals like journalists and programmers network visualizations can give real good insigth into the data. Knowing how to do network visualization gives you most often an unique perspective that no one else have thought of.

keskiviikko 2. lokakuuta 2013

Kuntadata + Google Fusion Tables = kuntakartta

Tämän blogikirjoituksen tehtävä on näyttää askel askeleelta miten yksinkertaisen karttavisualisoinnin toteuttaminen onnistuu Google Fusion Tables -työkalulla.

Ohjeet on alunperin kirjoitettu Metropolia:n opintojakson "Toimittaja verkkomediassa" tarpeisiin, mutta ne on kirjoitettu niin, että kuka vain voi niitä seurata.

1. Hanki kuntadataa


Kuntiin liittyvää dataa on saatavilla hyvin monista eri lähteistä. Esimerkiksi THL:n Sotkanet tarjoaa hyvin monipuolisesti erilaista terveyteen liittyvää tietoa. Toinen laaja tietolähde on tietysti Tilastokeskus.

Esimerkiksi voit ladata kuntadataa Tilastokeskuksen Kuntien avainluvut -aineistosta.
  1. Valitse vasemmalta kaikki kunnat niin, että valituksi tulee 320/321 riviä.
  2. Valitse oikealta haluamasi tunnusluku, voit ottaa esimerkiksi "Väkiluvun muutos, % 2011 - 2012".
  3. Valitse pudotusvalikosta valinta "Pilkkueroteltu otsikolla (.csv)".
  4. Paina "Jatka" ja lataa valitsemasi data tietokoneellesi johonkin mistä löydät sen hetken päästä. 
Lisää Valitse kaikki kunnat, haluamasi tunnusluku sekä haluttu dataformaatti.

Nippelitietoina on hyvä tietää, että vuosina 2011–2012 Suomessa oli 336 kuntaa kun taas vuonna 2013 Suomessa on 320 kuntaa. Aineistossa olevien kuntien määrä kertoo usein siitä miltä ajalta aineisto on. Joskus on myös hyvä tietää, että vuosina 2011–2012 Suomessa oli 320 kuntaa mannersuomessa, koska tämä voi joskus olla hämäävää.

2. Lataa aineistosi Google Drive -palveluun


Seuraavaksi haluat siirtää hankkimasi aineiston Google Drive -pilvipalveluun, koska Fusion Tables on sieltä löytyvä työkalu.

Tätä ennen data täytyy kuitenkin puhdistaa. Käytämme myös tähän puhdistamiseen Google Drive -palvelua.
  1. Mene osoitteeseen http://drive.google.com ja kirjaudu sisään omilla Google-tunnuksillasi.
  2. Näet näkymän jossa ovat kaikki Google Drive -tiedostosi. Jos et ole käyttänyt palvelua aikaisemmin saatat saada tervetulotoivotuksia ja muita viestejä.
  3. Valitse vasemmalta löytyvä punainen upload-painike (nuoli ylöspäin).
  4. Etsi koneellesi aiemmin lataama .csv-tiedosto ja lataa se Google Drive -palveluun.
  5. Avaa tiedosto Google Drive:ssä.
Jos kaikki on tähän asti onnistunut pitäisi lopputuloksen näyttää tältä. Toki jos olet valinnut hyvin eri tyyppisen datan näyttäytyy se tietysti eri tavalla.

Mikäli jotain tuntuu menevän väärin eikä lataamastasi dokumentista synny yllä olevan kaltaista taulukkolaskentadokumenttia kokeile ladata .csv-tiedosto uudelleen ja tarkista latausikkunan asetukset. Haluat, että sinulla on "Conversion; on" -asetus päällä.

Asetettuasi "Conversion" -asetuksen tilaan "on" täytyy sinun ladata tiedosto Google Drive:en vielä kertaalleen, koska vasta tällöin asetus tulee voimaan uusille tiedostoille. Voit huoletta poistaa kaikki turhat tiedostot ja epäonnistuneet siirrot Drive:stä.

3. Puhdista data


Data täytyy puhdistaa ennen kuin sitä voidaan käyttää. Tässä tapauksessa puhdistaminen tarkoittaa, että haluamme muuntaa datan sellaiseen muotoon, että meillä on kaksi saraketta, joista ensimmäisessä sarakkeessa (A) meillä on kunnan nimi ja toisessa sarakkeessa (B) meillä on kuntaan liittyvä lukuarvo, joka siis kuvaa jotain kunnan ominaisuutta. Tässä tapauksessa se siis on kunnan muuttovoitto- tai muuttotappioprosentti.

Haluamme myös, että rivillä yksi (1) meillä on otsikkorivi. Eli rivi joka kuvaa sarakkeiden sisällön. Otsikkoriviä seuraa esimerkiksi suomalaisen kuntadatan tapauksessa 320 riviä, jotka kuvaavat kuntien tiedot. On hyvä tarkistaa rivien määrä sekä ettei mukana ole mitään muuta tarpeetonta.

Nämä toimenpiteet on mahdollista tehdä kuten missä tahansa taulukkolaskentaohjelmassa.

Ensimmäinen rivi on nimeltään otsikkorivi. Se kertoo mitä tietoa sarakkeet pitävät sisällään. Samankaltaista tietoa sisällään pitävät tiedot erotellaan omiksi sarakkeikseen.

4. Tallenna data Fusion Tables -dokumenttina


Käsittelemämme dokumentti on tähän asti ollut Google Spreadsheets -dokumentti. Nyt koska haluamme visualisoida datan Fusion Tables -työkalun avulla kartalle täytyy meidän tallentaa tämä Spreadsheet-dokumentti Fusion Tables -dokumentiksi.
  1. Mene Google Drive -palvelun etusivulle.
  2. Valitse vasemmalta painike "Create".
  3. Valitse "Fusion Table". (Mikäli et löydä "Create"-valikon alta Fusion Tables -valintaa täytyy sinun asentaa kyseinen työkalu "Connect more apps" -valikon kautta).
  4. Valitse avautuvasta ikkunasta vasemmalta Google Spreadsheet, hae oikea dokumentti ja valitse se.
  5. Esikatseltuasi dokumenttia ja annettuasi sille haluamasi tiedot pääset näkemään lataamasi tiedot.
Fusion Tables -dokumentti muistuttaa jossain määrin taulukkolaskentadokumenttia ulkonäöllisesti (sarakkeita ja rivejä), mutta ei kuitenkaan ole sellainen.

Tärkein ero taulukkolaskentadokumentin ja Fusion Tables -dokumentin välillä on, että Fusion Tables on nimenomaisesti tiedon visualisointityökalu. Sen avulla on siis mahdollista suhteellisen helposti visualisoida olemassa olevaa tietoa. Tietojen muokkaaminen sen avulla on kuitenkin melko tuskallista. Fusion Tables:ssa esimerkiksi sarakkeiden summaaminen ja muut funktionaaliset toiminnallisuudet loistavat poissaolollaan. Kannattaa siis ensin muokata data valmiiksi taulukkolaskentaohjelmistossa ja vasta sitten tuoda se Fusion Tables:iin.

5. Hanki aluerajat


Jotta voit tehdä datastasi Suomen kuntarajoihin perustuvan visualisoinnin täytyy sinulla olla datan lisäksi toki myös Suomen kuntarajat. Lataa dataasi sopivat rajat tämän blogin KML-aineistot sivulta. Esimerkkitapauksessamme oikea aineisto on "Suomen kuntarajat 2013".

Voit joko käyttää "Make a copy" -toimintoa tai sitten ladata datan ensin koneellesi ja sitten uutena Fusion Tables -dokumenttina omaan Google Drive:esi. Oleellista on, että saat rajat sisältävän Fusion Tables -dokumentin näkymään omassa Google Drive:ssäsi.

Haluat ladata aluerajat omaan Google Drive:esi.

6. Yhdistä datasi aluerajadataan


Seuraavaksi haluat yhdistää kaksi dokumenttia toisiinsa yhteisen nimittäjän avulla. Yhteinen nimittäjä on tässä tapauksessa kunnan nimi, joka siis on yhteinen molempien dokumenttien kesken.
  1. Avaa kuntadata sisältävä Fusion Tables -dokumenttisi.
  2. Valitse File-valikon alta löytyvä Merge-painike.
  3. Etsi dokumenteistasi aluerajat sisältävä dokumentti ja valitse "Next".
  4. Valitse sarake, jonka perusteella dokumenttien yhdistäminen tehdään.
Valitse sarakkeet joissa on toisiaan vastaavat tiedot.

7. Karttadatan visualisointi


Nyt meillä siis on Fusion Tables -dokumentti, joka pitää sisällään niin datan kuin aluerajat. Seuraavaksi haluamme määrittää miltä kartta näyttää. Eli haluamme muun muassa määrittää alueiden värityksen.
  1. Valitse "Map of geometry" -välilehti.
  2. Näet punaisen Suomen kartan.
  3. Valitse "Tools" -> "Change map styles...".
  4. Valitse vasemmalta Polygons.
  5. Valitse Buckets.
  6. Määrittele haluamasi värien määrä. Kohdasta "Divide into x buckets". Esimerkiksi 4–6 on usein hyvä arvo.
  7. Valitse kohtaan "Column" sarakkeen nimi, jossa on visualisointiin haluamasi data.
  8. Tallenna muutokset ja näet tekemäsi muutokset kartalla.
  9. Voit muuntaa alueita klikkaamalla näkyvän infoikkunan sisältöä valitsemalla "Tools" -> "Change info windon layout...". Voit valita mitkä sarakkeet näytetään ja myös muokata vapaasti osatessasi infoikkunan html-koodia.
Yhdistämisen jälkeen sinulla on uusi Fusion Tables -dokumentti missä on niin hankkimasi data kuin aluerajat. Aluerajat näkyvät kuvassa kohdassa "geometry".

Voit vaihtaa raja-arvoja ja värejä haluamallasi tavalla. Näissä valinnoissa tulisi toki julkaistavassa jutussa olla jokin peruste.

Mahdolliset tyhjät alueet tarkoittavat sitä, että yhdistäminen alkuperäisen datan ja aluerajadatan välillä ei ole onnistunut kaikilta osin. Tässä tapauksessa syynä on, että kuntien nimen eivät olleet aineistoissa yhteneväiset.

8. Julkaisu


Valmiin karttatoteutuksen julkaiseminen onnistuu useimmissa sisällön hallintajärjestelmissä niin sanotun iframe-upotuksen avulla. Saat upotukseen tarvittavan html-koodin valitsemalla "Tools" -> "Publish...".

Ennen julkaisua Fusion Tables -dokumentti tulee asettaa näkyväksi Internetissä. Valinta "Everyone with a link" on usein hyvä vaihtoehto.

Tämä iframe-koodi upotetaan hieman riippuen sisällöntuotantojärjestelmästä osaksi jutun leipätekstiä, jolloin sen pitäisi toimia kuten tässä.



Loppusanat


Nämä ohjeet eivät pyri kuvaamaan prosessia täydellisesti vaan on tarkoituksenmukaista, että niitä läpikolutessa joutuu myös ajattelemaan välillä mitä on tekemässä.

Kaikki palaute on tervetullutta :)

maanantai 27. toukokuuta 2013

Kuinka luoda Google-kysely askel askeleelta

Ohjeiden tavoitteena on luoda lomakepohjainen kysely, joka on mahdollista upottaa muun muassa Yle Uutisten -sivuille. Kysely toteutetaan Google Form -työkalun avulla. Ohjeet on tehty alunperin Yle Uutisten Internet-koulutukseen osallistuneille.

Google Form mahdollistaa monipuolisesti erilaisten kyselyiden toteuttamisen. Kysymykset voivat olla muodoltaan esimerkiksi monivalintoja tai tekstikenttiä. Kyselyn voi nykyään jakaa usealle sivulle ja kysymykset voivat olla toisilleen ehdollisia.

Tärkeä huomio on, että kyselylomake ja lista yksittäisistä vastauksista tallennetaan Google Drive -palvelussa erillisiin dokumentteihin. Kyselylomake on Google Form -dokumentti ja se pitää sisällään kysymykset sekä yhteenvedon vastauksista. Yksittäiset vastaukset tallennetaan erilliseen Google Spreadsheet -dokumenttiin. (Kuva 1)

Eri tyyppiset dokumentit tunnistaa niiden erilaisista ikoneista. Myös dokumenttien nimeämistä kannattaa hyödyntää. (Kuva 1)
Google Drive -dokumenttien jakaminen muiden käyttäjien kesken onnistuu aina oikeasta ylänurkasta ("Share"-painike). On hyvä muistaa ja tarkistaa, että sekä kyselylomake, että vastaustaulukko tulevat jaetuiksi kaikille joille haluat ne jakaa.

Ohjeet on tehty perustuen englanninkieliseen käyttöliittymään, mutta kaikki termit kääntyvät melko suoraviivaisesti suomeksi. Ohjeiden tarkoitus ei ole olla täydellisiä vaan niitä seuratessa on tarkoituksenmukaista välillä ymmärtää mitä on tekemässä. Suosittelen lukemaan ohjeet ensin kertaalleen läpi alusta loppuun.
  1. Avaa Google Drive ja kirjaudu palveluun.
  2. Valitse vasemmalta painike "Create" ja sen takaa avautuvastta valikosta "Form". (Kuva 2)

    Uuden Google Form:n luominen onnistuu osoitteessa http://drive.google.com. (Kuva 2)
  3. Sinua pyydetään antamaan kyselylle nimi. Tämä nimi näytetään otsikkona kyselyn alussa. Voit myös valita kyselylle ulkoasun/teeman, mutta oletuksena valittuna oleva "Default" on usein toimivin vaihtoehto. Valitse "OK".
  4. Syötä lomakkeen kuvaus eli "Form Description". Voit esimerkiksi kertoa miksi kysely on olemassa ja mihin vastauksia käytetään. Kuvaus näytetään kyselyn otsikon alla ja sen voi jättää myös tyhjäksi.
  5. Seuraavaksi määritellään mitä kysytään. Voit lisätä eri tyyppisiä kysymyksiä, muokata yksittäisten kysymysten kuvauksia, lisätä uusia kysymyksiä ja vaihtaa kysymysten järjestystä haluamallasi tavalla. "Add item" painikkeen avulla voit lisätä uusia kysymyksiä. (Kuva 3)

    Voit lisätä kysymyksiä, muokata ja poistaa olemassa olevia sekä raahaamalla muuttaa kysymysten järjestystä. (Kuva 3)
  6. Kun olet saanut syötettyä kaikki kysymykset muokkaa alla olevaa kohtaa "Confirmation Page". Kirjoita kohtaan "Confirmation message" lomakkeen täyttäjälle lomakkeen lähettämisen jälkeen näytettävä viesti. Voit esimerkiksi kiittää vastaamisesta. (Kuva 4)
  7. Useimmin kannattaa poistaa ruksi kohdasta "Show link to submit another response". Myös muut ruksit on usein hyvä olla pois päältä. On kuitenkin hyvä ymmärtää ja ehkä kokeilla mitä ne tarkoittavat. (Kuva 4)

    Kyselyn muokkausnäkymän näkymän lopussa määritellään mitä tapahtuu kun käyttäjä lähettää lomakkeen. (Kuva 4)
  8. Kun olet syöttänyt kaikki kysymykset voit määrittää painikkeen "Choose response destination" avulla mihin Google Spreadsheet -dokumenttiin yksittäiset vastaukset tallennetaan. Tämä kannattaa tehdä vasta kun olet määrittänyt kaikki kysymykset ja niiden järjestyksen. (Kuva 5)

    Itse kysely ja yksittäiset vastaukset tallennetaan erillisiin dokumentteihin. Tässä kerrotaan mihin dokumenttiin yksittäiset vastaukset halutaan tallentaa. (Kuva 5)
  9. Kun olet valmis voit tarkastella lopullista kyselyä valitsemalla "View live form". (Kuva 6)

    Kyselyä kannattaa esikatsella ja testata ennen kuin sen julkaisee. (Kuva 6)
    Jos haluat upottaa kyselyn toiselle sivulle (esimerkiksi Yle Uutisten sivuille) valitse valikosta "File" kohta "Embed". Kopioi avautuvasta ikkunasta löytyvä koodinpätkä leikepöydällesi. Koodin tulee alkaa "<iframe". Tämä on upotuskoodi, jonka avulla lomake voidaan tuoda osaksi periaatteessa mitä tahansa sisällönhallintajärjestelmää. Voit joko sijoittaa tämän upotuskoodin itse haluamaasi kohtaan käytössäsi olevassa järjestelmässä tai jakaa sen sähköpostilla sivuston ylläpidolle, joka hoitaa upotuksen. (Kuva 7)

    Kun kysely halutaan upottaa osaksi jotain olemassa olevaa verkkopalvelua halutaan käyttää "Embed"-toimintoa. (Kuva 7)
    Lomake on myös mahdollista jakaa vastaajille esimerkiksi sähköpostilla. Tämä onnistuu valitsemalla oikeasta ylänurkasta "Send form" ja kopioimalla aukeavasta ikkunasta löytyvä linkki. Tämä linkki voidaan liittää vastaajille lähetettävän sähköpostin oheen saatesanoilla varustettuna. Esimerkiksi jos haluat lähettää kyselyn kaikille kansanedustajille on tämä toimiva tapa. (Kuva 8)

    Jos kysely halutaan esimerkiksi lähettää sähköpostilla rajatulle joukolle voidaan käyttää "Send form" -toimintoa. (Kuva 8)
  10. Valinnainen: Muuta upotuskoodissa width-attribuutin arvo 100 %:iin ja lisää osoitteeseen parametri &hl=fi. Näiden avulla lomake käyttää koko käytettävissä olevan leveyden ja toimii suomeksi. Mikäli joudut itse hoitamaan upottamisen täytyy myös height-attribuutin arvoa muokata sen mukaan miten pitkä kyselysi on.
Lomaketta kannattaa kokeilla itse ennen kuin sen ottaa käyttöön. Vastaa lomakkeeseen kuin olisit täyttämässä sitä ja mieti toimiiko se jouhevasti ja toisaalta teknisesti oikein. Voit vielä tässä vaiheessa tehdä muutoksia kuten vaihtaa kysymysten järjestystä ja lisätä tai poistaa kysymyksiä. Voit testauttaa lomaketta myös kavereillasi. Testaamisen jälkeen voit joko poistaa koevastaukset tai huomioida ne tehdessäsi lopullista analyysiä.

Google tallentaa kaikki muutoksesi automaattisesti. Kuten huomaat lomaketta tehdessäsi lukee ylhäällä "All changes saved in Drive". Aina kun teet muutoksia lukee samaisessa kohdassa hetken "saving...". (Kuva 9)

Voit seurata kyselyysi tulevia vastauksia reaaliajassa Google Spreadsheet -dokumentista johon tallentuvat yksittäiset vastaukset. Dokumentti päivittyy automaattisesti aina kun joku vastaa kyselyyn. Yhteenvedon vastauksista näet Google Form -dokumentista kun valitset kohdasta "Responses" valinnan "Summary of responses". (Kuva 9)

Kun haluat lopettaa kyselyn avaa Google Form -dokumentti ja poista valikon "Responses" kohdassa "Accepting responses" oleva ruksi. Kun ruksia ei ole lomakkeeseen ei ole mahdollista vastata. Jos olet upottanut lomakkeen kannattaa lomakeen upottaminen käydä poistamassa ja jättää sivulle mahdollisesti myöhemmin eksyville viesti, että kysely on päättynyt. (Kuva 9)

Responses-valikosta näet vastanneiden summittaisen määrän. Lisäksi voit sulkea kyselyn ja katsoa yhteenvedon vastauksista. (Kuva 9)
Google Form on tehokas työkalu tehtäessä erilaisia joukkoistuksia. Sitä käytettäessä tulee kuitenkin huomioida, että kyselyiden manipulointi on mahdollista eikä tuloksia tule pitää tieteellisinä totuuksia. Uutistoiminnassa Google Form -kyselyt voitaneen rinnastaa torikyselyihin eli niiden tarkoitus ei ole esimerkiksi väittää, että niillä saadut tulokset olisivat koko kansan mielipide. Tulokset kuvaavat uutissivulla tietyllä hetkellä vieraileiden ja kyselyyn vastanneiden mielipidettä.

Esimerkkejä onnistuneista kyselyistä:


Nämä ohjeet on tehty mukaillen Esa Mäkisen kirjoittamia ohjeita.

perjantai 8. maaliskuuta 2013

Suomen kuntien koordinaattitiedot

Olemme tekemässä PlusDesk:ssä juttua, johon tarvitsemme Suomen kuntien sijaintien koordinaattitiedot. Sijaintitiedot ilmaisevat kaupungin sijainnin maapallolla korkeus- ja leveyskoordinaattien avulla. Nämä tiedot ovat saatavilla Wikipedia:n artikkelista: Luettelo Suomen kuntien koordinaateista. Kiitos Teemu:lle vinkistä.

Wikipedia-artikkelin data ei ole kuitenkaan nykyisen kuntatilanteen mukaista ja tarvitsimme nimenomaan vuoden 2013 kuntatilanteen mukaiset koordinaattitiedot (vuonna 2013 Suomessa on 320 kuntaa).

Olisin voinut rajata Wikipedia:sta löytyneen koordinaattisisällön vastaamaan nykytilannetta, mutta päädyin sen sijaan ottamaan Google Chrome:n Scraper-lisäosalla nykyisen kuntalistauksen toisesta Wikipedia-artikkelista nimeltä Luettelo Suomen kunnista ja syöttämään tiedot GPS Visualizer -palveluun. Palvelu geokoodaa annetut osoitetiedot WGS84-muodossa oleviksi korkeus- ja leveyskoordinaateiksi valitun rajapinnan avulla (Yahoo tai Google). Syötin kuntien nimet palveluun muodossa "{Kuntanimi}, Finland", jotta välttyisin sekaannuksilta mahdollisesti muualta maailmasta löytyviin vastaavan nimisiin paikkoihin. (Kuva 1)

GPS Visualizer -palvelu hyödyntää avoimia rajapintoja osoitetietojen geokoodauksessa. (Kuva 1)
Keräämäni data, jonka oikeellisuuteen kannattaa suhtautua varauksella, on saatavilla täältä:
Tulen tarkistamaan datan oikeellisuuden vielä myöhemmässä vaiheessa, mutta yksittäiskokeilujen osalta koordinaattitiedot näyttäisivät pitävän paikkansa. Keräämäni datan avulla loin sitten pudotusvalikon, josta käyttäjän on mahdollista valita haluamansa kunta, jonka jälkeen ohessa oleva kartta tarkentuu kyseisen kunnan kohdalle. (Kuva 2)

Käyttäjän on pudotusvalikosta mahdollista tarkentaa haluamaansa kuntaan. (Kuva 2)
Pudotusvalikon HTML-koodi näyttää siis yksinkertaisuudessaan seuraavalta:

<select id="selector">
   <option value="">Valitse kunta</option>
   <option value="">- - - - </option>
   <option data-lat="61.167408" data-lon="23.867642">Akaa</option>
   <option data-lat="63.00285" data-lon="23.803185">Alajärvi</option>

   <option data-lat="64.158003" data-lon="24.299759">Alavieska</option>
   <option value="...">...</option>
</select>


Kyseistä HTML-koodia en tallenna sellaisenaan sivun lähdekoodiin vaan luon valikon lennossa oheisella JavaScript-koodilla.

$.ajax({
  url: jsonUrl + '/data/kunnat.json',
  method: "GET",
  dataType: "json",
  success: function(data) {
    $.each(data, function(index, municipality) {
      $('#selector').append('<option data-lat="' + municipality.lat + '" data-lon="' + municipality.lon + '">' + municipality.m + '</option>');
    });
  }
});


Tämä pienentää sivun kokoa eli painoa ja pienentää siten latausaikaa, mutta toisaalta toki lisää selaimelle aiheutuvaa prosessointi kuormaa. Sivun pieni paino on kuitenkin tärkeämpää etenkin mobiilikäytössä. Nykyisille selaimille ja laitteille kyseisenkaltainen prosessointi on hyvin kevyttä.

(Muokkaus klo 8:26: JSON-muodossa data on ~16 kilotavua kun vastaava HTML-muotoinen data olisi ollut ~21 kilotavua. Ero on siis etenkin prosentuaalisesta näkökulmasta merkittävä. Toki myös pyyntöjen määrä olisi hyvä minimoida kuten @Duukkis osuvasti huomioi.)

Koodissa näkyvä kunnat.json on luotu aiemmin mainitusta Google-dokumentista lataamalla se .csv-muodossa koneelle ja syöttämällä tämä .csv-muotoinen data Mr. Data Converter -palveluun. JSON on yleisesti verkossa tiedon välitykseen käytetty tiedostomuoto. Kuntien koordinaattitiedot sisältävä .json-tiedosto näyttää seuraavalta:

{"m":"Akaa","lat":61.167408,"lon":23.867642},
{"m":"Alajärvi","lat":63.00285,"lon":23.803185},
{"m":"Alavieska","lat":64.158003,"lon":24.299759},
{"m":"Alavus","lat":62.586607,"lon":23.617282},
...


Tässä hieman valoa siihen miten käsittelen ja hyödynnän dataa. Julkaisemme itse toteutuksen, jossa käytämme tätä pudotusvalikkoa toivottavasti ensi viikon aikana, joten siitä kuulette vasta sitten.

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.