99 olutpullon sanoitusten luominen seinälle

Creative Misuse of RapidMiner

Yksi RapidMiner Wisdom -konferenssin hauskimmista tapahtumista on suorassa lähetyksessä järjestettävä ennakoivan analytiikan prosessisuunnittelukilpailu ”Kuka haluaa olla datanlouhija”. Tässä kilpailussa osallistujien on suunniteltava RapidMiner-prosessit annettua tavoitetta varten muutamassa minuutissa. Tehtävät liittyvät ennakoivaan analytiikkaan ja data-analyysiin yleensä, mutta ovat melko harvinaisia. Itse asiassa useimmissa haasteissa kysytään asioita, joita RapidMinerin ei ole koskaan ollut tarkoituskaan tehdä.

New Yorkissa järjestetyssä RapidMiner Wisdom 2016 -tapahtumassa meillä oli jälleen kaksi tehtävää valmiina yleisölle. Kolme rohkeaa kilpailijaa taisteli toisiaan ja kelloa vastaan löytääkseen oikean ratkaisun (tai ainakin jotain, joka on tarpeeksi lähellä). Ensimmäinen tehtävä oli tänä vuonna:

Luo koko sanoitus kappaleeseen ”99 Bottles of Beer on the Wall”

Wikipedian mukaan ”99 Bottles of Beer on anonyymi yhdysvaltalainen kansanlaulu 1900-luvun puolivälistä. Se on perinteinen laulu sekä Yhdysvalloissa että Kanadassa. Sitä lauletaan mielellään pitkillä matkoilla, sillä sen toistuva muoto on helppo painaa mieleen, ja sen laulaminen voi kestää kauan.”

Niin, joo. Jotkut sanovat, että tässä laulussa on lukuisia ongelmia, mutta tämä ei ole – vaikka hauskaa luettavaa – tämän postauksen aihe. (Laulu on muuten esiintynyt moneen kertaan myös populaarikulttuurissa: ehkä merkittävimmin, ainakin joidenkin mielestä, Monkey Island -pelissä.)

Jokatapauksessa laulu menee näin:

99 pulloa olutta seinällä, 99 pulloa olutta.
Nauhaa yksi alas ja ojenna se ympäriinsä, 98 pulloa olutta seinällä.
98 kaljapulloa seinällä, 98 kaljapulloa.
Take one down and pass it around, 97 kaljapulloa seinällä.
97 kaljapulloa seinällä, 97 kaljapulloa.
Take one down and pass it around, 96 kaljapulloa seinällä.

1 pullo olutta seinällä, 1 pullo olutta.
Take one down and pass it around, 0 pulloa olutta seinällä.

Täydellinen sanoitus löytyy täältä, mutta uskon, että sait idean selville.

Miten voimme siis ratkaista yllä olevan tehtävän RapidMinerilla?

Aloitetaan ensin kuvakaappauksella ratkaisusta:

process

Aloitetaan operaattorilla ”Generate Data” ja luodaan satunnainen datajoukko, jossa on vain 1 sarake ja 100 esimerkkiä (tehdään tarvittavat asetukset operaattorin parametreihin). Tämä ei ehkä ole kaikkein tyylikkäin tapa, mutta yksi RapidMinerin helpoimmista tavoista saada tietosarja, jolla on tietty rakenne ja koko. Seuraavaksi tarvitsemme nyt numeroita 1-100 ylimääräiseen sarakkeeseen. Tähänkin on useita tapoja, mutta yksinkertaisin lienee käyttää operaattoria ”Generate ID”, joka tekee juuri näin. Voimme nyt käyttää ”Select Attributes” -toimintoa ja poistaa sarakkeet, jotka on alun perin luotu ”Generate Data” -toiminnolla, eli säilytämme vain uuden ”id”-sarakkeemme. Tuloksena on tietokokonaisuus, jossa on 100 riviä ja numerot 1-100 yhdessä sarakkeessa nimeltä ”id”.

Nyt kaikki logiikka tapahtuu seuraavassa operaattorissa: ”Generate Attributes”. Tärkein ratkaistava ongelma on, miten muutamme numerosarjan 1-100 numerosarjaksi 99-0? Se on helppoa: voimme vain luoda uuden arvon vähentämällä 100:sta kunkin rivin nykyisen ”id:n”. Samalla lisäämme loput sanat näiden numeroiden ympärille. Näin sinun on asetettava ”Generate Attributes” -ohjelman parametrit tämän saavuttamiseksi:

generate_attributes

Nyt voit halutessasi jopa ketjuttaa kaikki nämä uudet sarakkeet yhdeksi sarakkeeksi. Jätän sen sinun huoleksesi, että keksit miten. Lopputulos prosessin suorittamisen jälkeen näyttää sitten seuraavalta kuvakaappaukselta (näyttää vain alun):

result

Jos suoritat prosessin itse, tarkista myös viimeinen rivi. Myönnän, että voisimme hoitaa tämän hieman paremmin, koska luodut sanoitukset päättyvät osoitteeseen: ”0 olutpulloa seinällä, 0 olutpulloa. Ota yksi alas ja anna se ympäriinsä. -1 pulloa olutta seinällä.” No, matemaatikoille ja fyysikoille -1 pullossa olutta ei ole mitään vikaa, mutta jotkut IT-järjestelmät eivät ehkä pidä negatiivisista objektiluvuista.
RapidMinerin käyttäminen tämänkaltaisiin tehtäviin on tietysti hieman, no, outoa. Mutta se osoittaa myös sen, miten joustava ja tehokas RapidMinerin visuaalinen lähestymistapa todella on. Muut ovat luoneet ratkaisuja käytännössä kaikilla maailman ohjelmointikielillä, toiset lyhyemmillä ja toiset pidemmillä kuin toiset. Mutta suosisin aina RapidMiner-ratkaisua useimpien heistä koodin sijaan.

Alhaalla on koko prosessin XML-tiedosto. Voit tallentaa sen mielivaltaiseen tiedostoon järjestelmässäsi ja käyttää ”File -> Import Process…” -toimintoa saadaksesi sen RapidMineriin.

Hyvää jatkokokeilua!

Prosessin XML:

Vastaa

Sähköpostiosoitettasi ei julkaista.