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

lauantai 11. toukokuuta 2013

Verkostovisualisointi gone wrong

Ensinnäkin täytyy kiittää ja onnitella Helsingin Sanomia ja Tuomas Peltomäkeä todella hienosta jutusta koskien eduskunnassa kuultavina olleita tahoja, joka perustui itse hankittuun dataan. Tämä on juuri sen kaltaista datajournalismia, jonka parissa toivoisin itsekin viettäväni enemmän aikaa. Tähän kuitenkin loppuvat tällä erää kiitokset sillä haluan keskittyä muutamaan epäkohtaan, jotka havaitsin jutun verkkoversion yhteydessä julkaistusta verkostovisualisoinnista.

Aluksi kuitenkin muutama huomio verkostoanalyysistä yleisesti.

Verkostoanalyysi on visualisointikeino, joka mahdollistaa ja jolla voidaan kuvata asioiden (solmu, node) välisiä yhteyksiä (edge, yhteys). Verkostoanalyysilla voidaan kuvata esimerkiksi Facebook:ssa olevien käyttäjien välisiä kaverisuhteita. Verkostoanalyysin avulla on siis mahdollista visualisoida millä tavalla Facebook-kaverini ovat kavereita keskenään. Kuvassa 1 nähtävästä verkostovisualisoinnista, jossa solmut ovat Facebook-kavereitani, voidaan lukea mm. että:
  • Sukulaiseni ovat Facebook:ssa keskenään kavereita, mutta eivät juuri ole kavereita muiden kavereitteni kanssa.
  • Muutamat yliopistokaverini ovat kavereita lapsuuden kavereitteni kanssa, mutta pääosin näiden ryhmien jäsenet ovat kavereita vain keskenään.
  • Muutamilla minulle keskeisimmät ihmiset ovat kavereita kaikkien verkostossa nähtävien pääryhmien kanssa.

Parhaimmillaan verkostovisualisointi on erittäin tehokastyökalu asioiden välisten yhteyksien ymmärtämisessä. (Kuva 1)
Verkostovisualisointeja on karkeasti mahdollista manipuloida kolmella eri tavalla, jotka ovat:
  • Ladonta-algoritmi
  • Solmun koko
  • Yhteyden voimakkuus
Mahdollisia ladontatapoja ovat mm. paino-ohjattuladonta kuten Force Atlas ja spatiaalinen ladonta, joka voi perustua esimerkiksi geokoordinaatteihin. Solmun koko taas voidaan määritellä esimerkiksi solmuun tulevien yhteyksien määrällä tai se voidaan esimerkiksi määrittää asukasluvun perusteella jos yksittäisen solmu kuvaa valtiota. Solmujen välinen yhteys voi olla joko nolla, yksi tai jokin lukuarvo. Eli toisin sanoen joko yhteyttä ei ole, yhteys on olemassa tai sitten yhteydellä on jokin arvo, joka kuvaa yhteyden voimakkuutta suhteessa muihin yhteyksiin. Yhteys voidaan määritellä myös suunnattuna tai suuntaamattomana.

Esimerkiksi edellisessä Facebook-esimerkissä yhteys on suuntaamaton, koska yksisuuntaiset kaveruussuhteet eivät ole Facebook:ssa mahdollisia (ainakaan teknisessä mielessä). Twitter-seuraajia visualisoitaessa yhteydet taas ovat suunnattuja, koska Twitter:ssä käyttäjän ei tarvitse seurata toista, jotta toinen voi seurata häntä.

Mikä sitten meni vikaan Helsingin Sanomien julkaisemassa verkostovisualisoinnissa. Se, että se ei noudattanut verkostovisualisointien lainalaisuuksia vaan siinä oli tehty visualisointiteknisiä ratkaisuja graafisin perustein. Minulle verkostoanalyysia ja verkostovisualointeja tehneenä tämä tarkoittaa samaa kuin, että pylväsdiagrammista leikattaisiin pala pois, jotta visualisoinnista saataisiin graafisesti miellyttävämmän näköinen tai paremmin luettava. Kuvassa 2 nähdään erittäin banaali esimerkki pylväsdiagrammista, joka on visualisointiteknisesti pielessä, koska arvon 900 omaavan pylvään tulisi olla korkeampi kuin arvon 700 omaava pylväs.
Pylväsdiagrammissa pylvään korkeuden mielletään kuvaavaan asian suuruutta eikä kyseisen kaltainen pylväiden esitystapa ole siten luonnollinen. (Kuva 2)
Facebook:n Finnish Open Data Ecosystem ryhmässä keskusteltiin kyseessä olevasta Helsingin Sanomien jutusta ja sen yhteydessä käytetystä datasta sekä tehdystä visualisoinnista. Toivomuksena keskustelussa oli, että kerätty data pistettäisiin avoimesti jakoon. Peltomäki ei ollut kuitenkaan valmis suoraan valmis jakamaan dataa vaikka toteutus olikin julkaistu CC-lisenssillä.

Käydystä keskustelusta innostuneena päätin kaivaa datan suoraan toteutuksesta, jotta halukkaat voisivat sitä käyttää. Kaivoin siis verkostovisualisoinnissa käytetyn datan suoraan toteutuksen lähdekoodin uumenista. Toteutuksessa käytetty data oli .json-formaatissa, joka oli toteutuksessa käytetyn Sigma.js:n käyttämä formaatti ja jotta datalle oli mahdollista tehdä mitään järkevää jatkojalostusta oli se siis muunnettava johonkin toiseen formaattiin.

Itselleni luontevin tavoitetila oli .gexf-formaatti, koska tällöin data oli mahdollista avata Gephi-verkostovisualisointityökalussa. "Reverse engineerasin" datan siis verkostoformaattiin, jossa itseasiassa luulen datan alunperinkin olleen ennen sen muuntamista .json-formaattiin, koska itse toteutus näytti hyvin paljon Gephi:n Sigma.js-lisäosalla toteutetulta. Sinällään molemmat tiedostomuodot (.json ja .gexf) ovat muodoltaan hyvin rakenteisia ja kuvaavat erikseen solmut ja erikseen niiden väliset yhteydet, joten muuntaminen onnistui käytännössä muutaman etsi-korvaa komennon avulla.

Avattuani muuntamani datan (.gexf) Gephi:ssä minua alkoi kuitenkin ihmetyttämään miten en saanut aikaan samankaltaista lopputulosta kuin se, joka oli nähtävissä Helsingin Sanomien toteutuksessa. Tutkittuani numeroita tarkemmin huomasin, ettei toteutuksessa olleet visuaaliset komponentit kuten solmujen koko määräytynytkään niin kuin olin ajatellut. Oletin, että solmun koko olisi määräytynyt kuulemiskertojen mukaan ja juteltuani kollegoitteni kanssa oli tämä ollut myös heidän tulkintansa visualisoinnista.

Jutussa mainittiin, että Elinkeinoelämän keskusliittoa oli kuultu useimmin, yhteensä 1 761 kertaa. Alkuperäisen visualisoinnin perusteella seuraavaksi eniten oli kuultu Suomen Yrittäjiä, yhteensä 927 kertaa. Kuitenkin visualisoinnissa nämä kuvattiin noin samankokoisina solmuina vaikka kuulemiskertoja EK:lla on siis yli kaksi kertaa vähemmän. Samalla huomasin, että visualisoinnissa valionkunnat oli normalisoitu samankokoisiksi solmuiksi riippumatta niiden kuulemiskertojen määrästä. Enimmillään valiokuntia oli kuultu yhtä monta kertaa kuin EK:ta eli n. 1 700 kertaa. Toteutuksessa oli siis haluttu korostaa ulkopuolisten tahojen kuulemisia.

Keskusteltuani Peltomäen kanssa sain selville myös, että verkostosta oli rajattu pois ne kuultavat joita oli kuultu vähemmän kuin 50 kertaa (tämä kerottiin myös visualisoinnin lisätietoja kohdassa). En kuitenkaan saanut selville mitä muuta verkostosta on rajattu pois, koska jos tämä olisi ollut ainoa rajaus olisivat käsitykseni mukaan jäljelle jääneiden kuultavien kaikki kuulemiskerrat olleet edelleen mukana verkostossa.

