Creating the Lyrics of 99 Bottles of Beer on the Wall

Creative Misuse of RapidMiner

A RapidMiner Wisdom konferencia egyik legszórakoztatóbb eseménye az élő prediktív analitikai folyamattervezési verseny “Ki akar adatbányász lenni?”. Ezen a versenyen a résztvevőknek néhány perc alatt RapidMiner folyamatokat kell tervezniük egy adott cél érdekében. A feladatok a prediktív analitikához és általában az adatelemzéshez kapcsolódnak, de meglehetősen szokatlanok. Valójában a kihívások többsége olyan dolgokat kér, amelyekre a RapidMiner sosem volt hivatott.”

A RapidMiner Wisdom 2016 New York-i rendezvényén ismét két feladattal készültünk a közönségnek. Három bátor versenyző küzdött egymással és az idővel, hogy megtalálják a helyes megoldást (vagy legalábbis valami olyat, ami elég közel áll hozzá). Az első feladat idén a következő volt:

Készítsd el a “99 Bottles of Beer on the Wall”

A Wikipedia szerint: “A 99 Bottles of Beer egy névtelen amerikai népdal a 20. század közepéről. Mind az Egyesült Államokban, mind Kanadában hagyományos dal. Hosszú utazásokon szívesen éneklik, mivel nagyon ismétlődő formája van, amit könnyű megjegyezni, és sokáig tarthat elénekelni.”

Hát igen. Egyesek szerint számos probléma van ezzel a dallal, de ez – bár vicces olvasmány – nem ennek a posztnak a témája. (A dal egyébként a populáris kultúrában is sokszor felbukkant már: a legjelentősebb talán – legalábbis egyesek számára – a Monkey Island című játékban.)

Mindenesetre a dal így hangzik:

99 üveg sör a falon, 99 üveg sör.
Vegyél le egyet és add körbe, 98 üveg sör a falon.
98 üveg sör a falon, 98 üveg sör.
Vegyél le egyet és add körbe, 97 üveg sör a falon.
97 üveg sör a falon, 97 üveg sör.
Vegyél le egyet és add körbe, 96 üveg sör a falon.

1 üveg sör a falon, 1 üveg sör.
Vegyél le egyet és add körbe, 0 üveg sör a falon.

A teljes szöveg itt található, de szerintem érted a lényeget.

Hogyan tudjuk megoldani a fenti feladatot RapidMinerrel?

Kezdjük először a megoldás képernyőképével:

process

Kezdjük az “Generate Data” operátorral és generálunk egy véletlenszerű adathalmazt csak 1 oszlopból és 100 példából (az operátor paramétereiben végezzük el a megfelelő beállításokat). Ez talán nem a legelegánsabb módszer, de a RapidMinerben az egyik legegyszerűbb módja annak, hogy egy meghatározott szerkezetű és méretű adathalmazt kapjunk. Következő lépésként most 1-től 100-ig terjedő számokra van szükségünk egy további oszlopban. Ismét többféleképpen is elérhetjük ezt, de a legegyszerűbb talán a “Generate ID” operátor használata, amely pontosan ezt teszi. Most már használhatjuk az “Attribútumok kiválasztása” opciót, és eltávolíthatjuk az eredetileg az “Adatok generálása” által generált oszlopokat, azaz csak az új “id” oszlopunkat tartjuk meg. Az eredmény egy 100 soros adathalmaz lesz, amelyben az 1-től 100-ig terjedő számok egy “id” nevű oszlopban szerepelnek.

Most az összes logika a következő operátorban történik: “Attribútumok generálása”. A fő megoldandó probléma az, hogy hogyan alakítjuk át az 1-től 100-ig terjedő számsorozatot 99-től 0-ig terjedő számsorozattá? Nos, ez egyszerű: egyszerűen generálhatunk egy új értéket úgy, hogy minden sorban az aktuális “id”-t kivonjuk a 100-ból. Ezzel egyidejűleg hozzáadjuk a többi szöveget e számok körül. Az alábbi módon kell beállítanunk a “Generate Attributes” paramétereit, hogy ezt elérjük:

generate_attributes

Most ezeket az új oszlopokat akár egyetlen oszlopba is összefűzhetjük, ha akarjuk. Rád bízom, hogy kitaláld, hogyan. A folyamat végrehajtása utáni végeredmény ezután úgy néz ki, mint az alábbi képernyőkép (csak az elejét mutatja):

result

Ha te magad is lefuttatod a folyamatot, nézd meg az utolsó sort is. Elismerem, hogy ezt egy kicsit jobban is kezelhetnénk, hiszen a létrehozott szövegek vége a: “0 üveg sör a falon, 0 üveg sör. Vegyél le egyet és add körbe. -1 üveg sör a falon.” Nos, a matematikusok és fizikusok számára a -1 üveg sörrel nincs semmi baj, de egyes informatikai rendszerek talán nem szeretik a negatív objektumszámokat.
A RapidMiner használata ilyen feladatokra persze egy kicsit, nos, furcsa. De azt is mutatja, hogy a RapidMiner vizuális megközelítése valójában mennyire rugalmas és erőteljes. Mások gyakorlatilag a világ összes programozási nyelvén készítettek megoldásokat, némelyik rövidebb, némelyik hosszabb, mint a többi. De én mindig is a RapidMiner megoldását részesíteném előnyben a legtöbbjük kódjával szemben.

Az alábbiakban a teljes folyamat XML-je látható. Elmentheted egy tetszőleges fájlba a rendszereden, és a “File -> Import Process…” paranccsal be tudod juttatni a RapidMinerbe.

Have fun trying this out!

XML of the Process:

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.