26.03.2020 Views

LAD01147_Introduccion_Big_Data_U3_S3

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Introducción al big data – Arquitecturas tecnológicas big data<br />

3. ECOSISTEMA HADOOP (III)<br />

3.1 Capa analítica y de visualización<br />

3.1.1. R<br />

R es un entorno y un lenguaje de programación con un enfoque al análisis<br />

estadístico. Parte de una implementación libre del lenguaje S, desarrollado por<br />

Robert Gentleman y Ross Ihaka del Departamento de Estadística de la Universidad<br />

de Auckland en 1993.<br />

Este lenguaje forma parte de GNU y se distribuye bajo licencia GNU GLP.<br />

Sus principales características son:<br />

• R al estar orientado a las estadísticas, proporciona un amplio abanico de<br />

herramientas. o Entre otras características de R, podemos nombrar su<br />

capacidad gráfica, que permite generar gráficos con alta calidad, con sólo<br />

utilizar las funciones para generar gráficos.<br />

• R también puede usarse como herramienta de cálculo numérico y a la vez<br />

ser útil para la minería de datos.<br />

R viene con su propio entorno de desarrollo interactivo que nos permiten ver los<br />

resultados a medida que vamos trabajando con los datos.<br />

27 © Structuralia


Introducción al big data – Arquitecturas tecnológicas big data<br />

Figura 10: RStudio<br />

R contiene infinidad de paquetes estadísticos para identificar correlaciones, estimar<br />

predicciones, rankings, desviaciones, distribuciones etc. Cuenta además con un<br />

poderoso paquete de dibujo para visualizar nuestros resultados.<br />

© Structuralia 28


Introducción al big data – Arquitecturas tecnológicas big data<br />

Figura 11: Ejemplo de gráfico en R<br />

R puede integrarse dentro de entornos BIG DATA a través de Spark o Hadoop.<br />

3.1.2. Python<br />

Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en<br />

una sintaxis que favorezca un código legible.<br />

Python es un lenguaje de programación multiparadigma. Esto significa que más que<br />

forzar a los programadores a adoptar un estilo particular de programación, permite<br />

varios estilos: programación orientada a objetos, programación imperativa y<br />

programación funcional. Otros paradigmas están soportados mediante el uso de<br />

extensiones.<br />

No se trata de un lenguaje específico para estadística como es R, sino que es un<br />

lenguaje genérico que por su filosofía se ha hecho un hueco importante en el<br />

mundo analítico, por lo que se basa en herramientas específicas para realizar el<br />

trabajo analítico y estadístico, algunas de ellas son:<br />

29 © Structuralia


Introducción al big data – Arquitecturas tecnológicas big data<br />

• Numpy<br />

Una extensión de Python, que le agrega mayor soporte para vectores y<br />

matrices, constituyendo una biblioteca de funciones matemáticas de alto<br />

nivel para operar con esos vectores o matrices.<br />

• Pandas<br />

Pandas es una librería open source que aporta a Python unas estructuras<br />

de datos fáciles de user y de alta performance, junto con un gran número<br />

de funciones esenciales para el análisis de datos. Con la ayuda de<br />

Pandas podemos trabajar con datos estructurados de una forma más<br />

rápida y expresiva.<br />

• Sci-py<br />

Conjunto de paquetes donde cada uno ellos ataca un problema distinto<br />

dentro de la computación científica y el análisis numérico. Algunos de los<br />

paquetes que incluye, son:<br />

o<br />

o<br />

o<br />

o<br />

o<br />

o<br />

scipy.integrate: que proporciona diferentes funciones<br />

para resolver problemas de integración numérica.<br />

scipy.linalg: que proporciona funciones para resolver<br />

problemas de álgebra lineal.<br />

scipy.optimize: para los problemas de optimización y<br />

minimización.<br />

scipy.signal: para el análisis y procesamiento de<br />

señales.<br />

scipy.sparse: para matrices dispersas y solucionar<br />

sistemas lineales dispersos<br />

scipy.stats: para el análisis de estadística y probabilidades.<br />

• Scikit-learn<br />

Librería especializada en algoritmos para data mining y machine learning.<br />

Algunos de los problemas que podemos resolver utilizando las<br />

herramientas de Scikit-learn, son:<br />

© Structuralia 30


Introducción al big data – Arquitecturas tecnológicas big data<br />

o<br />

o<br />

o<br />

o<br />

o<br />

o<br />

Clasificaciones: Identificar las categorías a que cada<br />

observación del conjunto de datos pertenece.<br />

Regresiones: Predecir el valor continuo para cada nuevo<br />

ejemplo.<br />

