keskiviikko 21. marraskuuta 2012

Sormiharjoitus Twitter-datalla

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

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



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

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

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

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

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

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

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

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

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

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

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

Muokkaus: 22.11.2012

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

Muokkaus: 27.11.2012

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

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

1 kommentti:

  1. Loistava tutoriaali säännöllisten lausekkeiden (Regexpien) hyödyntämisestä, olen pitkään pähkinyt, että miten saisin itseni ja muut ei-koodarit tarttumaan Regexpeihin, kun ne ovat luonteeltaan vähän luotaantyöntäviä. Tiedän niiden hyödyllisyyden, mutta...

    Täällä on verkkotyökalu, jolla voi tehdä Regexpillä etsi-korvaa-toimintoja verkossa, siis jos ei jaksa asentaa Sublime-editoria http://gskinner.com/RegExr/

    VastaaPoista