Näin ei kuitenkaan ollut vaan jutussa mainittujen kuulemiskertojen määrä ei täsmännyt kuultavista lähteneiden yhteyksien määrään. Esimerkiksi visualisoinnin mukaan Finnet-liitto ry:tä on kuultu 59 kertaa, mutta tämä määrä ei vastaa verkostossa nähtäviin kuulemiskertoihin eli solmusta lähteneiden yhteyksien määrään.

Verkostosta ei ollut siis luettavissa yksittäisen kuultavan kaikkia kuulemiskertoja, joka kertoo minulle, että verkostosta oli täytynyt tiputtaa pois myös lakialoitteita, joissa kuulemisia on tapahtunut. Yritin selvittää Facebook-ryhmän keskustelussa taustoja näihin epäselvyyksiin, mutta en jankkaamisenkaan jälkeen saanut tyhjentäviä vastauksia.

Verkostovisualisoinnit ovat lähtökohtaisesti monille vaikealukuisia ja hankalasti hahmoteltavia, koska ne eivät ole meille tuttuja, mutta niiden helpompaa tulkintaa ei tulisi kuitenkaan lähteä ohjaamaan puhtaasti graafisin perustein, koska tällöin niiden tulkinta tulee mahdottomaksi tavallisen kansan lisäksi myös ammattilaisille jollaiseksi nyt tässä itseni omahyväisesti lasken.

Miten sitten esimerkiksi tässä tapauksessa oli kannattanut toimia, jotta verkostosta oltaisiin saatu helpompilukuinen ja samalla pidetty kiinni siitä, että ei määriteltäisi verkoston muuttujia joillakin muilla kuin matemaattisilla perusteilla. Itse olisin lähestynyt ongelmaa siten, että olisin romahduttanut verkoston "yksinoodiseksi".

Nyt toteutuksessa oli mukana kahdenlaisia solmuja. Ensinnäkin verkostossa olivat mukana eduskunnassa kuultavina olleet tahot ja toiseksi lakialoitteet joissa kuulemiset olivat tapahtuneet. Yhteyksiä solmujen välillä oli vain eri tyyppisten solmujen välillä eli kuultavina olleista lähti yhteyksiä lakialoitteisiin. Kuultavina olleet solmut tai lakialoitteet eivät olleet suoraan yhteydessä toisiinsa. Toisin sanoen lakialoitteet solmivat yhteen eri kuultavina olleet tahot.

Verkosto olisi siten ollut mahdollista romahduttaa valitusta kaksinoodidesta esitystavasta yksinoodiseksi niin, että verkostoon olisi piirretty vain kuultavina olleet tahot ja yhteydet näiden välille olisi piirretty sen perusteella miten tahot olivat olleet kuultavina samoissa lakialoitteissa. Näin tieto siitä missä lakialoitteissa kukin taho oli ollut kuultavana olisi koodattu yhteyksiin eikä erillisiin solmuihin.

Tämä esitystapa olisi myös paljastanut verkostoteknisesti selkeämmin mitkä tahot ovat sellaisia, että heitä molempia kuullaan kun eri lakialoitteita valmistellaan ja toisaalta mitkä tahot ovat sellaisia, että he ovat lakialoitteissa ainoita kuultavana olevia. Tässä esitystavassa ainoat kuultavina olevat tahot olisivat piirtyneet verkoston reunoille kun runsaasti kuultavina toisten tahojen kanssa olisivat piirtyneet verkoston ytimeen. Näin siis etenkin kun verkosto olisi ladottu painovoimaohjatusti.

Vaikka siis verkostovisualisoinnit ovat viehättävännäköisiä ja usein niitä tulkitaan enemmänkin suurella kunnioituksella kuin asiantuntijuudella tulisi niitä toteuttaessa olla yhtä tarkka tiedon oikeellisuudesta kuin muidenkin visualisointitekniikoiden kanssa.

Toivottavasti tämä herättää keskustelua ja lopputuloksena on edelleen entistä parempaa (data)journalismia, joka varmasti kaikkien etu. Toivottavasti saamme myös alkuperäisen datan jossain vaiheessa aktiivisesti jakoon avoimena datana kuten eduskunta on ilmeisesti luvannut, jotta me kansalaiset pääsemme siitä nauttimaan.

Muokkaus 13.5.2013 klo 18:58

Lisätty linkki .gexf-muotoiseen dataan, joka on siis tuotettu HS:n toteutuksen .json-tiedostosta.

maanantai 25. kesäkuuta 2012

#SuomiTop100-ilmiö

Keskiviikkona 20.6. suomalaisessa Twitterissä alkoi kuohua (Kuva 1). Niku Hooli ja Antti Hirvonen olivat Foreign Policy -lehden esimerkin innoittamina ryhtyneet joukkoistamalla keräämään listaa 100:sta suomalaisesta tai Suomessa vaikuttavista Twitter-aktiivista.

@suomitrendit on suosittuja suomalaisia hashtageja twiittaava Twitter-tili. (Kuva 1) 

Nopeasti, aiheesta hashtagilla #SuomiTop100 keskustelleiden keskuudessa, kasvoi tarve ilmentää ilmiötä visualisoinnin keinoin ja keskiviikkoiltapäivällä sainkin useampia vihjailuja (1, 2, 3) asiaa koskien. Sinällään ongelma oli, etten ennen ollut kerännyt Twitteristä dataa hashtageihin perustuen, joten jouduin hieman improvisoimaan lähtiessäni toteuttamaan tarvetta täyttävää visualisointia. Aikaisemmat Twitter-pohjaiset visualisointini ovat perustuneet yksittäisten Twitter-tilien seuraajien ja seurattavien visualisointiin. Sain kuitenkin nopeasti aikaan ensimmäisen version #SuomiTop100-hashtagin maininneiden käyttäjien keskinäisestä verkostosta (Kuva 2).

Verkostossa on 66 solmua (keskustelijaa) ja 744 yhteyttä (seuraa tai on seurattavana). (Kuva 2)

Verkostossa ovat siis mukana #SuomiTop100-hashtagin Twitterissä maininneet henkilöt, eivät listalla olleet tai sinne päätyneet, joskin toki osa asiasta keskustelijoista listalle myös päätyi. Toteutus oli kuitenkin siinä määrin nopeasti kasattu, että en ehtinyt huomioimaan mm., että versioon tulivat mukaan vain hashtagin 100 viimeisintä twiittiä eikä data siten ollut täydellistä.

Mitä tästä kuvassa 2 näkyvästä verkostosta pystyttiin kuitenkin jo näkemään oli, että aiheesta keskustelleiden verkosto on hyvin tiheä. Näytti siis siltä, että asiasta keskusteltiin ns. kaveriporukassa toisensa tuntevien ihmisten kesken. Sain kuitenkin siinä määrin palautetta ihmisiltä, jotka olivat asian maininneet, mutta eivät verkostosta löytyneet, että keskiviikkoiltana toteutin twiittien hakuskriptistä parannetun version.

Torstaina 21.6. aamulla julkaisin päivitetyn toteutuksen #SuomiTop100-hashtagin maininneiden verkostosta. Tällä kertaa luulen saaneeni mukaan todella kaikki asiasta keskustelleet ja heidän väliset yhteydet. Ainakin datan määrä kasvoi merkittävästi ja näytti oikeammalta twiittien määrään nähden (>500). Verkoston rakenteeseen tämä päivitys ei kuitenkaan juuri tuonut muutosta. Edelleen näytti siltä, että asiasta kiinnostuneet eli asiasta keskustelleet ovat myös kiinnostuneet keskenään toisistaan (Kuva 3).

Verkostossa on 284 solmua (keskustelijaa) ja 10556 yhteyttä (seuraa tai on seurattavana).  (Kuva 3)