Agrupaciones: Agrupación automática de objetos similares en<br />

un conjunto.<br />

Reducción de dimensiones: Reducir el número de<br />

variables aleatorias a considerar.<br />

Selección de Modelos: Comparar, validar y elegir parámetros<br />

y modelos.<br />

Preprocesamiento: Extracción de características a analizar<br />

y normalización de datos.<br />

• Maptolib<br />

La librería más popular en Python para visualizaciones y gráficos.<br />

Matplotlib puede producir gráficos de alta calidad dignos de cualquier<br />

publicación científica.<br />

• Ipython<br />

Entorno de trabajo interactivo en contraposición al tradicional modelo de<br />

desarrollo de software de editar-compilar-ejecutar<br />

• Tensorflow<br />

Biblioteca de código abierto para aprendizaje automático a través de un<br />

rango de tareas, y desarrollado por Google para satisfacer sus<br />

necesidades de sistemas capaces de construir y entrenar redes<br />

neuronales para detectar y descifrar patrones y correlaciones, análogos al<br />

aprendizaje y razonamiento usados por los humanos.<br />

Podemos trabajar en entornos BIG DATA con Python directamente con trabajos<br />

MapReduce o a través de Spark y su librería PySpark, con la que tendremos<br />

acceso a todos los algoritmos y la capacidad de computo de Spark.<br />

31 © Structuralia


Introducción al big data – Arquitecturas tecnológicas big data<br />

3.1.3. Scala<br />

Scala es un lenguaje de programación multi-paradigma diseñado para expresar<br />

patrones comunes de programación en forma concisa, elegante y con tipos<br />

seguros. Integra sutilmente características de lenguajes funcionales y orientados a<br />

objetos. La implementación actual corre en la máquina virtual de Java y es<br />

compatible con las aplicaciones Java existentes.<br />

Scala no es un lenguaje tradicionalmente asociado a entornos estadísticos y/o<br />

analíticos, no obstante, su importancia es clave en el mundo BIG DATA porque<br />

muchas de las herramientas con las que vamos a trabajar están desarrolladas<br />

utilizando este lenguaje y por tanto se ejecutarán de forma más rápida y tendremos<br />

acceso a toda la funcionalidad si utilizamos este lenguaje.<br />

3.1.4. Notebooks<br />

El concepto de “notebook” fue introducido por iPython, que permitía trabajar sobre<br />

un interfaz web en lugar de sobre una Shell.<br />

© Structuralia 32


Introducción al big data – Arquitecturas tecnológicas big data<br />

Figura 12: Ejemplo de notebook<br />

El notebook permite compartir tus procesos con otros, de modo que estos puedan<br />

entenderlos, modificarlos y adaptarlos a sus necesidades.<br />

Siguiendo con iPython, IPython 3 fue rearquitecturado y se creó Jupyter que ofrece<br />

