Tag Archives: Google Visualisation API

Excelistä R:n kautta Google Motion Chart -palloiksi

Yleisten kirjastojen monipuolisia tilastolukuja vuodesta 1999 lähtien löytyy avoimena datana mm. Helsinki Region Infoshare -sivuston kautta. Tilastoja julkaistaan sekä Excel-tiedostoina että XML-muodossa. Miten sujuu R:ltä Excel? Sitä piti testata.

Kirjoitin auki huomioita kommenteiksi itse R-koodiin.

Datan lukeminen Excel-muodosta oli yllättävän vaivatonta, kiitos R:n kehittyneiden kirjastojen. Kirjastotilastotkin ovat sisällöltään melko hitaasti muuttuvaa, mikä helpotti. Ainoa varsinainen isompi pulma tuli eteen Excel-funktioiden muodossa. Jokaisen taulukon lopussa on summafunktio. Sekään ei olisi ongelma, ellei viimeisen rivin numero vaihtelisi taulukosta toiseen. Kuntia yhdistetään, taulukot elävät. Eikä tämäkään olisi kompastuskivi, elleivät taitoni XLConnect-kirjaston käyttäjänä olisi niin heppoiset. En nähtävästi sittenkään osannut kertoa sille:”Jos kohtaat funktion, kulje ohi ja sano, ettet nähnyt mitään.”

Kehittämisehdotus tilastojen koostajalle: voisiko summarivi olla taulukon alussa? Esimerkiksi aina rivillä 1. Se ei ehkä näyttäisi yhtä hyvältä tai loogiselta kuin taulukon lopussa, mutta selkeyttäisi datan jatkokäsittelyä. Itse data otsikkoineen voisi alkaa aina samalta riviltä, vaikka viidenneltä. Lisäksi: vuosiluku omassa sarakkeessaan olisi mukava bonus! Tosin, ymmärrän hyvin, että jos sarakkeita aletaan lisäämään, se saattaa muuttaa tilastojen keräysprosessia. Vuosiluku kun nyt kuitenkin käy ilmi sekä tiedoston nimestä että taulukon alusta.

Google Motion Chart kirjastotilastoista olisi vieläkin mielenkiintoisempi, jos siinä olisi mukana kirjaston lisäksi muitakin elämänmuotoja. Hieno esimerkki löytyy Tiedonlouhintaa-blogista: viimeisimpien vaalien tuloksia voi tarkastella vaikkapa siltä kantilta, mikä on kunnan työttömyysaste.

Kuratointia

HS Open #2

HS Open kakkonen on huomenna, ja sinne olen minäkin menossa. Mielenkiintoinen päivä tulossa! Luupin alla ovat mm. eduskuntavaalit 2011. Rahoittajia löytyi, ehdokkaita oli, vaalit käytiin. Mitä muuta tästä spektaakkelista voi päätellä numeroiden valossa?

Lähdetään liikkeelle datasta.

Keskeistä aineistoa HS Open kakkosen Politiikka-ryhmälle ovat ehdokkaiden ilmoitukset kampanjoiden menoista ja ilmoitukset tukijoista. Arvokasta taustainformaatiota tuovat mm. YLE:n vaalikonetiedot.

Kaksi taulukkoa, kaksi omistajatahoa. Voiko taulukot yhdistää jonkin yhteisen, uniikin sarakkeen avulla? Ei voi, näillä tiedoilla. Mitään Vaaliehdokas-ID -avainta ei ole olemassa. Henkilötunnus tietysti kaikilla ehdokkailla on, mutta sitä ei saa julkaista eikä hyödyntää. YLE:n taulukkorivit (ehdokkaat) on yksilöity ID-numerolla, mutta se on taulukon tuottamisen sivutuote. Ehdokasnumero taas on vaalipiirikohtainen. Puoluerahoitusvalvonnan aineistossa ei ole mitään avainsaraketta. Tarvitaan siis yhteinen nimittäjä.

YLE:n aineistossa on mainittu ehdokkaista sukunimi ja kutsumaetunimi. Puoluerahoitusvalvonnan datassa taas sukunimi ja kaikki nimet, joista jokin on todennäköisesti kutsumanimi. Riittäisikö etu- ja sukunimen yhdistäminen avaimeksi? Ehkä ei, sillä kaimoja saattaa olla. Puolueen lyhenteen lisääminen perään olisi kai jo aika varmaa? Harmi, että lyhenne löytyy vain rahoitusdatasta, ei YLE:ltä.

Ajatus: lähes jokaisella ehdokkaalla vaikutti tällä kerralla olevan oma vaali-web-domain. Olisiko jonkun jossakin kannattanut tallentaa se?