Kuvissa 2 ja 3 näkyvien verkostojen rakenteen ja värityksen merkitystä on kuvattu mm. aikaisemmassa viestissäni: "Twitter-verkostoanalyysia Gephi:llä". Lyhyesti kuvattuna ihmiset asettuvat verkostossa lähelle niitä ihmisiä, jotka seuraavat toisiaan ja värit on asetettu verkostosta matemaattisesti tunnistettujen ryhmittymien mukaan. Solmun eli henkilöä kuvaavan pallon koko määräytyy sen mukaan miten keskeinen hän on verkoston kannalta. Latasin myöhemmin torstaina myös interaktiivisen version kuvassa 3 nähtävästä verkostosta ja annoin hakemani datan verkostomuodossa (.gexf) jatkokäsiteltäviksi siitä kiinnostuneille.

Torstaina iltapäivällä lopullinen lista julkistettiin YLE Uutisten toimesta. Laskin, että listalle päätyneistä ihmisistä 13% (37/284) osallistui aiheeseen liittyvään keskusteluun. Aiheesta keskustelleet löytyvät oheisesta .csv-tiedostosta, joka on mahdollista avata esimerkiksi Excelissä. Keskustelleet, jotka päätyivät myös listalle löytyvät tästä Google Fusion Tables -taulukosta.

Myös muut olivat aktivoituneet asian tiimoilta ja tehneet analyysia ilmiöstä. Mm. MikroPC:stä tuttu Ossi Jääskeläinen oli rakentanut PHP-ohjelman, jolla hän oli hakenut listalle päätyneiden numeeriset metatiedot (twiittejä, seuraajia, seurattavia, listojen jäsenyyksiä, omia listoja). Ossi tarjosi datan .csv-muodossa vapaasti käytettäväksi ja tästä innoittuneena aktivoiduin myös tämän osalta tekemään hieman visualisointityötä.

Toteutin D3.js kirjaston tarjoamaan Parallers Coordinates esimerkkiin perustuen visualisoinnin, jonka avulla on mahdollista tutkia korreloivatko #SuomiTop100-listalla olevien numeeriset ominaisuudet, jollain tavalla. Onko esimerkiksi niin, että twiittauksien määrä on suoraan verrannollinen käyttäjän seuraajien määrään tai ovatko käyttäjät, jotka itse käyttävät listoja todennäköisimpiä myös itse päätymään niille. (Kuva 4)

Suurin hajonta lopullisen #SuomiTop100 listan jäsenissä syntyy numeerisesti twiittien määrässä. Avaa visualisointi. (Kuva 4)

Kuten kuvasta 4 nähdään muutamat käyttäjät sokaistavat visualisoinnin melko tehokkaasti. Esimerkiksi Heikki Kovalaisen yli 150 000 seuraajaa on Suomen tasolla siinä määrin poikkeuksellinen määrä, että muut vain n. 1000 seuraajaa omaavat eivät erottaudu akselilla. Olisi ollut mahdollista toteuttaa hieman monipuolisemmat ominaisuudet omaava toteutus visualisoinnista, mutta päädyin helpompaan ratkaisuun ja poistin datasta manuaalisesti nämä muumat käyttäjät (@Haloefekti, 94 502 twiittiä @H_Kovalainen, 154 445 seuraajaa; @ptarkkonen, 108 793 seurattavaa), jotka omaavat suurimmat ääriarvot. Tällä ei kuitenkaan merkittävää vaikutusta ollut vaan data ilmentyi edelleen visualisoinnissa samankaltaisesti eikä kovinkaan merkittäviä korrelaatioita numeeristen ominaisuuksen välillä löytynyt. Listalle päätyneet suomalaiset Twitter-vaikuttajat ovat numeroiden valossa hyvin samankaltaisia. (Kuva 5)

Vaikka listalta poistetaan äärimmäisimmät käyttäjät ei data esiinny juurikaan erilaisempana. Avaa visualisointi. (Kuva 5) 

Toteuttamani verkostovisualisoinnit #SuomiTop100-hashtagin maininneista keskustelijoista aiheutti myös muutamia epäselvyyksiä. Visualisoinnin luultiin olevan tehty lopulliselle listalle päätyneiden keskinäisestä verkostosta (1, 2, 3). Tätä väärinkäsitystä jouduin oikomaan muutamaankin otteeseen ja lisätäkseni hämmennystä toteutin nyt jälkikäteen myös verkoston tästä listalle päätyneiden keskinäisestä verkostosta (Kuva 6). Verkosto löytyy myös interaktiivisena versiona ja data on saatavilla .gexf-muodossa.

Listalle päätyneet ovat keskenään tiiviisti verkostoituneita Twitterissä. (Kuva 6)

Kuten kuvassa 3 nähtävä #SuomiTop100-aiheesta keskustelijoiden verkosto on kuvassa 6 nähtävä lopulliselle listalle päätyneiden verkosto hyvin tiivis. Ainoastaan, pääosin urheilijoista ja urheiluvaikuttajista koostuva, joukko vasemmalla erottuu selkeästi omaksi saarekkeekseen. Yhteensä kuvassa 6 nähtävässä verkostossa on 100 solmua ja 3296 yhteyttä. Verkoston keskeisin henkilö on Tuija Aalto, joka myös seuraa eniten verkostossa olevia henkilöitä (96). Tuija myös kiinnostaa, koska 99:stä mahdollisesta häntä seuraa 64 verkoston jäsentä. Muut verkoston keskeisimmät henkilöt ovat järjestyksessä Mikael Jungner, Jyrki Kasvi ja Mikko Hyppönen.

Tässä oma näkökulmani #SuomiTop100-ilmiöön, joka vavisutti mielipiteitä näin juhannuksen alla puolesta ja vastaan.

Tässä viestissä jaetut datasetit ovat lisensoitu Nimeä-Tarttuva (CC BY-SA).

sunnuntai 27. toukokuuta 2012

Hyvinkään ampumistapaus

Hyvinkäällä perjantain ja lauantain välisenä yönä tapahtuneen ampumistapauksen jälkipuinti on eri medioissa ollut tilanteelle ominaisen aktiivista. Tuttuun tapaan myös erilaiset keskustelupalstat ovat täyttyneet aiheeseen liittyvästä keskustelusta. Esimerkiksi Muropaketti-foorumi on nyt ja aikaisemmien tapauksien yhteydessä täyttynyt aktiivisesta keskustelusta. Lisäksi Twitter on nostanut arvoaan suomalaisten tapahtumien tiedonhaun välineenä. #Hyvinkää-hashtagia käytettiin aktiivisesti ja esimerkiksi @tuomaspeltomaki:n Twitter-tilistä sai ajantasaisimman tiedon koskien Poliisin lauantaiaamuna järjestämää tiedotustilaisuutta.

Epäillyn ja uhrien nimet sekä taustat ovat siis olleet nettikansan tiedossa jo pitkään. Poliisi itsessään ei ihmisten henkilöllisyyksiä paljasta vedoten yksityisyyden suojaan ja muihin teknisiin perusteisiin. Uteliaita ihmisiä on kuitenkin vaikeaa estää pääsemästä heitä kiinnostavan tiedon äärelle kun ihmisten etsiminen netin avulla on niinkin yksinkertaista ja nopeaa. Petteri Järvinen otti asiaan kantaa eilen blogissaan otsikolla "Netti tietää sen, mitä poliisi ei kerro".

Itsekin Googletin tämän valtamedioissa mainitun ja käsitellyn epäillyn julkisen Facebook-profiilin, koska halusin tehdä verkoston hänen kaveripiiristään. Lataushetkellä hänellä oli kavereita 64, joten katoa on käynyt, koska enimmillään kavereita on lukemani perusteella ollut lähempänä tai yli 100. Tein kuitenkin analyysin jäljellä olevien kavereiden välisistä yhteyksistä. (Kuva 1)

 Epäillyn Facebook-kaveriverkosto on tiheä, josta voidaan päätellä, että he ovat kaikki samasta fyysisestä ympäristöstä. Miehet (89%) kuvattu sinisellä ja naiset (11%) punaisella. (Kuva 1)

Ajattelin, että olisi mahdollista, että epäillyllä olisi jokin ns. normaalin koulukaveriympäristön ulkopuolinen kaveriryhmä, joka voisi selittää hänen käyttäytymistään jollain tavalla. Näin ei kuitenkaan ollut vaan henkilön Facebook-kaverit ovat verkostoituneet toistensa kanssa keskenään tiheästi eikä vahvaa ryhmäytymistä ole havaittavissa. (Kuva 1)