una gran cantidad de lenguajes (Scala, R, Python, Spark, F#, …)<br />

Estos notebooks son entornos que permiten realizar un análisis / procesado de<br />

datos interactivo y visualizar los resultados utilizando librerías como maptolib<br />

(python) o ggplot2(R).<br />

33 © Structuralia


Introducción al big data – Arquitecturas tecnológicas big data<br />

Dentro del ecosistema Hadoop podemos encontrar su propio notebook llamado<br />

Zeppelin. Zeppelin es una implementación del concepto de web notebook, centrado<br />

en la analítica de datos interactivo mediante lenguajes y tecnologías como Shell,<br />

Spark, SparkSQL, Hive, Elasticsearch, R, etc.<br />

Figura 13: Zeppelin<br />

Mientras que Jupyter surgió antes de Hadoop y necesita de cierta integración para<br />

poder trabajar con entornos Hadoop, Apache Zeppelin está completamente<br />

integrada, proporcionando, además:<br />

• Simplicidad<br />

• Agnóstico del lenguaje<br />

• Permite crear notebooks en varios lenguajes<br />

• Integrado a la perfección con Hadoop y Spark, por ejemplo<br />

© Structuralia 34


Introducción al big data – Arquitecturas tecnológicas big data<br />

3.1.5. Herramientas comerciales<br />

Muchas de las herramientas analíticas del mercado permiten conectar con Hadoop<br />

y realizar analítica y visualización de datos, entre ellas destacan las siguientes:<br />

• SAS Visual Analytics<br />

SAS Visual Analytics ofrece una plataforma completa para la visualización<br />

analítica, lo que permite identificar los patrones y las relaciones de los<br />

datos que antes no eran evidentes. Las capacidades interactivas de<br />

Business Intelligence y reportes de autoservicio se combinan con la<br />

analítica avanzada para que todos puedan descubrir conocimientos de<br />

cualquier tamaño y tipo de datos, incluyendo texto.<br />

• Tableau<br />

Tableau es una herramienta de análisis perfecta para una empresa, fácil<br />

de usar y muy potente, convierte los datos de múltiples fuentes en<br />

información de valor para la toma de decisiones. Sus funcionalidades y<br />

características la convierten en una potente y versátil herramienta para las<br />

empresas.<br />

• Qlik<br />

QlikView y Qlik Sense estaban destinados a ser productos diferentes,<br />

aunque en este último se gana en versatilidad y funcionalidad de cara a<br />

los usuarios, consiguiendo que construyan cuadros de mando, informes,<br />

métricas, gráficas con un clic o arrastrando y soltando ítems determinados<br />

en la aplicación (tablas, mapas, embudos).<br />

3.1.6. Otras herramientas de visualización<br />

A parte de las anteriores herramientas ad-hoc, que tienen integraciones específicas<br />

para facilitar el acceso a los datos almacenados en Hadoop, siempre podremos<br />

realizar una integración propia con cualquier herramienta del mercado como, por<br />

ejemplo:<br />

35 © Structuralia


Introducción al big data – Arquitecturas tecnológicas big data<br />

• D3js<br />

D3.js (o simplemente D3 por las siglas de <strong>Data</strong>-Driven Documents) es una<br />

librería de JavaScript para producir, a partir de datos, infogramas<br />

dinámicos e interactivos en navegadores web. Hace uso de tecnologías<br />

bien sustentadas como SVG, HTML5, y CSS.<br />

Figura 12: D3js<br />

• TimelineJS<br />

Timeline JS es una herramienta en abierto que nos permite crear líneas<br />

del tiempo muy atractivas e interactivas siguiendo unos pasos muy<br />

sencillos.<br />

Figura 13: Timelinejs<br />

© Structuralia 36


Introducción al big data – Arquitecturas tecnológicas big data<br />

3.2 IA & Machine Learning<br />

Aunque en Hadoop podemos crear y utilizar algoritmos de machine learning / Deep<br />

learning a través de librerías de Python / R, debido al paralelismo de Hadoop puede<br />

que no tengamos disponible toda su potencia, por lo que Hadoop viene con sus<br />

propias herramientas de IA para aprovechar el paralelismo y su arquitectura.<br />

No obstante, y aunque nombraremos aquí alguna, en áreas como Machine / Deep<br />

Learning e Inteligencia Artificial las herramientas más potentes se desarrollan para<br />

arquitecturas Spark.<br />

3.2.1. Mahout<br />

Apache Mahout es una librería de software libre que ofrece implementaciones<br />

escalables de algoritmos de machine learning. Está desarrollada en Java, y se<br />

orienta a tres líneas principales:<br />

• Clasificación<br />

• Clustering<br />

• Sistemas de recomendación<br />

Mahout se apoya en Hadoop, implementación open-source del paradigma<br />

MapReduce que se ha convertido en una referencia en el ámbito de <strong>Big</strong> <strong>Data</strong>. El<br />

logo de Hadoop es un elefante amarillo. Y en la India, un mahout es la persona que<br />

maneja un elefante. Aunque la intención de Apache Mahout es la de soportar<br />

algoritmos escalables no necesariamente desarrollados sobre Hadoop.<br />

La lista de algoritmos soportados por esta librería hasta el momento incluye:<br />

• Clasificación: regresión logística (SGD), Bayes, random forests…<br />

• Clustering: k-means, LDA…<br />

• Búsqueda de conjuntos frecuentes y coocurrencias de términos<br />

• Factorización de matrices sparse para reducción de dimensionalidad: SVD,<br />

SSVD<br />

• Filtrado colaborativo<br />

• Algoritmos evolutivos<br />

37 © Structuralia


Introducción al big data – Arquitecturas tecnológicas big data<br />

No obstante, desde 2014 Mahout trabaja intensamente en la integración con Spark<br />

por lo que el código que trabaja con MapReduce está bastante obsoleto.<br />

3.2.2. H2O<br />

H2O es una plataforma Machine Learning open-source desarrollada en Java.<br />

Ofrece un gran conjunto de algoritmos ML y un UI de procesamiento (H2o Flow).<br />

Permite desarrollar aplicaciones ML en diversos lenguajes: Java, Scala, Python y R<br />

y ofrece interfaces con Spark, HDFS, Amazon <strong>S3</strong> y BD NoSQL.<br />

Figura 14: H2O<br />

© Structuralia 38

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!