Las herramientas y los lenguajes de programación imprescindibles para el análisis de datos

En esta web hemos hablado largo y tendido sobre diversas herramientas y lenguajes de programación enfocados al análisis, extracción y manipulación de grandes volúmenes de datos (data mining o data crunching). La fiebre por el Big Data no cesa, fruto de una dependencia por parte de las grandes compañías de rentabilizar la información que generan sus servicios, campañas, redes sociales, etc. La gestión de datos ya no es un coto exclusivo para un selecto grupo de geeks, y cada vez existen más opciones para que el usuario medio pueda acceder a sofisticados métodos de análisis y procesado en tiempo real. Sin más dilación aquí resumimos los principales recursos que tendrás que gestionar si quieres profundizar en un sector cada vez más demandado por la industria.

No tendría sentido empezar con otro lenguaje que no fuese R, la primera alternativa gratuita a los gigantes del sector, como Matlab o SAS. Durante los últimos años ha derribado las barreras de los círculos más académicos para adentrarse en el mundo de las finanzas, de la mano de los traders de Wall Street, de biólogos, desarrolladores… Empresas como Google, Facebook y el New York Times han recurrido a este lenguaje para gestionar conjuntos de datos complejos, realizar funciones de modelado y crear gráficos para representar los resultados de una forma más accesible.

Una de las mayores virtudes de R es su ecosistema de usuarios y desarrolladores. La comunidad de R se estima por encima de los dos millones de usuarios y, según una encuesta de KDnuggets.com, sigue siendo el lenguaje más popular cuando se trata de trabajar con data science, siendo usado por un 49% del total de encuestados, aunque Python le sigue de cerca tras experimentar un incremento de usuarios cercano al 51% en 2016.

Lo cierto es que R está incrementando su uso para la creación de modelos financieros, pero sobre todo como herramienta de visualización. Resulta sencillo estructurar presentaciones con un resultado visual más llamativo con apenas unas líneas de código que pasarse la noche sufriendo con Excel. El problema con R llega con la sistematización de la gestión de grandes volúmenes de datos de forma recurrente. Para muchos, R funciona mejor a la hora de diseñar que a la de implementar soluciones. Puede que el prototipo haya sido programado en R, pero lo más probable es que el resultado final opte por otras soluciones más solvente en la gestión de registros, como Java o Python.

Si, por ejemplo, tuviésemos que hacer un análisis puntual sobre el correcto uso del algoritmo de aleatoriedad -su RNG, para entendernos- de la ruleta de PokerStars Casino, sin duda R sería la opción más inmediata para manejar con solvencia, sencillez y potencia –aunque puede que no de la forma más eficiente- los volúmenes necesarios para obtener un resultado fiable dentro de unos parámetros de varianza muy estrictos. Si tuviésemos que hacerlo de forma regular, seguramente no optaríamos por esta solución.

Allí donde R peca de estricto, aparece la flexibilidad de Python. Python está ganando adeptos gracias a la combinación de las sofisticadas capacidades de R para la minería de datos y la sencillez a la hora de desarrollar productos completos, por no hablar de que su expansión a nivel educativo ha generado un volumen de material espectacular (también en español), dando lugar a un parque de usuarios que es responsable en gran medida de que sus posibilidades se hayan expandido hasta abarcar territorios del análisis estadístico anteriormente reservados a R.

Lleva años amenazando con convertirse en el estándar de la industria. En el procesamiento de datos siempre hay una negociación entre dimensión y sofisticación, y Python parece haber encontrado un punto de acuerdo. Bank of America usa Python para desarrollar nuevos productos y espacios de comunicación entre el cliente y la infraestructura del banco, pero también para gestionar el análisis de sus vastas bases de datos. Eso sí, no estamos frente al lenguaje más eficiente, y solo nos lo encontraremos como motor de núcleos de infraestructuras a gran escala en situaciones muy concretas.

Java, Hadoop y Rapid Miner aparecen en los entresijos de las mayores compañías de Silicon Valley. Un vistazo a las profundidades de Twitter, LinkedIn, o Facebook nos revelará a Java como el lenguaje funcional de todas sus estructuras relacionadas con la ingeniería de datos. Puede que Java no aporte la misma calidad en las visualizaciones que nos pueden ofrecer R o Python, y que tampoco sea el mejor en términos de modelado estadístico; pero una vez finalizada la fase de prototipos, a la hora de diseñar sistemas de gran escala suele ser frecuente que nos encontremos a este veterano.

Las herramientas basadas en Java también han florecido gracias a la demanda que existe de procesamiento de datos. Hadoop es el framework de referencia para el trabajo con lotes. Puede que sea más lento que otras herramientas de procesado, pero es extraordinariamente preciso y de uso común en el análisis de backend. Y, además, se lleva bien con Rapid Miner, una plataforma para la creación de flujos de trabajo analíticos.

RapidMiner facilita enormemente el trabajo, desde el preprocesado de datos al machine learning y la verificación de modelos, puesto que reúne todas sus funciones en un único entorno, empezando por un diseñador visual de flujos de trabajo para equipos, pasando por el intercambio y desarrollo de modelos predictivos, a la ejecución de flujos directamente en Hadoop.

Vale, seguimos necesitando trabajar con volúmenes altos y, además, el tiempo es un factor clave: aquí aparecen Kafka y Storm.

Si la prioridad pasa por disponer de analíticas rápidas, en tiempo real, pregunta por Kafka. Lleva más de seis años en circulación, pero se ha convertido en uno de los frameworks más populares para el procesado de flujos en tiempo real, consecuencia de las nuevas necesidades de gestión de eventos. Kafka, nacido como proyecto en las oficinas de LinkedIn, es un sistema ultra-rápido de colas de mensajes. En su contra solo se puede decir que, a veces, es demasiado rápido, lo que da lugar a errores. La necesidad de trabajar en tiempo real suele ser propicia para este tipo de situaciones.

Como solución a este tipo de inconvenientes, y frente a la imposibilidad de renunciar a la inmediatez, las grandes empresas suelen usar una solución de compromiso: Kafka o Storm en el procesado en tiempo real y Hadoop para sistemas de procesado de lotes en los que la precisión es crucial, no tanto el tiempo.

Storm es otro framework escrito en Scala (lenguaje basado en Java, que también está ganando adeptos entre aquellos necesitados de servicios de machine learning a gran escala o del uso de algoritmos de alto nivel) que está ganando fuerza en los proyectos de procesado de flujos. Fue adquirido por Twitter, lo que da una idea de su capacidad para el procesado rápido de sucesos.

Nos dejamos muchos por el camino, grandes pesos pesados como Matlab u Octave y “recién llegados“ como Go, pero hemos querido quedarnos con las herramientas y lenguajes más representativos, a modo de guía rápida para el recién llegado o el curioso.

Data mining, Machine Learning, Big data, Stream processing… todos ellos son nuevos mercados para toda una nueva generación de programadores que puede encontrar en el análisis de datos esa salida laboral que llevaba tiempo buscando.