Visualisoinnin ja aikaisempien kokemuksieni perusteella voin tehdä oletuksen, että henkilön kaverit ovat näin ollen samasta fyysisestä ympäristöstä ja tuntevat toisensa. Toisin sanoen epäilty tuskin on muuttanut nuoruutensa aikana paikkakunnalta toiselle tai muuten ollut tekemisissä kovinkaan paljon kotipaikkakuntansa ulkopuolisten ihmisten kanssa. Facebook-kaveriverkosto ei myöskään anna kuvaa siitä, että henkilöllä olisi kovinkaan paljon esimerkiksi netin kautta hankittuja ystäviä, koska he erottuisivat verkostossa useampina yksittäisinä pisteinä. Nyt 64:n kaverin joukossa on kuusi henkilöä, jotka eivät ole epäillyn muiden kavereiden kanssa kavereita.

Näillä mietteillä mielenrauhaa kaikille.

lauantai 19. toukokuuta 2012

Verkostoanalyysiä televisiossa

Viime viikolla esitetyssä Spotlight-ohjelmassa (nähtävissä Yle-Areenassa kuukauden ajan) käsiteltiin suomalaisten poliitikkavaikuttajien kytköksiä äärijärjestöihin (Kuva 1). Ohjelmassa olivat esillä etenkin Perussuomalaispoliitikkojen kytkökset Finnish Defence League:en (FDL), joka on English Defence League:n (EDL) suomalainen alijärjestö. Ohjelma on osa juttusarjaa, joka käsittelee islaminvastaisten järjestöjen toimintaa, jota Spotlight:n lisäksi tekemässä on myös Silminnäkijä. Aihe on tällä hetkellä ajankohtainen ja keskustelua herättävä.

Spotlight on tutkivan journalismin ajankohtaisohjelma, jota lähetetään Yle Fem -kanavalla torstaisin. (Kuva 1) 
Ohjelmassa tietoa Perussuomalaispoliitikkojen ja FDL:n yhteyksistä etsittiin erityisesti Internetistä kerättyjen tietojen avulla. Etenkin Facebook:sta kerätyt tiedot olivat keskeisessä osassa, mutta Perussuomalaisia FDL:ään liittävää materiaalia kerättiin myös blogeista ja muista Internetlähteistä.

Olin mukana ohjelman tekemisessä toteuttaen ohjelmassa nähtävät verkostovisualisointigrafiikat. Visualisoinnit on toteutettu Gephi-ohjelmistolla ja data niihin on kerätty Facebook:sta. Toteutettuja verkostoja käytettin itse ohjelmassa lähinnä inserttigrafiikkana (Kuva 2), mutta niitä hyödynnettiin intensiivisesti ohjelmanteon aikana. Verkostoanalyysejä tulkitsemalla oli mahdollista nähdä kuinka keskenään verkostoitunut tutkittava joukko Facebook:ssa oli. Verkostoanalyysin voima sosiaalisten suhteiden tulkitsemisessa on vahva.

Verkostoanalyysia käytettiin ohjelmassa taustagrafiikkana. Televisiossa monimutkaisten verkostojen yksityiskohtainen käsitteleminen olisikin vaikeaa. (Kuva 2) 
Tämä on ensimmäisiä kertoja kun suomalaisen televisio-ohjelman toteutuksessa on käytetty  verkostoanalyysiä (kuulen mielelläni jos vastaavanlaisia toteutuksia on ollut aiemmin). Kiitos tästä kuuluu Marko Hietikolle, joka rohkeasti lähti asiaa viemään eteenpäin ja oli kiinnostunut tekemään yhteistyötä eri osaajien kanssa.

Teknisesti taustatyö tehtiin jo mainitulla Gephi-ohjelmistolla (Kuva 3), jonka käyttöä Facebook-verkostojen toteuttamisessa on kuvattu aikaisemmassa viestissä: "Facebook-verkostojen visualisointi". Gephi:stä TV-ruudulle visualisoinnit vietiin kuvan- ja ruudunkaappausohjelmistojen avulla. Esimerkiksi Silverback-ohjelmisto osoittautui tässä loistavaksi työkaluksi. Lopullinen stilisointi, kuten Spotlight:n graafisen ilmeen lisääminen, työstettiin yhteistyössä graafikon kanssa.

Verkostovisualisoinnista voitiin nähdä kuinka keskenään verkostoitunut tutkimuksen alla oleva joukko ihmisiä Facebook:ssa oli. Ohjelmassa käsitellyt henkilöt merkitty punaisella. (Kuva 3)
Olisi mielenkiintoista antaa ohjelman tekoa varten kerätty raakadata ja toteutetut visualisoinnit laajemminkin jakoon, mutta yksityisyyteen ja muihin tekijöihin liittyvistä syistä tämä ei ainakaan nyt ole mahdollista.

lauantai 31. maaliskuuta 2012

Facebook-verkostojen visualisointi

SPOILER: tämä postaus käsittelee teknistä sanastoa.

Innostuin tällä viikolla tutkimaan miten Facebook-verkostoja olisi mahdollista kerätä ja visualisoida vastaavalla tavalla kuten olen aikaisemmin visualisoinut Twitter-verkostoja sekä keitä @TuomasEnbuske seuraa. Enemmän tai vähemmän tunnetusti Facebook on kitsaampi jakamaan tietojaan Graph-rajapintansa kautta kuin mitä Twitter oman rajapintansa kautta, mutta rohkaistuin kuitenkin yrittämään tehtyäni ensin Olli Parviaisen kanssa kansanedustajien kaveruusverkoston sekä nähtyäni miten Jens Finnäs oli onnistunut tekemään vastaavanlaisen toteutuksen Ruotsin parlamentista.

Graph-rajapinta


Facebook:lla on siis olemassa Graph-niminen rajapinta, joka mahdollistaa Facebook-datan käsittelyn koneellisesti. Lähinnä rajapinta on varmasti tarkoitettu erilaisille Facebook-applikaatioille, mutta sitä on mahdollista käyttää myös muuten. Yksinkertainen Graph-rajapintakysely, joka palauttaa halutun käyttäjän (tässä tapauksessa allekirjoittaneen) tiedot (kuten ID, sukupuoli, nimi, jne.) voidaan suorittaa syöttämällä seuraava osoite selaimeen:

graph.facebook.com/teelmo.

Rajapintaa voidaan kutsua yhtälailla käyttäjän käyttäjänimellä kuin Facebook:n käyttäjä-ID-arvolla. Toisin sanoen kysely:

graph.facebook.com/635279474,

tuottaa saman vastauksen. Tiedot ovat haettavissa Graph-rajapinnan kautta kenestä tahansa Facebook-profiilista huolimatta siitä miten suljettu tai avoin profiili on. Rajapinnalta on mahdollista kysyä myös monia muita asioita, mutta esimerkiksi satunnaisen käyttäjän Facebook-kavereiden hakeminen ei ole mahdollista edes vaikka olisit kyseisen käyttäjän kaveri. Muiden kuin itsensä kavereiden hakeminen onnistuu rajapinnan kautta jos käyttäjä on sallinut tietojensa jakamisen applikaatiolle, jonka ylläpitäjä olet. Omat Facebook-kaverit rajapinnan kautta saa haettua.

Python + MongoDB = voitto


Kuten edellä näytettiin on Graph-rajapintaa mahdollista selata käsipelillä selaimen avulla, mutta käsiteltäessä suurempia datajoukkoja tulee tiedon keräämisestä tällä tavoin raskasta. Näin ollen erinäiset ohjelmointikielet ja niillä rakennetut scriptit eli lyhyet kertaalleen ajettavat ohjelmakoodit tulevat apuun. Käytetyllä ohjelmointikielellä ei ole suurta merkitystä vaan valinta kannattaa tehdä sen pohjalta, joka on itselle tutuin ja luontevin. Hyviä vaihtoehtoja kuitenkin ovat ainakin Python, Ruby ja Facebook:n tapauksessa etenkin PHP, koska suurin osa Facebook:n koodiesimerkeistä on kirjoitettu sillä. Itse valitsin kuitenkin Pythonin, koska halusin jatkojalostaa omaa Python osaamistani.

