Primeros pasos en Knime, el mejor software para minería de datos

Hoy vamos a dar los primeros pasos con Knime, un excelente software de analisis de Data Mining, Minería de datos en español o para la explotación de Big Data. Se trata de un software gratuito que puedes desde descargar aquí

Qué vamos a ver sobre Knime en este artículo

En este artículo aprenderemos a hacer las siguientes cosas con Knime:
  • Importar Datasets
  • Creación de Diccionarios
  • Ampliación de estadísticas
  • Conversiones de tipo

Nodos que vamos a usar

En este artículo usaremos los siguientes nodos de Knime
  • Nodos de entrada de datos
  • Boxplot
  • Statistics
  • Numeric to String

Datasets que usaremos

En este artículo vamos a usar un Dataset del Titanic y el de Iris

Dataset del Titanic

Importar Datasets en Knime

Importar Datasets en Knime es realmente sencillo. Dependiendo del tipo de archivo que sea (xls, csv...) usaremos uno de los nodos que Knime nos ofrece. En este caso vamos a Importar el dataset de Iris que es un archivo xls con el nodo "Excel Reader (XLS)".
  1. Buscamos el nodo en "Node Repository"
  2. Arrastramos el nodo a la pizarra para trabajar con el.

Importar Datasets en Knime

A continuación:
  1. Hacemos clic derecho > Configure para configurar el nodo (este proceso será igual para todos los nodos).
  2. Elegiremos la ruta de nuestro equipo donde esté el dataset.

Importar Datasets en Knime

Podemos marcar o no la casilla que os muestro a continuación, dependiendo del dataset.

Importar Datasets en Knime

Creación de Diccionarios en Knime

Crear un diccionario en Knime, nos ayudará a darle mejor visibilidad y legibilidad a nuestro dataset. Teniendo en cuenta que lo más probable es que sean datos que nos den, podremos modelar un archivo xls para darle nuevos nombres a las variables de nuestro dataset como vemos en la siguiente imagen. En este caso estamos haciendo uso del dataset de Titanic.



Ahora vamos a hacer uso del nodo "Insert Column Header" para añadir las columnas y del "Excel Reader (XLS)" para añadir nuestro diccionario. Hay que tener cuenta que en este caso el dataset está añadido desde el nodo "CSV Reader".



Como podemos ver, en la imagen de arriba, tendremos que seleccionar la ruta del diccionario.


Configuramos el nodo "Insert Column Header" y como podemos ver, los datos nos aparecerán con una nueva cabecera, justo la que hemos creado con el diccionario de datos.


Analizar distribuciones para variables específicas en Knime

A continuación, vamos a ver gracias al nodo "Conditional Box Plot" el boxplot o también llamado Caja de Bigotes para conocer entre otros datos de interés los quartiles de nuestros datos para variables específicas. En este caso para el dataset de Iris.



En este caso podemos ver claramente como la altura del sépalo varía mucho de un tipo de Iris a otra.


Ampliación de estadísticas en Knime

Un nodo muy interesante y con el cuál podremos conocer innumerables datos e incluso histogramas es "Statistics" que nos ofrece datos estadísticos sobre nuestros datos. Entre muchos otros el máximo, mínimo, media, varianza, kurtosis...

Estadísticas en Knime
Estadísticas en Knime

Conversiones de tipo en Knime

Cuando trabajamos con Knime, a veces, es necesario cambiar el tipo de dato, como por ejemplo, de String a Numérico o viceversa y para ello tendremos sendos nodos que nos ayudarán en las conversiones de tipo de forma muy sencilla.

Conversiones de Tipo en Knime
Conversiones de Tipo en Knime

Créditos

Agradecimientos por la ayuda a Juanma Ucero Calderón (Linkedin Aquí)

Recursividad en Java - Torres de Hanoi #4

Hoy os voy a enseñar a resolver el juego de las Torres de Hanoi en Java con un método recursivo. Si aún no sabes qué es recursividad, puedes ver este post donde te los explico.

Método recursivo en Java para el juego de las Torres de Hanoi

El juego de las Torres de Hanoi es un Rompecabezas muy conocido inventado por el matemático francés Edouard Lucas. Si quieres saber más sobre el juego, cómo solucionarlo, o si ni siquiera sabes en qué consiste, puedes consultar este enlace de Wikipedia.

