Creare il testo di 99 bottiglie di birra sul muro

Uso improprio creativo di RapidMiner

Uno degli eventi più divertenti della conferenza RapidMiner Wisdom è il concorso di progettazione di processi di analisi predittiva dal vivo “Chi vuole essere un Data Miner? In questa competizione, i partecipanti devono progettare processi RapidMiner per un dato obiettivo in pochi minuti. I compiti sono legati all’analitica predittiva e all’analisi dei dati in generale, ma sono piuttosto insoliti. Infatti, la maggior parte delle sfide chiede cose che RapidMiner non avrebbe mai dovuto fare.

Durante RapidMiner Wisdom 2016 a New York City, avevamo di nuovo due compiti preparati per il pubblico. Tre coraggiosi concorrenti hanno lottato l’uno contro l’altro e contro l’orologio per trovare la soluzione giusta (o almeno qualcosa che fosse abbastanza vicino). Il primo compito di quest’anno era:

Creare il testo completo di “99 Bottles of Beer on the Wall”

Secondo Wikipedia, “99 Bottles of Beer è una canzone popolare anonima degli Stati Uniti risalente alla metà del XX secolo. È una canzone tradizionale sia negli Stati Uniti che in Canada. È popolare da cantare durante i lunghi viaggi, poiché ha un formato molto ripetitivo che è facile da memorizzare, e può richiedere molto tempo per cantare.”

Bene, sì. Alcuni dicono che ci sono numerosi problemi con questa canzone, ma questo – sebbene sia una lettura divertente – non è l’argomento di questo post. (A proposito, la canzone è apparsa molte volte anche nella cultura popolare: forse in particolare, almeno per alcuni, nel gioco Monkey Island.)

Ad ogni modo, ecco come fa la canzone:

99 bottiglie di birra sul muro, 99 bottiglie di birra.
Prendine una e passala in giro, 98 bottiglie di birra sul muro.
98 bottiglie di birra sul muro, 98 bottiglie di birra.
Prendine una e passala in giro, 97 bottiglie di birra sul muro.
97 bottiglie di birra sul muro, 97 bottiglie di birra.
Prendine una e passala in giro, 96 bottiglie di birra sul muro.

1 bottiglia di birra sul muro, 1 bottiglia di birra.
Prendine una e passala in giro, 0 bottiglie di birra sul muro.

Il testo completo può essere trovato qui ma penso che tu abbia capito l’idea.

Come possiamo risolvere il compito sopra con RapidMiner?

Partiamo prima con uno screenshot della soluzione:

process

Partiamo con l’operatore “Generate Data” e generiamo un set di dati casuale con solo 1 colonna e 100 esempi (fai le opportune impostazioni nei parametri dell’operatore). Questo non è forse il modo più elegante ma è uno dei modi più semplici in RapidMiner per ottenere un set di dati con una struttura e una dimensione specifica. Come passo successivo, ora abbiamo bisogno di numeri da 1 a 100 in una colonna extra. Anche in questo caso, ci sono diversi modi per ottenere questo risultato, ma il più semplice è probabilmente quello di usare l’operatore “Generate ID” che sta facendo esattamente questo. Ora possiamo usare “Select Attributes” e rimuovere le colonne che sono state originariamente generate da “Generate Data”, cioè teniamo solo la nostra nuova colonna “id”. Il risultato è un insieme di dati con 100 righe e i numeri da 1 a 100 in una colonna chiamata “id”.

Ora tutta la logica avviene nel prossimo operatore: “Genera Attributi”. Il problema principale che deve essere risolto è come trasformiamo la sequenza di numeri da 1 a 100 in una sequenza da 99 a 0? Beh, questo è facile: possiamo semplicemente generare un nuovo valore sottraendo da 100 l’attuale “id” in ogni riga. Allo stesso tempo aggiungiamo il resto dei testi intorno a quei numeri. Ecco come devi impostare i parametri di “Generate Attributes” per ottenere questo risultato:

generate_attributes

Ora potresti anche concatenare tutte queste nuove colonne in una sola, se vuoi. Lascio a voi il compito di capire come fare. Il risultato finale dopo l’esecuzione del processo assomiglia al seguente screenshot (che mostra solo l’inizio):

result

Se eseguite il processo da soli, controllate anche l’ultima riga. Ammetto che si potrebbe gestire un po’ meglio, dato che il testo creato finisce su: “0 bottiglie di birra sul muro, 0 bottiglie di birra. Prendine una e passala in giro. -1 bottiglie di birra sul muro”. Beh, non c’è niente di male con -1 bottiglie di birra per matematici e fisici ma alcuni sistemi IT potrebbero non gradire numeri negativi di oggetti.
Utilizzare RapidMiner per compiti come questo è ovviamente un po’, beh, strano. Ma mostra anche quanto sia flessibile e potente l’approccio visivo di RapidMiner. Altri hanno creato soluzioni praticamente in ogni linguaggio di programmazione sulla terra, alcune più brevi e altre più lunghe di altre. Ma io preferirei sempre la soluzione RapidMiner al codice della maggior parte di loro.

Di seguito c’è l’XML del processo completo. Puoi salvarlo in un file arbitrario sul tuo sistema e usare “File -> Import Process…” per portarlo in RapidMiner.

Divertiti a provarlo!

XML del processo:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.