Pythonille löytyy useampia Facebook Graph API -kirjastoja, mutta ainakin pyFaceGraph-nimisen kirjaston avulla Graph-rajapinnan käyttö on todella yksinkertaista. Tässä yksinkertainen koodin pätkä, joka hakee käyttäjän tiedot kirjaston avulla jos käyttäjän tietoja ei ole jo aikaisemmin haettu ja tallennettu tietokantaan.

>>> from facegraph import Graph
>>> g = Graph()
>>> ...
>>> username = 'teelmo'
>>> # Check that username is not already in MongoDB
>>> if not users.find({"data.username": fusername}).count():
>>>    user = g[username]()
>>>    print user.id
'635279474'

Tietojen tallentamisessa hyödynsin MongoDB:tä, joka on NoSQL-tietokanta. MongoDB soveltuu käytettäväksi tämänkaltaisissa scripteissä, jotka hakevat tietoa netistä, koska tiedon eheydestä eikä rakenteesta tarvitse välittää samalla tavalla kuin käytettäessä esimerkiksi MySQL:ää tai muuta SQL-pohjaista tietokannanhallintajärjestelmää. MongoDB hyödyntää tiedon tallentamisessa JSON-formaattia, joka on myös formaatti, jossa Graph-rajapinta palauttaa hakutulokset.

Kuvassa 1 nähdään miten scripti hakee annettujen käyttäjien tietoja Graph-rajapinnalta. Tässä tapauksessa suurin osa haettavista käyttäjistä on jo aikaisemmin noudettu lokaaliin tietokantaan, mutta yhden käyttäjän osalta tiedot haetaan Graph-rajapinnasta.

Pythonilla ja MongoDB:llä toteutettu keräin, joka hakee annettujen käyttäjien tiedot Facebookin Graph-rajapinnasta. (Kuva 1)
Facebook:n Graph API ei rajoita tietojen hakemista samalla tavalla kuin Twitter (150 pyyntöä tunnissa), mutta satunnaisesti joitain virheitä esiintyy. Ongelmatilanteissa auttaa kun tiedot tallennetaan lokaalisti MongoDB:hen eikä tietojen hakemista tarvitse siten aloittaa ongelmatilanteissa alusta.

Käyttäjien tiedot kyllä, mutta miten yhteydet?


Graph-rajapinnan tarjoamat toiminnallisuudet on listattu täällä. Rajapinnan avulla saadaan siis kysyttyä suoraan mm. käyttäjien, tapahtumien ja sivujen tietoja. Käyttäjien välisiä yhteyksiä, tapahtumaan osallistujia tai sivujen tykkääjiä ei rajapinnan perustoiminnallisuuksilla kuitenkaan saa haettua.

Apuun tulee kuitenkin Graph-rajapintaa laajentava Facebook Query Language (FQL). FQL mahdollistaa Graph-rajapinnan kautta saatavien tietojen hakemisen SQL:n kaltaisella kyselykielellä. Esimerkiksi Facebook:n käyttäjä-ID:tä vastaava käyttäjänimi on mahdollista hakea seuraavalla kyselyllä:

SELECT username FROM user WHERE uid = 635279474

Käyttäjien välisten kaveruussuhteiden kyseleminen on mahdollista friend-taulusta. On huomioitavaa, että kaveruussuhteita on mahdollista kysyä myös sellaisten käyttäjien välillä, jotka muuten ovat piilottaneet profiilinsa. FQL:ää on mahdollista kokeilla erityisellä Graph API Explorer -työkalulla. FQL:n käyttäminen edellyttää OAuth-tunnistautumista ja ns. "Access token" täytyy välittää kyselyiden mukana.

Toteutin myös yhteyksien hakemisen Python-scriptillä. Apuna käytin Pythonille löytyvää requests-kirjastoa. Tässä yksinkertaisuudessaan ja lyhykäisyydessään FQL-kyselyn toteuttava koodinpätkä:

>>> import requests
>>> ...
>>> fql_query = "SELECT uid2 FROM friend WHERE uid1 = 635279474 and uid2 = %d" % uid2
>>> fql = "/fql?q=%s&access_token=%s" % (fql_query, access_token)
>>> try:
>>>    r = requests.get(domain + fql)
>>> except:
>>>    print "Error occured"


FQL-kysely palauttaa ne käyttäjä-ID-arvot, jotka täsmäävät annettuun hakuun. Eli hakiessani olenko kaveri käyttäjien A, B ja C kanssa palauttaa Facebook niiden käyttäjien ID:t, joiden kanssa haetuista olen kaveri.

Tulokset kirjoitin .gexf-muodossa ja visualisoinnin tein Gephi-nimisellä verkostojen visualisointiohjelmalla. Gephi:n käyttöön en mene tässä sen syvällisemmin, koska olen käsitellyt sitä jo aiemmin tässä blogissa ja tyydynkin vain viittaamaan Olli Parviaiseen luomiin ohjeistuksiin.

Summa summarum


Yhteenvetona voitaneen todeta, että Facebook:sta on mahdollista muodostaa kaveruusverkostoja vastaavasti kuin aikaisemmin olen näyttänyt Twitter:stä. Facebook:n kohdalla joutuu hieman enemmän tekemään käsityötä datan keräämisessä, mutta lopputulos on täysin vastaava. Erona Twitter-verkostoihin on, että Facebook:sta kerätyistä kaveruusverkostoista muodostuu paljon rypästeisempiä (Kuva 2). Eri ryhmät kuten lapsuuden ystävät, koulukaverit, työkaverit ja sukulaiset ovat hyvin vähän tekemisissä toistensa kanssa, mutta ovat linkittyneet keskenään hyvin paljon.

Facebook-kaveriverkostoni. Eri ryhmät erottuvat toisistaan erittäin selkeästi. Solmuja verkostossa on 206 ja yhteyksiä 1878. (Kuva 2)
Twitter:ssä taas ihmiset ovat enemmän verkostoituneet keskenään yli sosiaalisten tai fyysisten rajojen (Kuva 3). Twitter:n demografia poikkeaa toki hyvin paljon Facebook:sta, mutta mielestäni tämä kertoo, että Twitter:ssä seurataan kiinnostavia henkilöitä ja itse asiaa, joka johtaa samoista asioista kiinnostuneiden ihmisten tiheisiin verkostoihin. Toisaalta voidaan vetää myös se johtopäätös, että julistan Twitter:ssä vain yhden aihealueen ilosanomaa ja jos aihealueita olisi useampia nähtäisiin näistä eri aihealueista kiinnostuneet ihmiset omina ryppäinään.

Twitter-seuraajaverkostoni. Ihmiset ovat verkostoituneet keskenään hyvin tiheästi. Solmuja verkostossa 149 ja yhteyksiä 1209. (Kuva 3)
Voidaan kuitenkin tehdä sivistynyt arvaus, että Facebook:ssa seurataan ihmisiä, jotka ovat tuttuja fyysisestä maailmasta kun taas Twitter:ssä seurataan ihmisiä, jotka ovat kiinnostavia. Tässä toki kyseessä vain yhden ihmisen Facebook-kaverit ja Twitter-seuraajat, joten kovin pitkälle meneviä johtopäätöksiä ei voida tehdä, mutta olen havainnut samankaltaisen trendin esiintymisen myös muissa testitapauksissa.

Stay tuned!

"Ryömin juuri kaikkia @TuomasEnbuske:n seuraajia Keitä me kaikki ollaan Seuraavaksi @alexstubb Siinä taitaakin olla kaikki suom. Twitteristit" - https://twitter.com/#!/teelmo/status/185680267548168192

keskiviikko 22. helmikuuta 2012

Kuka minä olen? @TuomasEnbuske

Moro,
Olen @TuomasEnbuske, 3kk nuori, suomalainen Twitter-ilmiö. Synnyin 24. marraskuuta vuonna 2011. Olin synnyttyäni heti virkeä lapsi. Opin nopeasti puhumaan säästellen käyttäen maksimissaan 140 merkkiä per viesti. Jakamiani viestejä ryhdyttiin heti seuraamaan laajoin joukoin. Villitsin ihmisiä provokatiivisilla heitoillani, joissa panostin enemmän määrään kuin laatuun. Otin tarkoituksella kantaa herkkiinkin aiheisiin, joihin pyrin useimmiten löytämään mahdollisimman yksioikoisen ja kärjistetyn ratkaisun...kuten netissä on tapana.
Suurin paheeni on Twitter-seuraajamääräni seuraaminen.