Nosotros vamos al grano, vamos a solucionar el problema de las torres de Hanoi con un método en Java para n discos de forma recursiva.

    public void torresHanoi(int discos, int torre1, int torre2, int torre3){
        // Caso Base
     
        if (discos==1){
            System.out.println("Mover disco de Torre " + torre1 + " a Torre " + torre3);
        } else {
            // Dominio
         
            // Llamamos a la función de tal forma que decrementamos
            // el número de discos, y seguimos el algoritmo
            // (origen, destino, auxiliar)
            torresHanoi(discos-1, torre1, torre3, torre2);
            System.out.println("Mover disco de Torre " + torre1 + " a Torre " + torre3);
            // En esta ocasión siguiendo el algoritmo hacemos lo siguiente
            // (auxiliar, origen, destino)
            torresHanoi(discos-1, torre2, torre1, torre3);
        }
     
    }

Como podemos comprobar, método nos devolverá los pasos de los discos que tenemos que ir moviendo y la torre a donde deben moverse. Por lo que si hacemos problema.torresHanoi (3, 1, 2, 3) el resultado sería el siguiente:

Mover disco de Torre 1 a Torre 3
Mover disco de Torre 1 a Torre 2
Mover disco de Torre 3 a Torre 2
Mover disco de Torre 1 a Torre 3
Mover disco de Torre 2 a Torre 1
Mover disco de Torre 2 a Torre 3
Mover disco de Torre 1 a Torre 3

Puedes comprobar que la solución al juego es correcta en este enlace.

Recursividad en Java - Sucesión de Fibonacci #3

Hoy os voy a enseñar cómo hallar el La sucesión de Fibonacci en Java con un método recursivo. Si todavía esto de la recursividad te resulta muy lioso, puedes echarle un vistazo a este post donde te lo explico de forma sencilla.

Método recursivo en Java para calcular la sucesión de Fibonacci

La sucesión de Fibonacci en matemática es la siguiente sucesión infinita de números naturales:

       

La sucesión comienza con 0 y 1 y a raíz de estos cada término siguiente es la suma de los dos anteriores, así de sencillo. Pues bien, sabiendo esto vamos a modelar en Java y de forma recursiva la sucesión de Fibonacci.

    public int fibonacciRecursivo (int numero){
        // Caso base
        if (numero == 1 || numero == 2)
            return 1;
        else
            return fibonacciRecursivo(numero-1) + fibonacciRecursivo(numero-2);
    }

En este caso vemos como el "Caso base" sería cuando el número entero que le pasamos sea "1" o "2", ya que en ese caso el resultado sería 1. Por otra parte el dominio, o "Caso recursivo", sería la suma del "número entero - 1" + "número entero - 2". Si no lo has entendido, intenta pensar que si le pasamos por ejemplo "10", empezaría haciendo la suma de la sucesión de Fibonacci de los dos números anteriores, es decir, iría del número más alto hasta el más bajo. El resultado si hacemos System.out.println("La sucesion fibonacci es " + problema.fibonacciRecursivo(10)) sería el siguiente.

La sucesion fibonacci es 55

Más ejercicios de Recursividad en Java 




Recursividad en Java - Factorial de un número #2

Hoy os voy a enseñar cómo hacer el Factorial de un número en Java con un método recursivo. Si aún no sabes qué es la recursividad, te invito a que le eches un vistazo a este artículo donde te lo explico de forma sencilla.

Método recursivo en Java para calcular el Factorial de un número


En nuestro caso tomamos como "Caso base" cuando el número sea menor que "0", por tanto, los demás casos los tomará como "Caso recursivo o Dominio". Es decir, hasta que no sea menor que 0, el método irá decrementando el número introducido.

public int factorialRecursivo(int numero) {
        // Validar que no sea menor que 0
        if (numero < 0) {
            return 0;
        // Caso base
        } else {
            if (numero == 0){
                return 1;
            // Dominio
            } else {
                return numero * factorialRecursivo(numero - 1);
            }
        }
}

A continuación vemos el resultado al hacer System.out.println("El factorial es " + problema.factorialRecursivo(10))

El factorial es 3628800

Más ejercicios de Recursividad en Java 


Recursividad en Java - Bajar una escalera #1

Hoy os vamos a explicar qué es la recursividad en programación, en este caso vamos a ver ejemplos en lenguaje Java para que entendáis cómo funciona y para qué podemos usarla.

