24.01.2019 / Lasse Ruokolainen
Good news: according to Señior Data Scientist, Lasse Ruokolainen, you don’t have to!

 

Monesti olen kouluttaessa kuullut kysymyksen: ”Kumpi on parempi, R vai Python”? Hätäisimmille lukijoille annan saman tien lyhyen, kokemusperäisen vastauksen: ei kumpikaan.

Jos et kuitenkaan tyytynyt tähän vastaukseen, taustoitan alla hieman, miksi olen tätä mieltä.

Historiaa

Olen itse pitkän linjan R-koodaaja. Tutustuin R-kieleen ensimmäisen kerran opintojeni loppuvaiheessa keväällä 2004. Tuolloin komentorivi herätti vielä melkoista hylkimisreaktiota (niin kuin monessa muussakin). Kuitenkin jo tulevana syksynä, kun aloitin siviilipalveluksen Metsäntutkimuslaitoksessa, aloin ymmärtää, että R:n opettelu tulisi olemaan välttämätöntä. Avoimen lähdekoodin ohjelmana uudet innovaatiot tuppaavat ilmestymään R:ään ensimmäisenä, ja laaja käyttäjäkunta tarjoaa korvaamatonta vertaistukea ongelmiin.

Kaksi viikkoa kestäneen intensiivisen treenaamisen jälkeen aloin olla riittävän sujut komentorivin kanssa, jotta kykenin jotenkin soveltamaan R:ää käytännössä. Takana on nyt lähes 15 vuotta lähes päivittäistä aktiivista tekemistä ja itseopiskelua. Tästä huolimatta en voi siltikään voi sanoa hallitsevani R:ää täydellisesti; opin jatkuvasti uutta. Etenkin R-Studion tulo ”markkinoille” on kasvattanut R:n mahdollisuuksia huimasti ja samalla tietysti lisännyt tarvetta omaksua uusia asioita.

Python onkin sitten itselleni paljon tuoreempi tuttavuus. Aloin ottaa tuntumaa ”pyyttoniin” noin vuosi sitten, kun siirryin yliopistosta yrityspuolelle. Käytännön asiakasprojektin kanssa työskentely joudutti oppimista, ja nyt kärmes alkaa totella jo melko kesysti. Toki osaamiseni rajoittuu pitkälti data-analytiikkaan, mikä on vain murto-osa siitä, mihin Python taipuu.

Näistä lähtökohdista voisi luulla, että kallistuisin ilman muuta R:n kannalle. Millä perusteella päädyin kuitenkin tylsään tasapeliin? Myönnän: olisin voinut valita toisinkin, kummankin kielen eduksi. Tämä johtuu siitä, että R ja Python on kehitetty hyvin eri tarkoituksiin. R:n (jonka beta-versio julkaistiin vuonna 2000) kehittivät tilastotieteilijät nimenomaan tilastoanalytiikan tarpeisiin, kun taas Python (ensimmäinen versio käytössä jo 80-luvulla) on yleisohjelmointikieli. Data-analytiikan saralla Pythonia on alettu toden teolla hyödyntää vasta 2010-luvun jälkeen, Pandas- ja Sklearn-kirjastojen myötä. Nykyään tilastomenetelmien kehitys tapahtuu edelleen ensisijaisesti R:ssä, kun taas koneoppimismenetelmiä (esim. neuroverkot ja vahvisteoppiminen) viedään voimakkaasti eteenpäin Pythonissa.

Molempi parempi?

Todenperään olen henkilökohtaisesti sitä mieltä, että on hyödyllistä hallita molemmat kielet, koska ne täydentävät kivasti toisiaan. Tämä ei kuitenkaan ole mitenkään välttämätöntä — kummalla tahansa pärjää mainiosti. Toki, R on kiistatta oikea valinta, jos tarpeena on tehdä monipuolisesti tilastoanalytiikkaa, kun taas Python on mielestäni parempi esimerkiksi datan lukemiseen (pandas-kirjastoa on vaikea päihittää tässä).

