Skabelse af teksten til 99 flasker øl på væggen

Kreativt misbrug af RapidMiner

En af de sjoveste begivenheder på RapidMiner Wisdom-konferencen er den live predictive analytics procesdesignkonkurrence “Who Wants to be a Data Miner?” I denne konkurrence skal deltagerne designe RapidMiner-processer til et givet mål inden for få minutter. Opgaverne er relateret til predictive analytics og dataanalyse generelt, men er ret ualmindelige. Faktisk beder de fleste af udfordringerne om ting, som RapidMiner aldrig skulle have gjort.

I forbindelse med RapidMiner Wisdom 2016 i New York City havde vi igen to opgaver forberedt til publikum. Tre modige deltagere kæmpede mod hinanden og uret for at finde den rigtige løsning (eller i det mindste noget, der er tæt nok på). Den første opgave i år var:

Skab den fulde tekst til “99 Bottles of Beer on the Wall”

Iflg. Wikipedia er “99 Bottles of Beer en anonym amerikansk folkesang fra midten af det 20. århundrede. Det er en traditionel sang i både USA og Canada. Den er populær at synge på lange ture, da den har et meget gentagende format, som er let at lære udenad, og kan tage lang tid at synge.”

Nå, ja. Nogle siger, at der er mange problemer med denne sang, men det er – selv om det er sjov læsning – ikke emnet for dette indlæg. (I øvrigt har sangen også optrådt mange gange i populærkulturen: måske mest bemærkelsesværdigt, i hvert fald for nogle, i spillet Monkey Island.)

Her er i hvert fald, hvordan sangen lyder:

99 flasker øl på væggen, 99 flasker øl.
Tag en ned og giv den rundt, 98 flasker øl på væggen.
98 flasker øl på væggen, 98 flasker øl.
Tag en ned og send den rundt, 97 flasker øl på væggen.
97 flasker øl på væggen, 97 flasker øl.
Tag en ned og send den rundt, 96 flasker øl på væggen.

1 flaske øl på væggen, 1 flaske øl.
Tag en ned og send den rundt, 0 flasker øl på væggen.

Den fulde tekst kan findes her, men jeg tror du har forstået det.

Så hvordan kan vi løse ovenstående opgave med RapidMiner?

Lad os starte med et skærmbillede af løsningen først:

process

Vi starter med operatoren “Generate Data” og genererer et tilfældigt datasæt med kun 1 kolonne og 100 eksempler (lav de relevante indstillinger i parametrene for operatoren). Dette er måske ikke den mest elegante måde, men en af de nemmeste måder i RapidMiner at få et datasæt med en bestemt struktur og størrelse på. Som et næste skridt har vi nu brug for tal fra 1 til 100 i en ekstra kolonne. Igen er der flere måder at opnå dette på, men den enkleste er nok at bruge operatoren “Generate ID”, som gør netop dette. Vi kan nu bruge “Select Attributes” og fjerne de kolonner, som oprindeligt er blevet genereret af “Generate Data”, dvs. vi beholder kun vores nye “id”-kolonne. Resultatet er et datasæt med 100 rækker og tallene 1 til 100 i én kolonne med navnet “id”.

Nu sker al logikken i den næste operatør: “Generere attributter”. Det største problem, der skal løses, er, hvordan vi omdanner talsekvensen fra 1 til 100 til en sekvens fra 99 til 0? Det er nemt: Vi kan bare generere en ny værdi ved at trække det aktuelle “id” i hver række fra 100. Samtidig tilføjer vi resten af teksterne omkring disse tal. Her er hvordan du skal indstille parametrene for “Generate Attributes” for at opnå dette:

generate_attributes

Nu kan du endda sammenkæde alle disse nye kolonner til en enkelt, hvis du ønsker det. Jeg overlader det til dig at finde ud af hvordan. Det endelige resultat efter at have udført processen ser så ud som følgende skærmbillede (viser kun begyndelsen):

result

Hvis du selv kører processen, skal du også tjekke den sidste linje. Jeg indrømmer, at vi kunne håndtere dette lidt bedre, da de oprettede tekster slutter på: “0 flasker øl på væggen, 0 flasker øl. Tag en ned og del den rundt. -1 flasker øl på væggen.” Tja, der er ikke noget galt med -1 flasker øl for matematikere og fysikere, men nogle IT-systemer bryder sig måske ikke om negative tal for objekter.
Brug af RapidMiner til opgaver som denne er selvfølgelig lidt, ja, mærkeligt. Men det viser også, hvor fleksibel og kraftfuld den visuelle tilgang i RapidMiner faktisk er. Andre har skabt løsninger i stort set alle programmeringssprog på jorden, nogle kortere og nogle længere end andre. Men jeg vil altid foretrække RapidMiner-løsningen frem for koden fra de fleste af dem.

Nedenfor er XML’en af den komplette proces. Du kan gemme den i en vilkårlig fil på dit system og bruge “File -> Import Process…” for at få den ind i RapidMiner.

Have fun trying this out!

XML of the Process:

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.