Käytin yhteisen avaimen muodostamisen yrittämiseen useita tunteja. Lopputulos: ei tullut avainta, mutta tulipa kokemusta datan siivoamis- ja esitystyökaluista Google Refine ja Google Fusion Tables. Ynnä hämmennystä ja lievää manailua Google Docs -hipsuista ja muista yllätyksistä.

Google Refine

Google Refine (entinen Freebase Gridworks) on näpsäkkä työkalu. Esimerkiksi data.gov.uk on käyttänyt sitä omissa yhdistetyn avoimen datan hankkeissaan. Jeni Tennisonilta löytyy selkeäsanainen esitys aiheesta. Googlen pari omaa esittelyvideota kannattaa katsoa. Niillä pääsee hyvin alkuun.

Rahasummia tullaan laskeskelemaan ja vertailemaan. Niiden on siis syytä olla tietotyypiltään samanlaisia. Annoin Refinen lukufasetin (numeric facet) käydä läpi kaikki ne Puoluerahoitusvalvonnan taulukon sarakkeet, joissa oli rahasummia. Suurin osa oli tekstityyppiä, mutta joukossa oli myös numeerista dataa.

Valtavirrasta poikkeavat taulukon solut editoidaan. Kaikille tekstityypi, klik, done. Tällainen “masterdatan” muokkaaminen ei tietysti ole riskitöntä.

Taulukkolaskentaohjelmistot tarjoavat monenlaista vipstaakia datan sisäänlukuvaiheessa. Kokeilin, miten vahingossa mukaan livahtaneet hipsut ja ylimääräiset tyhjät merkit pystyy poistamaan. Pystyy, helposti.

Google Refine Expression Language (GREL) ymmärtää säännöllsiä lausekkeita. Alla poistetaan Etunimet-sarakkeen soluista lopun tyhjät merkit ja sulkeva hipsu.

Google Fusion Tables

Pinserissä oli muutama viikko sitten mainio salapoliisitarina iPhone-paikkadatasta. Siitä luin ensimmäistä kertaa näistä fuusiotauluista. Kätevä apu datan kääntelyyn ja katseluun eri kanteilta. Ja jos mukana on paikkatietoa – kuten Pinserin tapauksessa – ne esitetään automaattisesti karttanäkymässä. Taulukkoon voi tallentaa näkymiä, ja näkymiin edelleen suodatuksen ja ryhmityksiä.

Tein YLE:n vaalikonedatalle näkymän, jossa ovat ehdokkaista vain perustiedot kuten nimi, ikä, sukupuoli, puolue jne. Suodatin jäljelle vain ne rivit, jotka liittyvät valittuihin ehdokkaisiin. Ryhmitys keskimääräisen iän ja puolueen mukaan.

Erilaisten näkymien ja ryhmittelyjen määrittely data-aineistolle lähestyy pivot-taulujen filosofiaa. Excel ja OpenOffice Calc ovat tunteneet ne jo pitkään, ja aivan hiljattain niille tuli aito tuki myös Google Docsiin. Olen yksi heistä, joille pivotointi on vielä varsin vierasta. Tony Hirstin maanläheinen blogaus on auttaa alkuun.

Paikkatiedosta puheenollen, leikittelin jonkin aikaa ajatuksella, että saisin ennen HS Openia käsiini jonkin eduskuntavaaliehdokkaan, jolla olisi ollut iPhone mukana vaalityössä. Grand Plan: oletetaan, että hän olisi halukas antamaan Tieteen käyttöön viimeisen vaalityöviikkonsa paikkadatan. Oletetaan edelleen, että hän olisi liikkunut nimenomaan omassa vaalipiirissään iPhonensa kanssa. Miltä näyttäisi visualisointi, jossa olisivat mukana hänen liikkeensä ja hänen kyseisessä vaalipiirissä saamansa äänet? Voisiko tästä vetää minkäänsortin johtopäätöksiä vaalityön vaikutuksista äänestyskäyttäytymiseen? No, vastaus on tietysti että ei voi 🙂 mutta sormiharjoitteluna se olisi ollut mukava. Terveiset ja kiitokst Jyrki Kasville, joka tuli ensimmäisenä mieleen, kun mietin keneen ottaa yhteyttä. Hän oli tehnyt vaalityötä Eduskunnan Nokia E90:n kanssa, koska siinä oli työpaikan kalenteri. Muita en tähän hätään ehtinyt saada kiinni.

Google Docs

Suurin osa tästä aurinkoisesta viikonlopusta meni Google Docsin kanssa mähkiessä. Kuvittelin näet voivani rakentaa sen avulla puuttuvan lenkin rahoitusdatan ja YLE:n vaalikonedatan välillä.