@TuomasEnbuske on Twitterin suurkuluttaja. Liittymisestään hän on ehtinyt kolmen kuukauden aikana vihastuttaa ja rakastuttaa seuraajiaan sekä hieman muitakin 2158 tweetin verran ja kerännyt näillä 7116 seuraajaa (tilanne 22.2.2012 klo 10:40). Lyhyellä matematiikalla tämä tekee päivässä ~20 tweettiä ja ~80 uutta seuraajaa. Suomalaisilla mittareilla määrät ovat jos eivät aivan ainutlaatuisia niin ainakin harvinaislaatuisia. Twitterin suosituimmaksi suomalaiseksi hänellä on vielä matkaa, mutta sanotaanko, että matka on alkanut.

Twitter-meemi @TuomasEnbuske:n rooli on ollut tarjota vaihtoehtoinen, provokatiivinen ja kärjistävä näkökulma maailman ja etenkin suomalaisiin tapahtumiin. Parhaimmillaan @TuomasEnbusken oivaltava logiikka toimii kuin Fingerpori (parhaimmillaan), mutta toisinaan eräät närkästyvät liian yksioikoisiksi mieltämistään sutkautuksista. Heitot uppoavat kuitenkin suomalaiseen Twitter-kansaan siinä määrin, että seuraajamäärä on marraskuusta lähtien kasvanut räjähdysmäisen tasaisesti.

@TuomasEnbuske pitää Twitterissä yllä väritettyä linjaa, jonka lähtökohtainen tarkoitus on enimmäkseen hämmentää ihmisiä ja herättää mielipiteitä puolesta ja vastaan. @TuomasEnbuske tweettaa kuin 50-vuotias hämeenkyröläismies ensireaktiossa: "minun mielipiteeni on oikea ja pidän siitä kiinni vaikka olisin väärässä". @TuomasEnbusken Twitter-agenda ei piile arvostuksen keräämisessä yksittäisillä viesteillä kuten asialinjaa ylläpitävillä tweettaajilla vaan kumpuaa enemmän yleisemmästä häiriön aiheuttamisen tarpeesta, jonka apuvälineeksi hän on Twitterin valjastanut. Yksinkertaisena analyysina voidaan heittää, että entinen rääväsuu, joka on sittemmin muokannut imagonsa asiallisempaan linjaan, on löytänyt vastikkeettoman kanavan ilmaista kapinankaipuista sielumaan.

Minua kiinnosti mitä @TuomasEnbuske sitten itse hakee Twitteristä. Lyhyessä ajassa yli 7000 tavallista Twitter-tallaajaa seuraajikseen haalinut @TuomasEnbuske on samassa ajassa itse klikannut seuraukseen ~300 tiliä. Keitä nämä ovat? Edustavatko he enemmän asialinjaa vai onko @TuomasEnbuske myös kiinnostunut provokaattoreista ja kansanmiehistä, jonkalaiseksi hän on itsensä Twitterissä lanseerannut.

Kuvassa 1 nähdään Twitter-tilien, joita @TuomasEnbuske seuraa, verkosto. Verkostosta voidaan lukea, että @TuomasEnbuske hakee Twitteristä täysin päinvastaista sanomaa kuin mitä hän itse tarjoaa vastineeksi. Hän haluaa selkeästi rinnastua seuraamisellaan valtaeliittiin ja päätöksentekijöihin. Seuratuista tileistä mainittakoon sellaiset anarkistit ja ihmiskunnan pahat pojat kuten Peter Vesterbacka, Mikael Jungner, Alexander Stubb, Bill Gates ja Stephen Elop. Ei todellakaan hahmoja, jotka voidaan mieltää kapinallisiksi rääväsuiksi vaan päinvastoin verkosto on pullollaan Twitter-tilejä, jotka edustavat menestystä ja valtaa joko suomalaisittain tai kansainvälisesti.

@TuomasEnbuske seuraa Twitterissä lähinnä toistensa kanssa verkostonutta valtaeliittiä, joka ei tarjoa juurikaan vaihtoehtoa vallitsevalle Status Quo:lle. Klikkaa suuremmaksi. (Kuva 1)
Huomionarvoista @TuomasEnbuske:n seuraamien henkilöiden verkostossa on myös verkoston tiheys. Mikään ryhmä ei erottaudu erilleen verkostossa esiintyvästä kansakunnan kermasta vaan kaikki seuraavat sopusointuisasti keskenään toisiaan. Tämä kertoo juuri siitä, että @TuomasEnbuske:n seuraamien henkilöiden joukossa ei esiinny sitä ns. vaihtoehtoista kapinalinjaa edustavia henkilöitä, jonkalaiseksi hän on itsensä Twitterissä profiloinut.

Kuka minä olen? Olen @TuomasEnbuske. Tarjoan seuraajilleni äänitorven itsenäisyyspäivän vastaanoton kuokkavierasjuhlista, mutta olen itse turvallisesti linnan seinien sisäpuolella katkarapulautasten ääressä.

Ps. olen tässä viestissä ottanut vapauden oikoa mutkia, koska näin on netissä tapana. Mielipiteet ja johtopäätökset ovat omiani, mutta en kanna niistä vastuuta vaan syytän sananvapautta ja Internettiä sen välineenä kaikesta. Lisäksi oma motivaationi on tietenkin vain saada lisää Twitter-seuraajia ja/tai päästä Tuomaksen kanssa seurapiireihin oluelle.

Ps2. Verkosto on toteutettu Gephillä ja verkostosta on rajattu pois solmut joiden astesumma on pienempi kuin 26. Värikoodaus on tehty Modularity-tunnusluvun perusteella. Verkoston ladonta on tehty ForceAtlas2 algoritmilla.

perjantai 17. helmikuuta 2012

Twitter-verkostoanalyysia Gephi:llä

Innostuin viime viikonloppuna kokeilemaan ensimmäistä kertaa omatoimisesti miten Twitter-dataa on mahdollista visualisoida. Olen aiemmin tutkinut ja työstänyt paljon erilaisia sosiaalisia verkostoja, mutta ennen en ole laittanut todella käsiä rasvaan Twitterin osalta. Osittain tähän on ollut syynä se, että olen mieltänyt Olli Parviaisen jo avanneen kaikki Twitterin salat tämän osalta eikä asiaan vihkiytyminen näin ollen ole tuntunut mielekkäältä. Pisteet tämän vaikutelman luomisesta Ollille :) Sisäinen devaajanluonteeni kuitenkin siis vei voiton ja lähdin kehittelemään jotain omaa.

Twitter tarjoaa monipuoliset mahdollisuudet datansa käsittelyyn rajapintansa kautta. API:lla (Application programming interface) on mahdollista hakea automaattisesti oikeastaan kaikki se tietosisältö, joka on käyttäjälle muutenkin nähtävissä. Tämä on poikkeuksellista esimerkiksi verrattuna Facebook:n Graph API:in, jonka kautta tietoa on mahdollista hakea rajoitetummin. Tästä syystä Facebook-datan hakeminen on omalta osaltani tapahtunut hyvin paljon käsityönä kuten "Kansanedustajat Facebookissa – kuka on kenenkin kaveri?" -tapauksen yhteydessä.

Päädyin rakentamaan Twitter-datan avulla verkoston käyttäjistä/Twitter-tileistä joita seuraan. Henkilökohtaisella Twitter-tilini seurannassa ~90:ntä tiliä, joten tästä seurasi suoraan verkoston solmujen lukumäärä. Yhteydet solmujen välille rakensin sen perusteella miten seuraamani henkilöt seuraavat keskenään toisiaan. Lopputuloksena syntyi sosiaalisen verkosto, joka havainnollistaa seuraamieni henkilöiden keskenäiset suhteet, suhteiden perusteella muodostuvat ryhmät ja näiden ryhmien asemoitumisen toisiinsa nähden.