¿Qué es la recursividad?

La recursividad es una técnica usada en programación que nos permite que un bloque de instrucciones, una función u operación se realice un cierto número de veces (predeterminadas por nosotros). Gracias a que muchos lenguajes, como por ejemplo Java nos permiten que los métodos puedan llamarse a sí mismos podemos realizar operaciones recursivas.

Caso Base y Caso Recursivo

Todo método recursivo puede dividirse en "Caso base", que sería algo así como el criterio de parada y "Caso recursivo" que converge al caso base (es decir, que se va acercando al caso base). La recursividad sirve como sustituto de una ireración, por ejemplo un bucle while o for, y en muchos casos siendo menos costoso. 

Método recursivo en Java para bajar una escalera

Es el caso del siguiente ejemplo, donde vamos a ver cómo bajar una escalera con un método recursivo, de tal modo que cuando al método le pasamos un entero "10" por ejemplo, tras pasar por el if, iría al "Caso recursivo" donde volvería a llamar al método con un entero "10-1" es decir "9", y así hasta llegar a 0, donde daríamos por hecho que la escalera se ha bajado.

    public void bajarEscalera (int escalones){
        // Caso Base, Respuesta Explícita
        if (escalones == 0){
            System.out.println("La escalera se ha bajado");
        } else {
            System.out.println("Bajando escalon " + escalones);
            // Hacemos uso de la recursividad
            bajarEscalera(escalones-1);
        }
     
    }

El resultado del método al ejecutarlo problema.bajarEscalera(10) sería el siguiente:

Bajando escalon 10
Bajando escalon 9
Bajando escalon 8
Bajando escalon 7
Bajando escalon 6
Bajando escalon 5
Bajando escalon 4
Bajando escalon 3
Bajando escalon 2
Bajando escalon 1
La escalera se ha bajado

Más ejercicios de Recursividad en Java 

Uso de los algoritmos de análisis de datos genéticos en Expander

Objetivos con Expander

  • Uso de los algoritmos de análisis de datos genéticos incorporados en EXPANDER.
  • Comprobar y analizar los diferentes resultados que nos muestra la herramienta.

Conceptos de Algoritmos en Expander

La herramienta EXPANDER nos ofrece implementaciones de una serie de algoritmos estándares de análisis de expresión como por ejemplo K-means, CLICK o SOM. En esta práctica se aplicarán algunos de estos algoritmos e interpretan sus resultados. A continuación detallamos alguna ifonrmación sobre estos algoritmos.

K-means

El algoritmo K-means método de Clustering basado en división. Dado un determinado valor K, el algoritmo divide los datos en K grupos disjuntos optimizandola siguiente función:

donde O es un objeto en el cluster Ci y ¹i es el centroide del cluster Ci, es decir, la media de todos sus objetos. Por lo tanto, la función E intenta minimizar la suma del cuadrado de la distancia de los objetos al centro de sus clusters.

Algoritmo CLICK

El algoritmo CLICK (CLuster Identification via Connectivity Kernels) identifica aquellos componentes altamente relacionados en grafos de proximidad como clusters. CLICK juega con el supuesto probabilístico de que, tras la normalización de los datos, los valores de similitud entre ellos siguen una distribución normal. Siguiendo este supuesto, el peso wij de una arista se define como la probabilidad de que los vértices i y j estén en el mismo cluster

Bibliografía

  • http://acgt.cs.tau.ac.il/expander/
  • http://acgt.cs.tau.ac.il/expander/help/ver6.06help_pdf/ver6Help.pdf
  • http://www.ncbi.nlm.nih.gov/sites/GDSbrowser
  • http://home.dei.polimi.it/matteucc/Clustering/tutorial_html/kmeans.html

Experimentos con Expander

Experimento 1

  1. Abrimos EXPANDER con un mínimo de 2GB en la memoria de JVM.
  2. Cargamos en la aplicación los datos de expresión ../simple_input_files/expressionData2.txt.
  3. Llevamos a cabo una estandarización de los datos. Para ello ejecute la opción Preprocessing > Standardization > Mean 0
  4. Una vez realizado el preprocesado, seleccionamos los algoritmos de agrupamiento no supervisado y seleccionar Kmeans para la generación de 5 grupos. ¿Cuántos genes contiene el grupo mayor?¿Qué grupo tiene la mayor homogeneidad?

