Creating the Lyrics of 99 Bottles of Beer on the Wall

Creative Misuse of RapidMiner

Jednym z najzabawniejszych wydarzeń na konferencji RapidMiner Wisdom jest konkurs projektowania procesów analityki predykcyjnej na żywo „Who Wants to be a Data Miner?”. W tym konkursie uczestnicy muszą w ciągu kilku minut zaprojektować procesy RapidMiner dla zadanego celu. Zadania są związane z analityką predykcyjną i ogólnie z analizą danych, ale są raczej niecodzienne. W rzeczywistości, większość wyzwań prosi o rzeczy, których RapidMiner nigdy nie miał robić.

Podczas RapidMiner Wisdom 2016 w Nowym Jorku, ponownie mieliśmy dwa zadania przygotowane dla publiczności. Trzech odważnych zawodników walczyło ze sobą i zegarem, aby znaleźć właściwe rozwiązanie (lub przynajmniej coś, co jest wystarczająco blisko). Pierwsze zadanie w tym roku brzmiało:

Utwórz pełny tekst piosenki „99 Bottles of Beer on the Wall”

Według Wikipedii, „99 Bottles of Beer to anonimowa piosenka ludowa ze Stanów Zjednoczonych datowana na połowę XX wieku. Jest to tradycyjna piosenka zarówno w Stanach Zjednoczonych, jak i w Kanadzie. Jest popularna do śpiewania na długich wycieczkach, ponieważ ma bardzo powtarzalny format, który jest łatwy do zapamiętania i może zająć dużo czasu, aby śpiewać.”

Well, yeah. Niektórzy twierdzą, że istnieją liczne problemy z tą piosenką, ale to jest – choć zabawna lektura – nie jest tematem tego postu. (Przy okazji, piosenka pojawiła się wiele razy w kulturze popularnej, jak również: być może najbardziej zauważalnie, przynajmniej dla niektórych, w grze Monkey Island.)

Anyway, oto jak piosenka idzie:

99 butelek piwa na ścianie, 99 butelek piwa.
Zabierz jedną i podaj ją wokół, 98 butelek piwa na ścianie.
98 butelek piwa na ścianie, 98 butelek piwa.
Zdejmij jedną i podaj dookoła, 97 butelek piwa na ścianie.
97 butelek piwa na ścianie, 97 butelek piwa.
Zdejmij jedną i podaj dookoła, 96 butelek piwa na ścianie.

1 butelka piwa na ścianie, 1 butelka piwa.
Zabierz jedną w dół i podaj ją dookoła, 0 butelek piwa na ścianie.

Pełny tekst można znaleźć tutaj, ale myślę, że masz pomysł.

Więc jak możemy rozwiązać powyższe zadanie za pomocą RapidMiner?

Zacznijmy najpierw od zrzutu ekranu z rozwiązaniem:

process

Zaczynamy od operatora „Generate Data” i generujemy losowy zbiór danych zawierający tylko 1 kolumnę i 100 przykładów (dokonujemy odpowiednich ustawień w parametrach operatora). Nie jest to może najbardziej elegancki sposób, ale jeden z najprostszych w RapidMinerze na uzyskanie zbioru danych o określonej strukturze i wielkości. W kolejnym kroku potrzebujemy teraz liczb od 1 do 100 w dodatkowej kolumnie. Ponownie, istnieje wiele sposobów, aby to osiągnąć, ale najprostszym jest prawdopodobnie użycie operatora „Generate ID”, który właśnie to robi. Możemy teraz użyć „Select Attributes” i usunąć kolumny, które zostały pierwotnie wygenerowane przez „Generate Data”, tzn. zachowujemy tylko naszą nową kolumnę „id”. Wynikiem jest zbiór danych z 100 wierszami i liczbami od 1 do 100 w jednej kolumnie o nazwie „id”.

Teraz cała logika dzieje się w następnym operatorze: „Generate Attributes”. Głównym problemem, który należy rozwiązać jest to, jak przekształcić ciąg liczb od 1 do 100 w ciąg od 99 do 0? Cóż, to proste: możemy po prostu wygenerować nową wartość poprzez odjęcie aktualnego „id” w każdym wierszu od 100. W tym samym czasie dodajemy resztę tekstów wokół tych liczb. Oto jak należy ustawić parametry „Generate Attributes”, aby to osiągnąć:

generate_attributes

Teraz możesz nawet połączyć wszystkie te nowe kolumny w jedną, jeśli chcesz. Pozostawiam to tobie, abyś dowiedział się jak. Wynik końcowy po wykonaniu procesu wygląda jak na poniższym zrzucie ekranu (pokazującym tylko początek):

result

Jeśli uruchomisz proces samodzielnie, sprawdź również ostatnią linię. Przyznaję, że można było sobie z tym poradzić nieco lepiej, gdyż stworzony tekst kończy się na: „0 butelek piwa na ścianie, 0 butelek piwa. Take one down and pass it around. -1 butelka piwa na ścianie.” Cóż, nie ma nic złego w -1 butelkach piwa dla matematyków i fizyków, ale niektóre systemy IT mogą nie lubić ujemnych liczb obiektów.
Używanie RapidMiner do zadań takich jak to jest oczywiście trochę, cóż, dziwne. Ale pokazuje to również, jak elastyczne i potężne jest wizualne podejście RapidMiner w rzeczywistości. Inni stworzyli rozwiązania w praktycznie każdym języku programowania na ziemi, niektóre krótsze, a niektóre dłuższe niż inne. Ale ja zawsze wolałbym rozwiązanie RapidMiner od kodu większości z nich.

Poniżej znajduje się XML kompletnego procesu. Możesz zapisać go w dowolnym pliku w systemie i użyć „File -> Import Process…”, aby wprowadzić go do RapidMiner.

Miłej zabawy z wypróbowywaniem tego!

XML procesu:

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.