Keräsin datan käyttäen Python-ohjelmointikieltä ja tein tulostuksen verkostodatalle soveltuvassa GraphML-muodossa, jota visualisointiin käyttämäni visualisointityökalu Gephi ymmärtää. Gephi:ssä käytin tulosten latomiseen ForceAtlas2-algoritmia, jonka olen todennut käytännön kokemusten kautta toimivan hyvin etenkin pienten sosiaalisten verkostojen visualisoimiseen. Värikoodauksen tein dataan käsin määrittelemällä jokaisen solmun sille olennaiseen kategoriaan. Solmun koko kuvastaa astesummaa eli solmuun suuntautuvien yhteyksien määrää. Toisin sanoen solmun koko kuvaa suoraan Twitter-tiliä seuraavien Twitter-tilien määrää verkostossa. Yhteydet solmujen välillä ovat suunnattuja. Annotoinnin ja jälkikäsittelyn tein Paintbrush-nimisellä ohjelmalla. (Kuva 1)

Sosiaalinen verkostoni Twitter:ssä visualisoituna Gephi:llä. (Kuva 1)
Visualisointi vahvistaa hyvin niiden eri ryhmien olemassaolon, jotka todellisuudessakin ovat olemassa verkostossani, mutta lisäksi visualisoinnista voidaan nähdä miten nämä ryhmät sijoittuvat suhteessa toisiinsa. Esimerkiksi TTYläiset erottuvat visualisoinnissa hyvin selkeästi muista ryhmistä erilleen. Tulkitsen tämän johtuvan toisaalta siitä, että seuraamani TTYläiset eivät ole kaikkein aktiivisimpia Twitter-käyttäjiä mutta toisaalta siitä, että heillä ei ole mitään syytä seurata Yleläisiä tai datajournalismi-ihmisiä. Myös Yleläiset erottuvat visualisoinnissa selkeästi omana joukkonaan, mutta he taas asettuvat selkeästi lähemmäksi datajournalismi-ryhmää kuin TTYläiset, jonka voidaan mieltää olevan ihan ammatillisestikin luontevaa. Nämä kolme ryhmää (1. TTY, 2. YLE ja 3. Datajournalismi) ovat verkostoni suurimmat ja selkeimmät, joten näen, että tällä erää on mielekästä tässä tulkita vain ne ja jättää muut pienemmät ryhmät tässä erää huomioimatta.

Kuvissa 2, 3 ja 4 nähdään eräiden muiden käyttäjien Twitter-verkostot. Verkostot on toteutettu samoilla periaatteilla kuin edellä kuvattu oma verkostoni sillä erotuksella, että solmujen väritys on tehty Gephi:n Modularity-luokittelun avulla. Lisäksi näissä verkostoissa esiintyvät Twitter-tilit on anonymisoitu, koska haluan esittää ne vain esimerkin omaisesti enkä pyrkiä sen tarkempaa tulkitsemiseen. Tarkempi tulkinta vaatisi tutustumista verkostoissa oleviin Twitter-tileihin, jotta voitaisiin ymmärtää miksi tietyt ryhmät ovat lähempänä toisiaan kuin toiset.

Kuvien 2, 3 ja 4 verkostoista nähdään miten verkoston ulostulo on hyvin erilainen eri käyttäjille. Toisilla käyttäjillä nähdään hyvin pitkälle keskenään verkostoituneet ryhmät kun taas toiset käyttäjät seuraavat toisistaan täysin riippumattomia Twitter-tileistä koostuvia ryhmittymiä.

Kuvassa 2 nähtävä verkosto on niin tiheä, että tarkkojen tulkintojen tekeminen yleisnäkymästä on vaikeaa. Verkostojen tulkinnassa onkin tärkeää, että analysoinnin yhteydessä dataa voidaan selata mm. "details on demand" -periaatteella.

Tiheiden verkostojen tulkinta on usein vaikeaa jos verkostoa ei ole mahdollista rajata tai zoomata. Gephi mahdollistaa datan rajaamisen erilaisten filtereiden avulla ja verkostoa on mahdollista zoomata. Yleiskuvan merkitys on kuitenkin tärkeä, koska sen avulla nähdään ne alueet, jotka voisivat olla kiinnostavia jatkotutkimuksen kannalta. (Kuva 2)
Kuvassa 3 nähtävän verkoston erityispiirre on kahden sisäisesti tiiviin ryhmän heikko vuorovaikutus keskenään. Jos kyseessä tässä olisi yrityksen kahden eri osaston välinen kommunikaatio olisin hyvin huolestunut yrityksen sisäisen viestinnän toimivuudesta.

Twitteriä on mahdollista käyttää hyvin monella eri tavalla. Tämän kyseisen henkilö seuraa selkeästi kahta erillistä toisistaan riippumatonta ryhmää ihmisiä, jotka voivat poiketa toisistaan esimerkiksi kiinnostuksen  tai spatiaalisesti. (Kuva 3)

Kuvan 4 verkostossa osa ryhmistä on eriytynyt omaan lokeroonsa kun taas toiset ryhmät ovat verkostoituneet keskenään.

Tämän käyttäjän verkostossa tietyt ryhmät erottuvat hyvin selkeästi omiin lokeroihinsa, mutta oikealta löytyvä klusteri on taas hyvin vahvasti verkostoitunut keskenään. (Kuva 4)
Kuten huomataan vaatii verkostoanalyysi aina rinnalleen tuntemusta visualisoitavana olevasta ilmiöstä. Pystyn tulkitsemaan omaa verkostoani melko luotettavasti, koska tunnen minkälainen ilmiö on kyseessä ja tiedän mitä verkostossa olevat solmut ovat. Tulkinnasta tulee kuitenkin heti hankalampaa kun verkostossa esiintyvät solmut ja yhteydet tai ylipäänsä verkostossa nähtävä ilmiö ei ole tuttu. Onkin väärin olettaa, että verkostoanalyysi olisi jonkinlainen Hopea Luoti, joka suoraan ratkaisisi monimutkaisia ongelmia ja vastaisi kysymyksiin. Verkostoanalyysi toimii ongelmien ratkaisun tukena ja toisaalta antaa suuntaa sille  mistä ratkaisua voisi lähteä etsimään.

Seuraavat askeleet Twitter-analyysin osalta ajattelin ottaa siihen suuntaan, että kaivan verkoston ihmisten seuraajista sen sijaan, että katson keitä ihmiset seuraavat. Uskoisin tämän näkökulman tuottavan mielenkiintoisia tuloksia kun analyysi kohdistetaan yhteiskunnallisesti tärkeisiin ihmisiin kuten poliitikkoihin.

Keep on Tweeting...

perjantai 27. tammikuuta 2012

MediaWiki tietosisällön visualisointi, Osa 1: Gephi

Tämä viesti ei sinällään käsittele sosiaalisen verkostojen analyysiä tai datajournalismia, jotka pyrin pitämään tämän blogin pääaiheina. Kuitenkin tekniikat ja välineet, joita hyödynnetään ovat samoja ja tässä esimerkissä datan rakenne on vastaavanlainen kuin usein SNA:n tapauksessa.
</spoiler>

Wiki on käsite tietosisällölle, joka on kaikkien lukijoittensa muokattavissa. Wikille on myös tunnusomaista, että kaikki tallennetut versiot tiedosta säilytetään. Tunnetuin yksittäinen wiki on varmasti Wikipedia, mutta erilaisia wikejä ja wiki-alustoja löytyy useita. Useilla yrityksillä on sisäisiä Wikejä kuten myös monilla yhdistyksillä ja muilla organisaatioilla. Tunnettuja Wiki-alustoja ovat mm. Confluence, MediaWiki ja esimerkiksi FosWiki.

Wikien suurin rikkaus on, että tieto on yhteisön hallittavissa. Tämä hajauttaa tiedon ylläpitämisen vastuun ylläpito-organisaatiolta, mutta ominaisuus tuo myös haasteita. Tieto rämettyy helposti ja tiedon löytäminen on laajoissa wiki-ympäristöissä vaikeaa kun tietoa ei hallinnoida keskitetysti. Usein on myös vaikeaa hahmottaa mitä tietoa esimerkiksi yrityksen sisäisestä wikistä löytyy. Tiedon löytymistä tukisi jos Wikien luokittelu- ja hierarkia-toimintoja käytettäisiin tehokkaasti ja ne tuotaisiin selkeästi käyttjien esille. Usein kuitenkin tiedon rakenteen tuottaminen on tavalliselle käyttäjälle liian haastavaa.