Como podemos observar el Cluster_1 es el de mayor tamaño y el que mayor homogeneidad tiene es el Cluster_3.

  1. Observamos los patrones de expresión que ha generado la aplicación. ¿Qué sucederá si se vuelve a ejecutar el algoritmo para 4 grupos?

Que los grupos aumentan su tamaño debido a que se redistribuyen

  1. Visualice ahora los valores de la matriz de expresión con los diferentes resultados obtenidos. Para ello seleccione la opción Clustered Expression Matrix del menú Visualizations. ¿Se aprecian cambios entre las diferentes resultados?¿Cuales?

Que para los Clusters con el mismo nombre tenemos diferentes colores puesto que hay datos diferentes

  1. Por último vamos a realizar un PCA a los resultados obtenidos. ¿Qué diferencias se pueden apreciar entre ambos resultados?¿A qué se debe esto?

Como podemos observar en el primer estudio PCA tenemos 5 Clustes y en el segundo tenemos 4 Clusters

Ejercicios con Expander

Ejercicio 1

Vamos a seleccionar un microarray del NCBI y lo vamos a transformar a formato de entrada de EXPANDER. Vamos a analizar el microarray utilizando para ello algunos de los algoritmos de agrupamiento explicados. Anote los resultados más relevantes y redacte unas conclusiones sobre el grupo generado con mayor homogeneidad.


Hay que tener el cuenta lo que vimos en la primera práctica sobre Expander a la hora de modificar el texto borrando los comentarios y las filas con null.


Con el Algoritmo CLICK podemos comprobar que el cluster más homogéneo es el Cluster_2


En el Algoritmo K-Means con 10 clusters observamos que el primero y el segundo son los más homogéneos (tener en cuenta que el tamaño del primero es muy superior al segundo)



En el Algoritmo SOM con 24 clusters podemos ver que el más homogéneo es el cluster_5.



Con la información que nos ha mostrado cada algoritmo, la cuál es muy similar, podríamos decir que tenemos localizada la mayor homogeneidad de los datos.

Análisis de datos genéticos con Expander

En este artículo vamos a ver el uso de la herramienta Expander para analizar datos genéticos realizando diferentes experimentos, ejercicios y problemas para que puedas entenderla mejor

Nuestros objetivos con Expander

  • Instalar la herramienta de análisis de datos genéticos Expander.
  • Introducir al uso de la herramienta para el análisis de datos de expresión genética.
  • Conocer los formatos de entrada de la aplicación y visualización de los mismos.

Conceptos sobre Expander

EXPANDER (EXpression Analyzer and DisplayER) es una herramienta basada en JAVA para el análisis de datos de expresión genética. La herramienta Expander permite llevar a cabo: pre-procesamiento, visualización, agrupamiento (clustering, biclustering) y análisis de (bi-)clusters (como análisis de enriquecimiento). La herramienta contiene implementaciones de una serie de algoritmos estándares de análisis de expresión como por ejemplo K-means o CLICK que vamos a explicar a continuación.

Dónde descargar Expander

Puedes descargarla de forma libre en este enlace.

Formatos de datos de entrada en Expander

La herramienta EXPANDER es capaz de cargar un fichero con datos de expresión genética como, por ejemplo, un microarray, y trabajar con sus datos mediante los algoritmos que la propia herramienta incluye. Para ello, el archivo debe:

  • Estar delimitado por tabulaciones
  • La primera línea contendrá los campos correspondientes al Id del gen, su nombre (o símbolo) y las condiciones experimentales separados por tabulaciones
  • Las líneas siguientes contendrán la información referente a los datos detallados en la primera línea

Análisis de Componentes Principales (PCA)

Expander también viene con una herramienta implementada que es un algoritmo de Análisis de Componentes Principales (PCA). Este componente transforma los datos originales (N X M) en una representación gráfica de 2 dimensiones. Los puntos del gráfico representan cada uno de sus genes y su situación depende del nivel de expresión de los mismos, es decir, los genes que tienen similitud en su expresión, aparecerán juntos en el gráfico.

Bibliografía básica sobre Expander

  • https://www.ncbi.nlm.nih.gov/sites/GDSbrowser
  • http://acgt.cs.tau.ac.il/expander/
  • http://acgt.cs.tau.ac.il/expander/help/ver6.06help_pdf/ver6Help.pdf

