Tässä numerossa luodaan yleiskatsaus valikoimaan R-paketteja, joihin viitataan nimityksellä tidyverse. Nämä paketit on luotu helpottamaan data-analyysiä, ja ne jakavat yhteisen filosofian ja kieliopin. Tidyversen perusteiden omaksuminen käy nopeasti, ja helpottaa ärräilijän arkea huomattavasti.
Nimitys tidyverse viittaa siistin datarakenteen periaatteeseen. Idea on yksinkertainen: jokaisen muuttujan tulisi olla omassa sarakkeessaan ja jokaisen havainnon omalla rivillään. Näin aineiston muokkaaminen ja analysointi on selkeää ja suoraviivaista. Esimerkki havainnollistaa asiaa. Alla on kaksi taulukkoa, jotka kuvaavat ärräkornerin kirjoittajien kuvitteellista hedelmätilannetta. Molemmat sisältävät saman informaation, mutta vain oikeanpuoleinen on “siistissä” muodossa. Miksi välittää siisteydestä? Mietitään tilannetta, jossa halutaan jättää tarkastelun ulkopuolelle Juhon päärynöiden lukumäärä. Oikeanpuoleisessa taulukossa tämä onnistuu helposti poistamalla rivin, jolla nimi saa arvon “Juho” ja muuttuja hedelmä arvon “päärynä”. Vasemmanpuoleisessa taulukossa vastaava käsky poistaisi kuitenkin myös tiedon Juholla olevien omenoiden lukumäärästä. Havaintojen suodattaminen ei siis toimi toivotulla tavalla, jos aineisto on koottu väärin.
Tidyversen kieliopin ehkä merkittävin etu on se, että sen ansiosta aineiston muuttujiin viittaaminen on hyvin yksinkertaista. Perus R:n kieliopissa sarakkeisiin viitataan laittamalla pilkku ennen sarakkeen numeroa. Vastaavasti riveihin viitataan laittamalla pilkku rivinumeron jälkeen. Tämä ainainen pilkkujen kanssa venkslaaminen aiheuttaa monelle turhaa päänvaivaa ja virheilmoituksia. Tidyversen ihmeellisessä maailmassa ei tarvitse muistaa moisia pilkkusääntöjä. Voit myös unohtaa aineiston muuttujien valintaan käytetyn $-merkin. Tidyversessä muuttujiin viittaaminen tapahtuu aina käyttämällä niiden nimiä. Voit joko kutsua muuttujia suoraan nimillä, valita niitä alku- tai loppu kirjainten mukaan tai niiden sisältämien merkkiyhdistelmien mukaan.
Näin koodista katoaa turha toisteisuus ja sen luettavuus paranee, kun aineiston nimeä ei tarvitse toistaa joka kerta, kun viittaa johonkin aineiston sisältämään muuttujaan. Alla vielä vertailun vuoksi esimerkki aineiston rajaamisesta perus R:llä ja tidyversen kieliopilla.
Dplyr
Tidyversen paketeista merkittävin lienee R-studion tutkimusjohtajan Hadley Wickhamin kehittelemä paketti dplyr. Se on luotu aineistojen muokkaamisen ja analysoinnin helpottamiseksi. Dplyr:n kätevien funktioiden avulla voi valita ja luoda uusia muuttujia, suodattaa havaintoja sekä muodostaa nopeita yhteenvetoja käsiteltävästä aineistosta. Dplyr:n parhaat ominaisuudet ovat sen yksinkertaisuus ja funktioiden selkeät nimet, jotka tekevät koodista helppolukuista. Seuraava esimerkki hyödyntää muutamia paketin keskeisimpiä funktioita. Koodi poistaa havainnon Juhon päärynöistä ja laskee jokaisen kirjoittajan hedelmien lukumäärän keskiarvon.
Kätevää eikö? Mutta eräs yksityiskohta pistää kokeneemman koodaajan silmään yllä olevassa esimerkissä. Se sisältää turhaa välivaiheiden tallentamista. Koodia voi yksinkertaistaa vielä lisää käyttämällä putkioperaattoria.
Putkioperaattori
Tämä toiminto on tuttu jo muutaman vuoden takaisesta ärräkornerista (Kapitaali 1/17), mutta koska se on keskeinen pala tidyversen kielioppia, ja nykyään myös kiinteä osa dplyr -pakettia, niin se esitellään nyt pikaisesti uudelleen.
Putkioperaattori (engl. pipe) eli hämmentävä merkkijono %>% ottaa vasemman puoleisen termin ja syöttää sen oikealla puolella olevalle funktiolle. Se on osa magrittr-pakettia, joka on saanut nimensä belgialaisen surrealistin René Magritten mukaan. Taiteilijan yksi tunnetuimmista teoksista on maalaus piipusta, jonka alla lukee “ceci n’est pas une pipe” (tämä ei ole piippu). Toinen luonteva suomennos voisi siis olla putken sijasta piippu.
Mutta mihin tätä hassua merkkiyhdistelmää voi käyttää? Sen tarkoitus on tehdä koodista yksinkertaisempaa. Perinteistä R-koodia kirjoittaessa funktioita kirjoitetaan sisäkkäin. Tällöin koodia luetaan rivin keskeltä ulospäin. Mitä useampia funktioita samalla rivillä on, sitä vaikeammaksi koodin lukemin muuttuu. Aikaisemman esimerkin voisi kirjoittaa halutessaan yhdelle riville, mutta lopputulos on hyvin ikävän näköinen.
Otetaan seuraavaksi avuksi putkioperaattori.
Nyt koodia on helppo lukea vasemmalta oikealle ja ylhäältä alas, eikä se sisällä turhaa välivaiheiden tallentamista. Karlijn Willems kirjoittaa hyvin artikkelissaan “Pipes in R Tutorial For Beginners” (2016), että putkioperaattorin voi ajatella vastaavan puhutussa kielessä sanaparia “ja sitten”. Viimeisimmän koodinpätkän voisi lukea ääneen esimerkiksi seuraavasti: “otetaan tarkasteluun aineisto, ja sitten poistetaan havainto, ja sitten ryhmitellään nimen mukaan, ja sitten lasketaan keskiarvo”.
Tidyverseen kuuluu tässä kolumnissa esiteltyjen pakettien lisäksi monia muita, jotka noudattavat tässä kolumnissa esiteltyä siistin datan periaatetta. Joitakin maininnan arvoisia paketteja ovat esimerkiksi listojen kanssa työskentelyyn tarkoitettu purrr, grafiikoiden luomisen ehdoton ykkönen ggplot2, aineistojen tuontia helpottava readr ja dataframesta päivitetyn version esittelevä tibble.
TEKSTI: Meeri Seppä