Creating the Lyrics of 99 Bottles of Beer on the Wall

Creative Misuse of RapidMiner

Een van de leukste evenementen op de RapidMiner Wisdom conferentie is de live predictive analytics procesontwerpwedstrijd “Who Wants to be a Data Miner?”. In deze wedstrijd moeten deelnemers binnen een paar minuten RapidMiner processen ontwerpen voor een gegeven doel. De opgaven zijn gerelateerd aan predictive analytics en data-analyse in het algemeen, maar zijn vrij ongebruikelijk. In feite vragen de meeste opgaven om dingen die RapidMiner nooit had moeten doen.

Tijdens RapidMiner Wisdom 2016 in New York City hadden we weer twee opgaven voorbereid voor het publiek. Drie dappere deelnemers streden tegen elkaar en de klok om de juiste oplossing te vinden (of in ieder geval iets dat dicht genoeg in de buurt komt). De eerste opdracht dit jaar was:

Bedenk de volledige tekst van “99 Bottles of Beer on the Wall”

Volgens Wikipedia is “99 Bottles of Beer een anoniem Amerikaans volksliedje uit het midden van de 20e eeuw. Het is een traditioneel lied in zowel de Verenigde Staten als Canada. Het is populair om te zingen op lange reizen, omdat het een zeer repetitieve indeling heeft die gemakkelijk te onthouden is, en lang kan duren om te zingen.”

Wel, ja. Sommigen zeggen dat er talrijke problemen zijn met dit lied, maar dit is – hoewel grappig om te lezen – niet het onderwerp van deze post. (Overigens is het liedje ook al vaak in de populaire cultuur opgedoken: misschien wel het meest in het oog springend, althans voor sommigen, in het spel Monkey Island.)

Hoe dan ook, hier is hoe het liedje gaat:

99 flessen bier aan de muur, 99 flessen bier.
Take one down and pass it around, 98 flessen bier aan de muur.
98 flesjes bier aan de muur, 98 flesjes bier.
Take one down and pass it around, 97 flesjes bier aan de muur.
97 flesjes bier aan de muur, 97 flesjes bier.
Take one down and pass it around, 96 flesjes bier aan de muur.

1 flesje bier aan de muur, 1 flesje bier.
Neem er een naar beneden en geef hem door, 0 flesjes bier aan de muur.

De volledige tekst is hier te vinden, maar ik denk dat je het wel snapt.

Hoe kunnen we bovenstaande opgave dus oplossen met RapidMiner?

Laten we eerst beginnen met een screenshot van de oplossing:

process

We beginnen met de operator “Generate Data” en genereren een willekeurige dataset met slechts 1 kolom en 100 voorbeelden (maak de juiste instellingen in de parameters van de operator). Dit is misschien niet de meest elegante manier, maar wel een van de gemakkelijkste manieren in RapidMiner om een dataset te krijgen met een specifieke structuur en grootte. Als volgende stap hebben we nu getallen van 1 tot 100 nodig in een extra kolom. Ook hier zijn meerdere manieren om dit te bereiken maar de eenvoudigste is waarschijnlijk om de operator “Generate ID” te gebruiken die precies dat doet. We kunnen nu “Select Attributes” gebruiken en de kolommen verwijderen die oorspronkelijk zijn gegenereerd door “Generate Data”, d.w.z. we behouden alleen onze nieuwe “id” kolom. Het resultaat is een dataset met 100 rijen en de getallen 1 tot 100 in één kolom met de naam “id”.

Nu gebeurt alle logica in de volgende operator: “Generate Attributes”. Het hoofdprobleem dat moet worden opgelost is hoe transformeren we de getallenreeks van 1 tot 100 in een reeks van 99 tot 0? Dat is eenvoudig: we kunnen gewoon een nieuwe waarde genereren door de huidige “id” in elke rij af te trekken van 100. Tegelijkertijd voegen we de rest van de teksten rond die getallen toe. Hier is hoe je de parameters van “Generate Attributes” moet instellen om dit te bereiken:

generate_attributes

Nu zou je zelfs al deze nieuwe kolommen kunnen aaneenschakelen in één enkele kolom als je dat zou willen. Ik laat het aan u over om uit te zoeken hoe. Het eindresultaat na het uitvoeren van het proces ziet er dan uit als de volgende schermafbeelding (alleen het begin wordt getoond):

result

Als u het proces zelf uitvoert, kijk dan ook eens naar de laatste regel. Ik geef toe dat we dit wat beter zouden kunnen afhandelen, aangezien de gemaakte teksten eindigen op: “0 flesjes bier aan de muur, 0 flesjes bier. Haal er een neer en geef het rond. -1 flesjes bier aan de muur.” Welnu, er is niets mis met -1 flesjes bier voor wis- en natuurkundigen, maar sommige IT-systemen houden misschien niet van negatieve aantallen objecten.
RapidMiner gebruiken voor taken als deze is natuurlijk een beetje, nou ja, vreemd. Maar het laat ook zien hoe flexibel en krachtig de visuele benadering van RapidMiner eigenlijk is. Anderen hebben oplossingen gemaakt in praktisch elke programmeertaal op aarde, de een korter en de ander langer dan de ander. Maar ik zou altijd de RapidMiner oplossing verkiezen boven de code van de meesten van hen.

Hieronder staat de XML van het complete proces. U kunt het opslaan in een willekeurig bestand op uw systeem en “File -> Import Process…” gebruiken om het in RapidMiner te krijgen.

Veel plezier bij het uitproberen!

XML van het proces:

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.