Experimentos con Expander

Experimento 1

En el presente experimento vamos a realizar los primeros pasos con EXPANDER. Para ello realice las siguientesacciones:

  1. Descargue el archivo Expander6Win.zip adjunto a esta práctica y descomprima el contenido en una carpeta del disco duro.
  2. Descargue el archivo Expander6Win.zip adjunto a esta práctica y descomprima el contenido en una carpeta del disco duro.
  3. Ejecute el programa lanzando para ello el archivo Expander.bat. (también existe Expander_2GB.bat y Expander_4GB.bat, los cuáles requeriran mayor uso de la RAM)
  4. Una vez se ha accedido al programa vamos a cargar algunos datos de muestra para trabajar con ellos. Para ello ejecutamos el menú File > Load Data > Expression Data > Tabular Data File… Debe aparecer un cuadro de dialogo como el siguiente:

Seleccionamos el fichero situado en ../simple_input_files/expressionData2.txt y pulsamos OK.


  1. Observar los datos cargados. ¿En qué rango de valores se mueven?

Como podemos observar los valores están entre 5 y 14.


  1. Una vez cargados los datos, observar en el panel de la derecha las diferentes opciones de visualización de los mismos. (Box Plots, Raw Expression Matrix y Preprocessed Expression Matrix). ¿Qué gráfico nos muestra la última opción?¿Por qué?

La última opción no nos muestra nada puesto que aún no hemos realizado ningún preproceso

  1. Lleve a cabo una estandarización de los datos. Para ello ejecute la opción Preprocessing > Standardization > Mean 0 and Variance 1 (Distribución Normal Estándar que tiene una media de '0' y una desviación estándar de '1'). ¿Qué cambios puede observar?

Experimento 2

Lleve a cabo un PCA de los datos previamente cargados, para ello seleccione Visualizations > PCA.

  1. ¿Qué resultado se obtiene?¿Que forma tiene el gráfico?

El gráfico tiene una forma ovalada

  1. Hay zonas donde existe una mayor concentración de puntos ¿A qué se debe esto?

Como vemos tras la estandarización, podemos ver una concentración de puntos destacable en los bordes y cerca del 0 del eje Y.
  1. Cree una nueva sesión y lance un PCA sin realizar ninguna estandarización previa. Compare los resultados. ¿Por qué existe esta diferencia?

Porque ahora los datos no están estandarizados ni normalizados y están lejos del 0.


Ejercicios con Expander

Ejercicio 1

Repita los experimentos anteriores utilizando para ello el fichero de datos ../simple_input_files/expressionData1.txt. Este fichero es un fragmento de un microarray que contiene datos de expresión genética referente a la levadura, concretamente al ciclo celular.

Cargamos los datos

Vemos la Matriz de expresión

Vemos la Matriz de expresión preprocesada

Estudio PCA

Ejercicio 2

Cargue ahora los datos del fichero ../simple_input_files/expressionData3.txt. Este fichero contiene la información de 3893 genes bajo 174 condiciones experimentales. Realice un análisis de expresión utilizando para ello el wizard de EXPANDER. Estandarice y normalice los datos. Compruebe las características de la matriz de expresión y detalle las conclusiones que se pueden obtener. Realice un análisis PCA y compruebe los resultados.

Matriz de Expresión sin preprocesar

Vemos el estudio PCA sin Preprocesado

Ahora vemos el estudio PCA Preprocesado

A continuación también os muestro la matriz de expresión preprocesada para este dataset.

Problemas con Expander

Problema 1

Seleccione un microarray del NCBI y transfórmelo a formato de entrada de EXPANDER. Una vez hecho esto, analícelo utilizando las herramientas vistas en clase.

Nos vamos a descargar el dataset que queramos en la web de NCBI del cuál tenéis el enlace en el apartado de Bibliografía.

Ojo! para transformar un archivo de NCBI el cuál viene en formato soft y debemos pasar a .txt debemos tener en cuenta varias cosas:

Borrar comentarios superiores

Borrar comentarios inferiores

Debemos quitar las filas con missings, es decir con valores nulos (null), así como los tabulados o saltos de línea en la última fila.

Podemos ver las diferentes opciones que hemos visto en apartados anteriores

En este caso hemos lanzado el Wizard para ver los datos de PCA según los clusters, viendo por colores cada uno de ellos.