Olin muodostanut Google Refine’n transform-vivulla molempiin taulukoihin ylimääräisen apusarakkeen HloID, ehdokkaan sukunimi ja ensimmäinen etunimi. Tavoite: kopioida sen avulla YLE-taulun ID myös toiseen tauluun. Silloin minulla olisi kunnon avain.

Lopulta onnistui, edes osittain (mutta ei oikealla aineistolla, josta kohta lisää), kiitos ahkeran googlaamisen ja ystävällisten Google Docs -foorumin vakioauttajien.

=QUERY('Sheet2'!A:C,"SELECT C WHERE A CONTAINS """&A361&""" ")

Tässä ollaan työkirjan lakanalla Sheet1, B-sarakkeen (tuleva ID) solussa B361. Samalla rivillä, A-sarakkeessa, on HloID. Saman työkirjan lakanasta Sheet2, sarakkeesta A, etsitään vastaavaa merkkijonoa. Jos löytyy, saman rivin sarakkeesta C haetaan arvo soluun B361.

QUERY-lauseke on tallennettu ensimmäiselle datariville. Solun oikeasta alanurkasta kiinni, ja lausekkeen kopiointi taulukon kaikille riveille. Suhteellinen viittaus A-sarakkeen soluun kasvaa samalla automaagisesti.

So far so good. Mutta. Varsinainen taulukko on niin iso, että Google Docs ei suostukaan lukemaan sitä samaan työkirjaan. No, tämän ei pitäisi olla ongelma, sillä myös kokonaan toisesta työkirjasta voi hakea, ainakin teoriassa.

=QUERY(IMPORTRANGE("0AvfW9KgU1XzhdHJSRFFwSGR3YWR6MVl3X0ZVWkhibUE","Sheet1!A:C"),"SELECT C WHERE A CONTAINS """&A361&""" ")

Pitkä älämölö on työkirjan yksilöivä avain. Sen näkee URL:sta.

Ei onnistunut. Google Docs oli joko sitä mieltä, että C-saraketta ei ole tai että hittiä ei löydy. Joissakin ohjeissa lakana ympäröitiin yksinkertaisilla hipsuilla, toisissa ei. Joissakin käytettiin puolipistettä välimerkkinä, toisissa pilkkua.

Nyt te varmaan sanotte, että “miksi ihmeessä mokoma vaiva, tauluthan voi yhdistää simppelisti tällä tavalla…” ja näytätte. Jään odottamaan.

EDIT 23.5: Järjestäjät olivat tehneet paljon duunia datan eteen. Aineisto oli siististi kantatauluissa, kanta LAMP-palvelimella ja palvelin Amazonilla. Kiitos tämän, päivän annista tuli hyvä. Porukassa oli osaajia monelta alalta, ja nopea protoilu sujui. Lahjakasta väkeä!

Taulukko tietokantana

Ulkomaan luontoretkillä on tullut tavaksi pitää listaa nähdyistä eläinlajeista. Taulukkoon nimi englanniksi ja latinaksi (jos tiedossa), paikka ja mahdollinen kommentti. En ole mikään listafriikki, mutta kirjaaminen helpottaa lajien ja tapahtumien muistamista.

Listoihin saattaa olla mielenkiintoa muillakin, joten olen muokannut niistä HTML-version verkkoon (sivun lopussa). Työnantaja on ollut joustava ja sallinut kohtuullisen määrän privaattia aineistoa webbipalvelimellaan. Se päivä on kuitenkin lähellä, että materiaali on syytä siirtää muualle. Webhotelli on mietinnässä muistakin syistä, mutta väliaikaisratkaisuna Google Docs on houkutteleva vaihtoehto.

Tony Hirst kertoo mainion havainnollisessa blogissaan, miten julkiseen Google-taulukkoon voi tehdä kyselyjä Google Visualisation API -kyselykielellä aivan kuin taulukko olisi verkossa oleva tietokanta. Kieli muistuttaa SQL-kyselykieltä. Tulosjoukon saa JSON-, CSV- tai HTML-muodossa.

Alkuperäiset taulukot ovat läppärillä Excel-tiedostoina. Toin Perun matkan lakanan Import-toiminnolla Googlelle, ja aloin leikkiä hakukielellä:

kaikki lajit, jotka näin Manu Wildlife Centerissä (MWC)
. Ei aakkostusta, ja taulukon sarakkeille A-D ymmärrettävämpi label

kultapyrstöt (oropendola) aakkosjärjestyksessä

kaikki rivit ensimmäistä lukuunottamatta, koska sen ensimmäisessä solussa ovat yhtenä pötkönä paikkalyhenteiden selitykset

So far so good, mutta vielä riittää duunia. Ensimmäisellä rivillä oleva tieto pitää saada käyttöön, samoin linkit latinalaisesta nimestä Wikipediaan.