Creando la letra de 99 botellas de cerveza en la pared

Un mal uso creativo de RapidMiner

Uno de los eventos más divertidos de la conferencia RapidMiner Wisdom es el concurso de diseño de procesos de análisis predictivo en vivo «¿Quién quiere ser un minero de datos?» En este concurso, los participantes deben diseñar procesos RapidMiner para un objetivo determinado en pocos minutos. Las tareas están relacionadas con el análisis predictivo y el análisis de datos en general, pero son bastante poco comunes. De hecho, la mayoría de los retos piden cosas que RapidMiner nunca debió hacer.

Durante el RapidMiner Wisdom 2016 en la ciudad de Nueva York, volvimos a tener dos tareas preparadas para el público. Tres valientes concursantes lucharon entre sí y contra el reloj para encontrar la solución correcta (o al menos algo que se acerque lo suficiente). La primera tarea de este año era:

Crear la letra completa de «99 Bottles of Beer on the Wall»

Según Wikipedia, «99 Bottles of Beer es una canción folclórica anónima de Estados Unidos que data de mediados del siglo XX. Es una canción tradicional tanto en Estados Unidos como en Canadá. Es popular para cantar en los viajes largos, ya que tiene un formato muy repetitivo que es fácil de memorizar, y puede tardar mucho tiempo en cantarse»

Bueno, sí. Hay quien dice que hay numerosos problemas con esta canción pero esto -aunque es una lectura divertida- no es el tema de este post. (Por cierto, la canción ha aparecido muchas veces en la cultura popular también: quizás la más notable, al menos para algunos, en el juego Monkey Island.)

De todos modos, así es como dice la canción:

99 botellas de cerveza en la pared, 99 botellas de cerveza.
Toma una y pásala, 98 botellas de cerveza en la pared.
98 botellas de cerveza en la pared, 98 botellas de cerveza.
Toma una hacia abajo y pásala alrededor, 97 botellas de cerveza en la pared.
97 botellas de cerveza en la pared, 97 botellas de cerveza.
Toma una hacia abajo y pásala alrededor, 96 botellas de cerveza en la pared.

1 botella de cerveza en la pared, 1 botella de cerveza.
Toma una hacia abajo y pásala alrededor, 0 botellas de cerveza en la pared.

La letra completa se puede encontrar aquí, pero creo que has captado la idea.

Entonces, ¿cómo podemos resolver la tarea anterior con RapidMiner?

Empecemos con una captura de pantalla de la solución primero:

process

Empezamos con el operador «Generar datos» y generamos un conjunto de datos aleatorios con sólo 1 columna y 100 ejemplos (hacer los ajustes adecuados en los parámetros del operador). Quizá no sea la forma más elegante, pero sí una de las más sencillas en RapidMiner para obtener un conjunto de datos con una estructura y tamaño específicos. Como siguiente paso, ahora necesitamos números del 1 al 100 en una columna adicional. De nuevo, hay múltiples formas de conseguirlo pero la más sencilla es probablemente utilizar el operador «Generar ID» que hace exactamente eso. Ahora podemos utilizar «Seleccionar atributos» y eliminar las columnas que han sido generadas originalmente por «Generar datos», es decir, sólo mantenemos nuestra nueva columna «id». El resultado es un conjunto de datos con 100 filas y los números del 1 al 100 en una columna llamada «id».

Ahora toda la lógica ocurre en el siguiente operador: «Generar Atributos». El principal problema que hay que resolver es ¿cómo transformamos la secuencia de números del 1 al 100 en una secuencia del 99 al 0? Pues es fácil: podemos generar un nuevo valor restando a 100 el «id» actual de cada fila. Al mismo tiempo, añadimos el resto de las letras alrededor de esos números. Así es como hay que configurar los parámetros de «Generar atributos» para conseguirlo:

generate_attributes

Ahora incluso podrías concatenar todas estas nuevas columnas en una sola si quieres. Te dejo que descubras cómo hacerlo. El resultado final después de ejecutar el proceso se parece entonces a la siguiente captura de pantalla (sólo muestra el principio):

result

Si ejecutas el proceso tú mismo, fíjate también en la última línea. Reconozco que podríamos manejar esto un poco mejor ya que la letra creada termina en: «0 botellas de cerveza en la pared, 0 botellas de cerveza. Toma una y pásala. -1 botellas de cerveza en la pared». Bueno, no hay nada malo con -1 botellas de cerveza para los matemáticos y los físicos, pero algunos sistemas de TI podría no gustar los números negativos de los objetos.
Usar RapidMiner para tareas como esta es, por supuesto, un poco, bueno, extraño. Pero también demuestra lo flexible y potente que es el enfoque visual de RapidMiner. Otros han creado soluciones en prácticamente todos los lenguajes de programación del mundo, algunos más cortos y otros más largos que otros. Pero yo siempre preferiría la solución de RapidMiner sobre el código de la mayoría de ellos.

Abajo está el XML del proceso completo. Puede guardarlo en un archivo arbitrario en su sistema y utilizar «Archivo -> Importar Proceso…» para obtenerlo en RapidMiner.

¡Diviértase probando esto!

XML del Proceso:

Deja una respuesta

Tu dirección de correo electrónico no será publicada.