Yhdellä kielellä pärjäämistä helpottaa erityisesti se, että R ja Python lähentyvät jatkuvasti toisiaan data-analytiikan saralla. Koska molemmilla kielillä on mittava käyttäjä- ja kehittäjäkunta, on helppo ymmärtää, että molempiin kieliin tuodaan jatkuvasti parhaita ominaisuuksia toisesta kielestä.

Otetaan yksinkertainen esimerkki: datan muokkaukseen on R:ssä lyömätön dplyr-paketti (osa laajempaa tidyverse-kokonaisuutta). Jos esimerkiksi haluan laskea otoskoon moninaisen ryhmittelyn sisällä, on syntaksi yksinkertaisuudessaan:

data %>% 
group_by(grouping1, grouping2) %>% 
summarize(counts = n())

missä %>% on ns. putki-operaattori, jolla erillisiä operaatioita voidaan ketjuttaa. Tämän esimerkin toimenpiteen saisi tietysti myös tehtyä esim. aggregate-funktiolla, mutta dplyr:in hienous piileekin siinä, että operaatioita voidaan ketjuttaa loputtomasti, mikä mahdollistaa hyvin monimutkaiset muokkaukset. Jos on tykästynyt dplyr:iin ja kaipailee samanlaista Pythoniin (pandas toki mahdollistaa lähes vastaavan funktionaalisuuden), tähän on olemassa ratkaisu: dfply-kirjasto, jolla em. esimerkki koodataan näin:

(data >> 
 group_by(X.grouping1, X.grouping2) >> 
 summarize(counts = n()))

Rython, PythoR, …

R-Python integraatio on nykyisin sen verran aktiivista, että voisi luulla tämän olevan ihan päämäärätietoista. Python-puolella yhdentymistä pyrkii edistämään rpy2 -kirjasto, joka tuo käytännössä R:n Pythoniin. Vastaavasti, Pythonin koneoppimisvahvuuksia on tuotu R:n puolelle, esimerkiksi kääntämällä Keras-kirjasto R-kielelle. R:stä on myös mahdollista tehdä kutsuja Pythoniin ja pyytää dataa takaisin rPython-paketin avulla.

Toiminnallisesti vastaavia paketteja löytyy molemmista kielistä. Pythonin suosittua sklearn-kirjastoa taas vastaa hyvin pitkälti caret-R-paketti ja R:n visualisointipaketti ggplot2:a vastaa Pythonissa seaborn-kirjasto. Alustojenvälistä työskentelyä on helpotettu jopa luomalla uusi dataformaatti, jota molemmat kielet tukevat. Formaatin nimi on feather, ja se on käytännössä kieliagnostinen binäärinen tiedostorakenne datataulukoiden säilömiseen. Lukemalla feather-tiedoston R:ään (read_feather-funktiolla) palauttaa data.frame -objektin, kun taas Python (feather.read_dataframe-funktiolla) palauttaa pandas.DataFrame -objektin.

R:n ja Pythonin yhteen naittaminen on tehty jopa niin helpoksi, että molempia voi käyttää rinnan samassa ohjelmassa. Asentamalla reticulate -paketti on R-Studiossa mahdollista ajaa Python-blokkeja (kuten myös esim. bash, SQL ja Stan -blokkeja) R-Notebook-tiedostoissa. Esimerkiksi datan lukeminen Pythonin avulla R-Studiossa onnistuu vaikka näin:

```{python}
import pandas as pd
df = pd.read_csv('data.csv')
```

missä ` ` `{python} ` ` ` rajaa Python-koodi blokin.

Primääristi Pythonille tarkoitetuissa Jupyter Notebook -tiedostoissa taas voi ajaa R-blokkeja (sekä esim. julia, java ja ruby -blokkeja). Varsinkin Jupyter Notebook-maailmaan perehtymistä voi suositella, sillä monilla moderneilla koneoppimis-alustoilla — mm. DataBricks, Azure ML Service ja kotimainen Valohai — operoidaan pitkälti juuri näitä ”muistivihkoja” käyttäen. Jupyter Notebook:issa Star Wars hahmojen keskipituuden laskeminen silmien värin ja sukupuolen suhteen onnistuu R:llä esim. näin:

%load_ext rpy2.ipython
%%R
require(dplyr)
starwars %>% 
   group_by(eye_color,gender) %>% 
   summarize(`mean height` = mean(height)

Loppuun pieni mainos: Jos kiinnostuit aiheesta ja haluaisit tietää lisää, tervetuloa osallistumaan vetämiini R- ja/tai Python -koulutuksiin (tai muihin koulutuksiimme).


5.06.2018 / Nanni Koski

Mitä data scientistin tulee osata? Kuinka saada ajatus itämään siitä, millaisiin asioihin data scientist törmää työssään? Kuinka esittää asiat realistisesti? Ja kuinka saada koulutettavan käsitys toiminnan kokonaiskuvasta kukkimaan pidempään kuin pöytään kannettu tulppaanikimppu?

Interverkko

Näitä minä mietin tänään, kun suunnittelen uutta sisältöä meidän Data Sciencen perusteet -kurssille.

Tunne datasi

Turhaan ei sanota, että data scientistin työstä 80-90 % kuluu datan tutkimisessa, muuttujien selvittämisessä ja datan muokkaamisessa. Koulutettavan pitäisi siis tuntea pääsevänsä dataan sisälle. Kynsien alle kuuluukin jäädä multaa ja tarpeeksi perinpohjaisesti tutkimalla joukosta löytää aina matoja. Mitä paremmin datan tuntee, sitä enemmän herää kysymyksiä. Jos kaikki tuntuu helpolta, asiaa ei ole ajatellut tarpeeksi. Tai ehkä toinen data scientist on käynyt laittamassa datan kuntoon ennalta.

Valmiin siistin datan antaminen vie kaiken tutkimisen riemun (ja tuskan) ja latistaa kokemusta. Kuitenkin koulutuksessa halutaan tarjota muutakin sisältöä kuin datan muokkaamista lapiolla ja kuokalla. Tästä syystä myös koulutuksen valmistelussa suurin osa ajasta menee siihen, että löytää käyttöön sopivan datan. Jonkin nopeasti sisäistettävän, sisällöltään kiinnostavan, vapaasti saatavan, sopivan kokoisen, jossa on hyviä muuttujia. Ja tällaisen löytäessään saattaa joutua keräämään reaaliaikaista tietoa viikon, ennen kuin pääsee katsomaan, tuleeko datasta kiinnostavia tuloksia.

Dataan tutustuminen vaatii työtä

Tunne liiketoimintasi

Kun data on sisäistetty, tulee myös ymmärtää mihin datalla pyritään vastaamaan. Tai oikeastaan nämä kulkevat käsi kädessä. On hyvä ymmärtää jo aluksi liiketoiminnan ydin, jotta data voidaan muokata oikeaan suuntaan. Joskus nähdään jo ennalta, etteivät datan muuttujat voi tuoda lisäymmärrystä. Ehkä mukaan voisi liittää toiminnan kannalta relevanttia avointa dataa? Toisinaan tavoitteena on havainnollistaa data liiketoiminnan tarpeisiin.

Datasta voi siis tuottaa hyötyä liiketoiminnalle monella tavalla. Visuaalinen tarkastelu voi nostaa esille toiminnan ongelmakohtia ja eri näkökulmien yhdistäminen voi tuottaa uutta tietoa. Usein maalina on koneoppimisen hyödyntäminen, mutta paljon oppii myös matkalla siihen.

Ahaa-elämys

Tunne itsesi

Kouluttaja luo puitteet koulutuksen onnistumiselle. Aiheeseen perehtyneisyyden ja innostuksen kuuluu näkyä, sillä tavalla tuodaan positiivisuutta koulutuspäivään. Valitsemalla datan, joka innostaa sisällöllisesti ja muuttujiltaan myös itseä, saa kurssiin lisää eloa ja energiaa.

Tavoitteena innostuminen

Ennen kuin sukellan penkomaan Internetin loputonta datatarjontaa, esitänkin kysymyksen: Mikä sinua kiehtoo data sciencen maailmassa? Kurssipalautteen perusteella voi aina kehittää koulutusta, mutta parasta on, jos voi tuntea yleisönsä jo etukäteen.