Recolecta y analiza el Big Data de las Noticias con tu propio Data Lake

En este artículo mostrare como ejecutar en tu equipo personal los componentes básicos de un Data Lake o Lago de Datos en español, con esfuerzo mínimo gracias a la tecnología de contenedores de Docker (https://www.docker.com/). Por cierto si aun no lo tienes instalado, este es buen momento para que lo hagas, en una publicación anterior de este Blog (https://abxda.medium.com/geo-big-data-con-datos-censales-2de6250772a5), hay algunas instrucciones para que lo puedas instalar en un equipo con Windows 10 Professional. Gracias a esta tecnología bastará con ejecutar una sola línea en tu terminal y algo paciencia, tendrás todos los componentes básicos de un Mini Data Lake ejecutándose en tu computadora personal. Con todo eso corriendo en tu Laptop podrás recolectar sistemáticamente miles de artículos de noticias usando la tecnología llamada Apache Airflow (https://airflow.apache.org), creando una base de datos semiestructurada. Todas las noticias recolectadas serán almacenadas en un deposito de objetos basados en la tecnología S3 de Amazon, pero corriendo localmente en tu propio Data Lake con tecnología de Software Libre (https://min.io). Después de eso realizaremos análisis de ese Big Data recolectado mediante PySpark usando Cuadernos de Jupyter Lab (https://jupyter.org), con lo que realizaremos algunos resúmenes y le daremos estructura a los datos para ser puestos en la base de datos relacional PostgreSql (https://www.postgresql.org). Por último, conectaremos una herramienta de Inteligencia de Negocios de última generación para analizar visualmente los datos analizados (https://superset.apache.org). Aunque no se verá en este tutorial, también se incluyo en el Data Lake una tecnología para generar APIs de Datos, que nos permitirá realizar productos de Datos a la Medida, aunque eso será material para otro tutorial 😃

¿Qué es un Data Lake?

Antes de continuar, vale la pena establecer lo que se entiende por un Data Lake, al final de este artículo podrás encontrar las referencias usadas en esta definición. Se entiende que la finalidad básica de un Lago de Datos es almacenar todos los datos que una organización produce. Permitiendo su incorporación con la menor fricción posible, aceptando datos sin modelar, semiestructurados o incluso no estructurados cómo archivos de texto e imágenes. Por lo que los datos se encuentran accesibles para su análisis tan pronto como se incorporan. De ahí que el sistema de almacenamiento usado es altamente relevante, pues requiere una capacidad de adaptarse dinámicamente a las demandas de espacio y flexibilidad en los tipos de objetos a almacenar. Existen varias formas de implementar dichos requerimientos para el componente de Almacenamiento, en el caso de este artículo me incliné por un almacenamiento de objetos de alto desempeño de código abierto compatible con Amazon S3 llamado MinIO (https://min.io/), el cual puede ser instalado y operado localmente. Si en algún momento de la evolución de tu Lago de Datos, se requiere transitar a la nube parte del almacenamiento, no será necesario reescribir todo el código que ya se tenga para consumir los objetos almacenados en los servidores de almacenamiento distribuido. Simplemente se reemplazaría la dirección de Internet usada y el resto de los protocolos de comunicación se mantienen sin cambios.

Estructura de nuestro mini data lake

Recolección de Noticias del Covid-19 en México

Al momento de escribir este artículo es marzo de 2021 y nos encontramos atravesando una contingencia sanitaria de proporciones mundiales, aún con un desenlace incierto. Por lo que es relevante poder monitorear toda la corriente de noticias que se generan día con día, incluso poder recolectar noticias generadas en meses pasados para poner en contexto lo sucedido. Por lo que en este ejercicio realizaremos la recolección de miles de artículos de la región de México desde el 1 de enero de 2020 hasta el día que ejecutes tu recolección. El patrón de búsqueda utilizado es: “Covid México” y analizaremos el contenido de las noticias para generar visualizaciones de resumen que permitan explorar de mejor manera el universo de información que se está generando. Obviamente el recolector está preparado para ser ajustado a nuevas fechas y cualquier patrón de búsqueda. Para mas detalles de los parámetros del buscador puede profundizar en el manual de usuario de Googler : https://github.com/jarun/googler. En el caso de este artículo se entregará una versión modificada que también descarga el texto completo de la noticia para poder ser analizado. Se preservan las URL’ s originales para poder citar apropiadamente los hallazgos.

Puesta en Marcha y Operación de Nuestro Mini Data Lake

La implementación de este lago de datos se subió a GitHub, por lo que podrás acceder al código de todas las definiciones de Docker que componen esta propuesta. Si eres un lector inquieto y autogestivo en tu aprendizaje, incluso podrás modificar y agregar o quitar componentes a tu gusto. Para poder descargar el código requieres tener instalado Git en tu equipo, eso se logra descargando el instalador en la siguiente liga: https://git-scm.com/download/win dónde puedes descargar el instalador haciendo clic en la liga que se muestra:

Descarga la versión mas adecuada, si no estas seguro descarga la de 32-bit
git --version
Desplazándose a el directorio destinatario del código del lago de datos
git clone https://github.com/abxda/mini-data-lake.git
Se descarga todo el código a tu equipo en el directorio: mini-data-lake
docker-compose up --build -d
Docker se encargará de descargar y compilar todo lo necesario.
docker-compose up --build -d
Servicios del Lago de Datos Corriendo Satisfactoriamente.
Incorporación de variables y ajuste del número de noticias a recolectar.
Activar recolección en Airflow
La gráfica indica que se descargaron todas las noticias y se subieron a el almacén de objetos.
PySpark se conecta a el deposito de objetos y carga todas las noticias descargadas en s3a://news/covid_mexico/*.json
Esquema de los archivos descargados.
Ejemplo de descarga después de un análisis sencillo.
Conexión a una tabla de Postgresql
De los campos generados n_w tiene el total de veces que una palabra aparece en el artículo dónde se encontró. Junto con el campo palabra podemos realizar nubes de palabras y otras visualizaciones.
Conexión a pgAdmin 4
Conexión a la base de datos que incluye los datos procesados con PySpark.
Dando de alta una base de datos en Superset.
Ahora dando de alta una tabla para analizar en Superset.
Las dos tablas ahora están disponibles para realizar gráficas y tableros de control.
Creación de un Filtro a partir de las fechas y los sitios que publican las noticias.
Creación de la Nube de Palabras, vinculada al filtro.
Ahora se agregaron la cantidad de artículos por sitio de noticias
Incorporamos un histograma que cuenta el numero de noticias detectadas por día.

Conclusión

En este artículo-tutorial logramos levantar un Lago de Datos desde cero, y recolectar miles de noticias desde el 1 de enero del 2020 hasta marzo del 2021. Analizamos los datos recolectados conectándonos al depósito de objetos S3 de nuestra implementación. Y por último generamos una visualización interactiva de los datos analizados.

Referencias

Errores Detectados

Puede suceder que no se levanten los servicios de Airflow y Superset debido a un error de fin de línea en los archivos de inicialización de la base de datos postgresql:

Cambio de fin de línea a UNIX
docker-compose stop
docker-compose rm
#aceptar la eliminación de los contenedores indicando: (y)
docker volume rm mini-data-lake_postgres_volume
docker-compose up --build -d

Father-Husband-Data Scientist-Philosopher-Entrepreneur-Professor PhD c. in Data Science-MSc Stats #R #Scala #Spark #SatelliteImagery #Python #BigData #Nerd

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store