Tämä hyvin laveana ja yleisenä kuvauksena wikeistä. Tarkoitukseni oli antaa oikeutus seuraavalle esimerkilleni siitä miksi wikien rämettyneisyyttä kannattaa kuvata ja miten siitä voitaisiin mahdollisesti päästä eroon.



Olen ylläpitänyt itselläni henkilökohtaista, mutta avointa MediaWiki-alustaa muutaman vuoden ajan. Sivuja ympäristössä on vain alle 30. Kuitenkin huomaan, että osa tiedosta hukkuu Wikin uumeniin mm. koska tietoa ei ole linkitetty mihinkään muuhun olemassa olevaan tietoon. Henkilökohtaisen MediaWiki-asennukseni lisäksi minulla oli mahdollisuus kokeilla samoja periaatteita erään organisaation laajemmassa ympäristössä.

MediaWiki:ssä tiedon ryhmittely tehdään pääasiassa luokkien avulla. Yksittäiselle MediaWiki-sivulle on mahdollista määritellä rajoittamaton määrä luokkia, joihin sivu kuuluu. Yksittäisen luokan sivulta on nähtävissä mitkä sivut kuuluvat tähän luokkaan. Hierarkiasta on mahdollista tehdä myös syvempi liittämällä luokkia toisiin luokkiin.

Toteutin MediaWikin tietosisällöistä verkostovisualisoinnin käyttäen aiemmasta blogimerkinnästä tuttua Gource:a sekä Gephi:ä. Esittelen tässä kirjoituksessa Gephi:llä tekemäni tuotokset, koska Gource:a käsittelin jo aiemmin ja molempien läpikäynti olisi turhan raskasta. Käyn Gource:lla toteutetut versiot läpi myöhemmin.

Gephi on verkostoanalyysiin erikoistunut avoimeen lähdekoodiin perustuva työkalu, jolla on mahdollista visualisoida dataa, jolla on verkostorakenne. Gephi sisältää monipuoliset ladonta-algoritmit ja sen avulla on mahdollista laskea mm. laskea tunnuslukuja ja tehdä datan refaktorointia. Gephi lukee useita tiedostoformaatteja ja tuettuihin formaatteihin kuuluu mm. XML-pohjainen GEXF-tiedostoformaatti.

GEXF:llä on mahdollista kuvata monipuolisesti erilaisia verkostoja ja dataan on mahdollista vapaasti liittää haluamiaan attribuutteja. Yksinkertaisimmillaan GEXF käsittää <nodes>-elementin, joka kuvaa datassa olevat solmut sekä <edges>-elementin, joka kuvaa solmujen väliset yhteydet. Solmut ja yhteydet yksilöidään ID-arvojen avulla, jotka useimmitten omissa esimerkeissäni ovat olleet koneellisesti tuotettuja surrogaatti-avaimia.

Datan keräsin räätälöidyn SQL-kyselyn avulla suoraan MediaWikin MySQL-tietokannasta, jonka jälkeen tulostin datan PHP-scriptillä GEXF-muotoon, joka on siis suoraan mahdollista avata Gephi:llä. Vaihtoehtoisesti data oltaisiin voitu ryömiä asiakaspäässä, mutta koska tässä tapauksessa minulla oli suora pääsy tietokantaan tähän ei ollut tarvetta ryhtyä. Asiakaspään ryömintä olisi kuitenkin pakollista mikäli haluttaisiin tutkia sellaisia wiki-palveluja, joiden backendiin ei olisi pääsyä (tämä tilanne on varmasti normi kun puhutaan datajournalismista).

Mikäli haluat tutustua Gephi:n käyttöön laajemmin suosittelen katsomaan läpi esimerkiksi Olli Parviaisen tekemät kalvot aiheesta. SlideShare-palvelusta löytyy myös monia muita hyviä presentaatioita asiaan liittyen. En myöskään halua mennä liikaa yksityiskohtiin PHP:n tai SQL:n osalta, koska näen ne epäolennaisena, mutta jos haluat tietää näistä enemmän kerron kyllä mielelläni.

Kuvassa 1 nähdään MediaWiki-alustani nykytilanne visualisoituna Gephi:llä. Kuten sanottua wiki ei ole sivujen määrässä mitattuna suuri, mutta data soveltuu hyvin yksinkertaisuutensa vuoksi hyvin esimerkikiksi. Visualisoinnissa suurempi solmun koko kuvaa solmun astesummaa eli solmusta lähtevien yhteyksien määrää. Siniset solmut ovat wiki-sivuja ja punaiset solmut esittävät luokkia. Yhteydet luodaan sivujen ja luokkien välillä sillä perusteella, että sivu on merkitty kuuluvaksi luokkaan.

Esimerkkivisualisointi Gephi:llä MediaWiki:ni sivuista ja luokista. Tässä MediaWiki-ympäristössä ei ole hyödynnetty luokkien luokittelua, mutta suurin osa sivuista on liitetty vähintään yhteen luokkaan. Luokkien ja sivujen nimet on riisuttu yksityisyys syistä. (Kuva 1)
Visualisoinnista (Kuva 1) nähdään miten wikissä on selkeitä toisistaan riippumattomia aihealuekokonaisuuksia ja että suurin osa sivuista kuuluu (nykyään) ainakin yhteen luokkaan. Valitettavasti lähtötilanteesta, jossa suurempi osa sivuista oli "orpoja" minulle ei ole tallessa kuvankaappausta. Aikaisemmin kuitenkaan suuri osa sivuista ei kuulunut mihinkään luokkaan, jolloin (kuten edellä mainitsin) data katosi wikin uumeniin.

Verkostovisualisoinnin avulla pystyin osoittamaan helposti mitkä sivut olivat "luokattomia" ja käymään ne läpi lisäten niille, jonkin olemassa olevan luokan. Visualisoinnin avulla pystyin myös näkemään mahdollisia uusia luokkia. Lisäksi kun on mahdollista nähdä sivujen väliset yhteydet luokkien kautta voidaan havaita esimerkiksi, että miten tietyistä sivuista selkeästi puuttuu sille kuuluva luokka.

Minulla oli myös mahdollisuus käyttää erään laajemman wiki-ympäristön dataa suoraan tietokannasta. Tässä järjestelmässä wiki-sivuja ja luokkia oli huomattavasti enemmän kuin omassa ympäristössäni. Käytin datan keräämiseen ja käsittelyyn samoja menetelmiä kuin aiemmin, mutta Gephi:ssä käytin hieman eri piirtokäytäntöjä (Kuva 2).
Laajemmat Wiki-ympäristöt tuottavat haasteita visualisoinnin luettavuudelle ja hahmotettavuudelle. Tässä väreillä ja solmun koolla on molemmilla kuvattu solmun astesummaa. Yksittäiset sivut on piirretty siten keltaisella ja tumman sininen kuvaa suosituimpia luokkia. Solmut ovat painovoimaohjattuja. Sivujen ja luokkien nimet on poistettu yksityisyys syistä. (Kuva 2)
Kuvasta 2 nähdään miten laajemman wiki-ympäristön visualisoinnin havainnointi ja käsittely on huomattavasti vaikeampaa kuin aikaisemman suppeamman ympäristön (Kuva 1). Mielenkiintoista on kuitenkin huomata miten tässäkin ympäristössä havaitaan selkeitä aihekokonaisuuksia, jotka eivät linkity luokkien kautta muuhun sisältöön vaan ovat "eristäytyneitä" kokonaisuuksia.

Kiinnostava jatkotukimuksen aihe olisi katsoa linkittyykö tieto paremmin muissa wiki-alustoissa, joissa tiedon luokitteluun käytetään muita mahdollisesti monipuolisempia tapoja, mutta tämä tästä tällä kertaa. Jatkoa seuraa asian tiimoilta myöhemmin Gource-visualisointien osalta.