Tvorba textu 99 lahví piva na zdi

Kreativní zneužití RapidMineru

Jednou z nejzábavnějších událostí konference RapidMiner Wisdom je živá soutěž v navrhování procesů prediktivní analýzy „Kdo chce být data minerem?“. V této soutěži musí účastníci během několika minut navrhnout procesy RapidMiner pro zadaný cíl. Úkoly se týkají prediktivní analýzy a analýzy dat obecně, ale jsou poměrně neobvyklé. Ve skutečnosti většina úloh požaduje věci, které RapidMiner nikdy neměl dělat.

Během konference RapidMiner Wisdom 2016 v New Yorku jsme měli pro posluchače opět připraveny dvě úlohy. Tři odvážní soutěžící bojovali proti sobě a času, aby našli správné řešení (nebo alespoň něco, co se mu dostatečně blíží). První letošní úloha zněla:

Vytvořte celý text písně „99 Bottles of Beer on the Wall“

Podle Wikipedie: „99 Bottles of Beer je anonymní lidová píseň Spojených států z poloviny 20. století. Jedná se o tradiční píseň ve Spojených státech i v Kanadě. S oblibou se zpívá na dlouhých cestách, protože má velmi opakující se formát, který se snadno zapamatuje, a může trvat dlouho.“

No jo. Někteří tvrdí, že s touto písní je řada problémů, ale to – ačkoli je to zábavné čtení – není předmětem tohoto příspěvku. (Mimochodem, píseň se mnohokrát objevila i v populární kultuře: možná nejvýrazněji, alespoň pro někoho, ve hře Opičí ostrov.)

Aneb jak píseň zní:

99 lahví piva na zdi, 99 lahví piva.
Vezmi jednu dolů a podávej ji kolem, 98 lahví piva na zdi.
98 lahví piva na zdi, 98 lahví piva.
Vezmi jednu dolů a podej ji kolem, 97 lahví piva na zdi.
97 lahví piva na zdi, 97 lahví piva.
Vezmi jednu dolů a podej ji kolem, 96 lahví piva na zdi.

1 láhev piva na stěně, 1 láhev piva.
Vezmi jednu dolů a projdi ji kolem, 0 lahví piva na stěně.

Plný text najdete zde, ale myslím, že jste pochopili, o co jde.

Jak tedy můžeme výše uvedenou úlohu vyřešit pomocí RapidMineru?

Nejprve začneme snímkem obrazovky s řešením:

process

Začneme operátorem „Generate Data“ a vygenerujeme náhodnou sadu dat pouze s 1 sloupcem a 100 příklady (provedeme příslušná nastavení v parametrech operátoru). Možná to není nejelegantnější způsob, ale jeden z nejjednodušších způsobů, jak v RapidMineru získat soubor dat s určitou strukturou a velikostí. Jako další krok nyní potřebujeme čísla od 1 do 100 v dalším sloupci. Opět existuje více způsobů, jak toho dosáhnout, ale nejjednodušší je pravděpodobně použití operátoru „Generate ID“, který přesně toto dělá. Nyní můžeme použít „Select Attributes“ a odstranit sloupce, které byly původně vygenerovány pomocí „Generate Data“, tj. ponecháme si pouze náš nový sloupec „id“. Výsledkem je datová sada se 100 řádky a čísly 1 až 100 v jednom sloupci s názvem „id“.

Nyní se veškerá logika odehrává v dalším operátoru: „Generovat atributy“. Hlavní problém, který je třeba vyřešit, je, jak transformovat posloupnost čísel od 1 do 100 na posloupnost od 99 do 0? No, to je snadné: můžeme prostě vygenerovat novou hodnotu odečtením aktuálního „id“ v každém řádku od hodnoty 100. Současně přidáme zbytek textů kolem těchto čísel. Zde je uvedeno, jak je třeba nastavit parametry funkce „Generovat atributy“, abyste toho dosáhli:

generate_attributes

Nyní můžete dokonce všechny tyto nové sloupce spojit do jednoho, pokud chcete. Nechám na vás, abyste přišli na to, jak. Konečný výsledek po provedení procesu pak vypadá jako na následujícím obrázku (ukazuje pouze začátek):

result

Pokud proces spustíte sami, podívejte se také na poslední řádek. Uznávám, že bychom to mohli zvládnout o něco lépe, protože vytvořené texty končí na: „0 lahví piva na zdi, 0 lahví piva. Jednu sundej a podávej si ji. -1 lahví piva na stěně“. No, na -1 lahvích piva pro matematiky a fyziky není nic špatného, ale některým IT systémům se záporná čísla objektů nemusí líbit.
Používat RapidMiner pro takovéto úlohy je samozřejmě trochu, no, zvláštní. Ale také to ukazuje, jak flexibilní a výkonný vizuální přístup RapidMineru ve skutečnosti je. Jiní vytvořili řešení prakticky ve všech programovacích jazycích na světě, některá kratší a jiná delší než ostatní. Vždy bych ale dal přednost řešení RapidMiner před kódem většiny z nich.

Níže je XML celého procesu. Můžete si ho uložit do libovolného souboru v systému a pomocí příkazu „Soubor -> Importovat proces…“ ho dostat do RapidMineru.

Přeji vám příjemnou zábavu při zkoušení!“

XML procesu:

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.