La Ciencia del Dato se erige en nuestros días como una profesión multidisciplinar en la cual conocimientos técnicos de diversas áreas se solapan formando un perfil más propio del Renacimiento que del superespecializado Siglo XXI.
Dada la escasez de formación estructurada en la materia, los científicos de datos se ven obligados a ir coleccionando conocimientos, habilidades y herramientas que les permitan desarrollar de forma óptima sus competencias.
La presente pretende ser una guía básica, y obviamente no exhaustiva, de recursos en cada una de las facetas desempeñadas por estos profesionales.
Gestión de datos
Parte del trabajo del científico de datos es la captura, depuración y almacenamiento de la información en un formato adecuado para su tratamiento y análisis.
El caso más frecuente será el acceso a una réplica de la fuente de datos para una captura puntual o periódica.
Será necesario conocer SQL para acceder a la información almacenada en bases de datos relacionales. Cada base de datos tiene una consola de comandos para ejecutar las sentencias SQL, aunque son mayoría los que prefieren un entorno gráfico con información sobre tablas, campos e índices. Entre las herramientas más valoradas están Toad, versión comercial para plataforma Microsoft y Tora, versión libre multiplataforma.
Una vez extraídos los datos podemos guardarlos en ficheros de texto plano que luego cargaremos en nuestro entorno de trabajo para machine learning o utilizar una herramienta como SQlite.
SQlite es una base de datos relacional ligera, sin dependencias externas y que no necesita la instalación en un servidor. Transportar una base de datos es tan fácil como copiar un solo fichero. En nuestro caso, cuando vayamos a procesar la información lo haremos sin necesidad de concurrencia ni de múltiples escrituras en los datos origen, lo cual se adapta perfectamente a las características de SQlite.
Los lenguajes que utilizaremos para nuestros algoritmos tienen conectividad con SQlite (Python a través de SQlite3 y R a través de RSQlite) por lo que podemos optar por importar los datos antes de hacer el preproceso o por hacer parte de éste en la propia base de datos, lo cual nos evitará más de un problema a partir de un volumen medio de registros.
Otra alternativa para la captura en lotes de los datos es la utilización de una herramienta que incluya el ciclo ETL completo (Extracción, transformación y carga), entre las que destacan RapidMiner, Knime y Pentaho. Con ellas podremos definir el ciclo de captura y depuración de los datos de manera gráfica mediante conectores.
Cuando tengamos garantizado acceso al origen de datos durante el preproceso podemos optar por una conexión ODBC (RODBC y RJDBC en R y pyODBC, mxODBC y SQLAlchemy en Python) y beneficiarnos de realizar uniones (JOIN) y agrupaciones (GROUP BY) utilizando el motor de la base de datos e importando posteriormente los resultados.
Para el procesado externo a la base de datos pandas (librería de Python) y data.table (paquete de R) son primera elección. En el caso de R, data.table permite soslayar uno de los puntos débiles de éste, la gestión de la memoria, realizando operaciones vectoriales y agrupaciones por referencia, es decir, sin tener que duplicar temporalmente los objetos.
Un tercer escenario sería el acceso a información generada en tiempo real y que sea transmitida en formatos como XML o JSON. Serían proyectos denominados de incremental learning entre los que se encuentran los sistemas de recomendación, publicidad online y trading de alta frecuencia.
Utilizaremos herramientas como XML o jsonlite (paquetes para R) o xml y json (módulos de Python). Con ellos haremos una captura en streaming, calcularemos la predicción, la devolveremos en el mismo formato y actualizaremos nuestro modelo una vez el sistema de origen nos facilite, más adelante, el resultado observado en la realidad.
Análisis
Si bien las áreas de Business Intelligence, Data Warehousing y Machine Learning son objetos de la Ciencia de Datos, es esta última la más diferencial en el sentido que necesita de un número mayor de utilidades específicas.
En cuanto a lenguajes de programación, imprescindibles en nuestra caja de herramientas son R y Python, los más utilizados para el aprendizaje automático.
Para Python destacamos la suite scikit-learn que cubre casi todas las técnicas, salvo quizás las redes neuronales. Para éstas tenemos varias alternativas interesantes, como Caffe y Pylearn2. Esta última utiliza como base Theano, una interesante librería de Python que permite definiciones simbólicas y uso transparente de los procesadores GPU.
Entre los paquetes para R más utilizados destacan:
– Gradient boosting: gbm y xgboost.
– Ensamblado de árboles de regresión y clasificación: randomForest y randomForestSRC.
– Máquinas de soporte de vectores: e1071, LiblineaR y kernlab.
– Regresión con regularización (Ridge, Lasso y ElasticNet): glmnet.
– Modelos generalizados aditivos: gam.
– Clustering: cluster.
Si necesitamos modificar algún paquete de R requeriremos C++ y disponer de utilidades que nos permitan volver a generarlos: Rtools, entorno para la creación de paquetes en R bajo Windows, y devtools que facilita todos los procesos relacionados con el desarrollo.
Entre las herramientas de propósito general, varias utilidades nos harán la vida más fácil en R:
– Data.table: Lectura rápida de ficheros texto, creación, modificación y borrado de columnas por referencia, unión de tablas por una clave común o agrupación y resumen de datos.
– Foreach: Ejecución de procesos en paralelo contra un backend previamente definido con alguna utilidad como doMC o doParallel.
– Bigmemory: Manejar grandes matrices en R y compartir información entre varias sesiones o ejecuciones en paralelo.
– Caret: Comparación modelos, control de particiones de datos (splitting, bootstrapping, subsampling) y ajuste de parámetros (grid search).
– Matrix: Manejo de matrices dispersas y transformación de variables categóricas a binarias (onehot encoding) mediante la función sparse.model.matrix.
Una mención especial requieren los entornos distribuidos. Si hemos trabajado con datos procedentes de una entidad o empresa de cierto tamaño probablemente tengamos experiencia con el denominado ecosistema Hadoop. Hadoop es en su origen un sistema distribuido de ficheros (HDFS) dotado de unos algoritmos (MapReduce) que permiten realizar procesamiento de la información en paralelo.
Entre las herramientas de aprendizaje automático que conviven con Hadoop podemos destacar:
– Vowpal Wabbit: Métodos para online learning basado en gradiente descendente.
– Mahout: Suite de algoritmos entre los que destacan los sistemas de recomendación, clustering, regresión logística, random forest.
– h2o: Quizás la herramienta en fase de mayor crecimiento, con un gran número de algoritmos paralelizables. Puede ejecutarse desde un entorno gráfico propio o bien desde R o Python.
Interesará también al Científico de Datos estar al corriente de las nuevas tendencias de cambio generacional de Hadoop hacia Spark.
Spark tiene varias ventajas sobre Hadoop para el procesamiento de la información y la ejecución de algoritmos. La principal de ellas la velocidad, dado que es hasta cien veces mayor debido a que, a diferencia de Hadoop, Spark utiliza la gestión ‘en memoria’ y sólo escribe a disco cuando es necesario.
Spark puede ejecutarse de forma independiente o puede convivir como un componente más de Hadoop, de forma que la migración puede planificarse de manera no traumática. Puede por ejemplo utilizar HBase como base de datos, aunque Cassandra se está imponiendo como solución de almacenamiento por su redundancia y escalabilidad.
Como muestra de los aires de cambio, Mahout desde el pasado año trabaja para integrarse con Spark, distanciándose de MapReduce y Hadoop, y H2O.ai ha lanzado Sparkling Water que es la versión de su suite h2o sobre Spark.
Visualización
Para terminar una breve referencia a la presentación de los resultados.
Las herramientas más utilizadas en R son sin duda lattice y ggplot2 y en Python Matplotlib, pero si necesitamos presentaciones profesionales integradas en entornos web la mejor opción sin duda es D3.js.
Entre los entornos integrados de Business Intelligence, con un enfoque claro a la presentación, destacar Tableau, el más conocida, y como alternativas para la exploración gráfica de datos, Birst y Necto.