Introducción a la ciencia de datos con Julia-Parte 1

Tabla de contenidos

Introducción

En esta oportunidad iniciare una serie de entradas ligadas a la ciencia de datos empleando el lenguaje Julia, siendo una importante motivación la posibilidad de explorar una alternativa que me permite analizar distintos tipos de datos, siendo mi especial interés aquellos que tienen el componente espacial. En los últimos meses le estuve dedicando tiempo a conocer mejor a Julia y como producto de ello quiero compartir parte de lo aprendido, siendo mi deseo el seguir escribiendo sobre las ventajas que tenemos con Julia. Como primeras acciones se han elaborado un par de vídeos sobre su instalación y los primeros pasos que debemos considerar para iniciarnos en esta aventura.

Proceso de análisis de datos

En esta primera parte me pienso enfocar en tres fases dentro del conocido como proceso de análisis de datos: Importar, Ordenar y Transformar.

Si lo vemos dentro de un flujo, el mismo que corresponde a las etapas definidas por Hadley Wickham, resaltamos en la siguiente gráfica lo considerado por ahora.

Fuente: Ciencia de Datos para Gente Sociable – Antonio Vasquez Brust

Procedimiento

Si bien nos enfocaremos en el uso de Julia, por la naturaleza de los datos iniciaremos apoyándonos en otras herramientas. Los datos a emplear tienen un componente geográfico, por lo tanto, empleará el software QGIS, con la final de realizar un preprocesamiento necesario.

Fuente de Datos – Uso de QGIS

Como fuente de datos vamos a considerar los siguientes:

Como parte de la preparación de nuestros datos para un posterior análisis se ha creado un Proyecto en QGIS con la incorporación de un grupo de capas, tal como se aprecia en la siguiente figura.

El procedimiento seguido para obtener dichas capas a partir de los datos descargados se puede resumir en las siguientes figuras.

Las capas que corresponden a dist_huanuco, prov_huanuco y dep_huanuco, fueron obtenidos desde los datos libres del OpenStreetMap. En QGIS empleamos el plugin QuickOSM para realizar la extracción de elementos que corresponden a los mismos.

Vista del uso del plugin QuickOSM

Al final, todas las capas que fueron preprocesadas en QGIS fueron exportados al formato GeoJSON y de manera adicional las capas que presentan geometría de puntos fueron exportados en un formato tipo CSV.

Exportando a formato CSV

Julia con Visual Studio Code

Ahora que tenemos los datos que vamos a emplear en nuestra carpeta de trabajo, vamos abrir el mismo empleando Visual Studio Code. En la actualidad considero que es una de las mejores opciones para trabajar Julia, en especial por la facilidad que tenemos para incorporar extensiones que permiten tener un mejor entorno de trabajo. Para nuestro objetivo voy a dividirlos en extensiones que son necesarios y aquellos recomendados, los últimos buscan principalmente mejorar la visualización de nuestro código.

  • Necesarios: Julia, Jupyter, Geo Data Viewer, HTML Preview, Office Viewer, Tabnine.
  • Recomendados: Julia Color Themes, Better TOML, Rainbow End, Prettify JSON, Rainbow CSV, Better Comments, vscode-icons

Luego de instalar las extensiones necesarias en VSCode, debemos realizar los siguientes pasos:

  1. Abrir la vista del terminal (habilitarlo desde el menú view)
  2. Iniciamos el REPL (por defecto se usa Alt + j Alt + o)
  3. Activamos nuestro entorno en nuestra carpeta (usamos la tecla ] y luego activate .)
  4. Dentro de nuestro entorno iniciamos la instalación de los paquetes de Julia requeridos, solo ingresamos el comando add seguido del nombre del paquete. Para esta primera parte usaremos los siguientes: IJulia, CSV, ArchGDAL, DataFrames, DataFramesMeta, PrettyTables)
  5. Luego ejecutamos el comando status, para verificar que todos los paquetes fueron instalados.
  6. Finalmente verificamos que se han generado dos archivos, el Project.toml y el Manifest.toml (incluyen información de los paquetes instalados como las dependencias, versiones, compatibilidad, nombres, etc.).

Es importante resaltar que al contar con Project.toml + Manifest.toml, es posible crear una instancia del mismo entorno de paquetes, lo cual es muy útil para la reproducibilidad.

Importación de datos

En Julia tenemos a las extensiones de CSV, DataFrames y ArchGDAL para apoyarnos en la importación de datos que tenemos en nuestra carpeta de trabajo. Para el caso de archivos en formato CSV podemos emplear el siguiente código.

En el caso que necesitemos trabajar con formatos de tipo GeoJSON, emplearemos el paquete ArchGDAL, que usa la librería GDAL para trabajar con diversos formatos de datos geoespaciales vectoriales y ráster.

Considerar que el resultado a diferencia del anterior, se incluye una columna con la geometría de los datos (wkbPoint). Se recomienda ejecutar typeof(dat_geo) y typeof(layer_geo), para conocer los tipos de datos generados.

Para realizar una exploración a nuestros datos en nuestro Dataframe emplearemos la función describe, obteniendo una tabla en donde se presenta algunos datos estadísticos, pero lo que quiero resaltar es la identificación de datos faltantes en algunas columnas.

Generando Tablas en formato HTML

Con la finalidad de ir visualizando nuestros resultados tabulares, vamos a generarlos en un formato más amigable como el html, para ello empleamos el paquete PrettyTables. Para automatizar la generación y posterior guardado de nuestras tablas usaremos una función específica, aunque en su documentación mencionan el procedimiento para guardar las tablas, para la función debo reconocer que seguí las indicaciones mostradas por el canal julia for talented amateurs.

Ordenar los datos

En Julia podemos ordenar rápidamente nuestros datos empleando la función sort, el uso de «!» seguido de la función indica una solicitud para cambiar los datos originales de manera permanente, en otras palabras, es considerado como la versión «in-place«. De la misma manera vamos a emplear la función dropmissing para eliminar los datos faltantes a nuestro Dataframe. Ambos resultados serán guardados en html.

Transformar los datos

En Julia para realizar una operación de agrupamiento, primero se debe crear un objeto GroupedDataFrame a partir del DataFrame empleando la función groupby. La función toma dos argumentos, el mismo DataFrame y un conjunto de columnas para agrupar. Luego se puede aplicar a cada grupo las funciones Combine, Select y Transform. En nuestro caso vamos a usar el primero, siendo muy útil para calcular estadísticas resumidas por grupo. Mayor detalle sobre la opciones de dichas funciones lo pueden encontrar aquí.

Como podemos apreciar en nuestro último resultado, no existe una columna que enumere las filas, por lo tanto, vamos a crear una columna índice, de la misma manera, al crear la columna en donde se sumaron los valores de población por distrito (name) y se identificaron los valores únicos (pe_ubigeo), por defecto se nombraron dichas columnas, en nuestro caso vamos a modificar los encabezados empleando la función rename. También vamos a convertir la última columna para que represente un valor de tipo String y finalmente el resultado lo guardaremos en un archivo con formato CSV.

Uso de Macros

Sobre herramientas de metaprogramación para DataFrames, Julia a través de los denominados macros presentes gracias al paquete DataFramesMeta, nos brinda la oportunidad de contar con una sintaxis más conveniente. En esta oportunidad exploraremos una de sus bondades como por ejemplo el uso de filtros y también opciones que tenemos para encadenar procesos (uso de operadores «Pipe«). En posteriores entradas profundizaré estos temas con otros paquetes, por ahora solo es un ejemplo básico pero muy útil.

Incorporando tablas a nuestro mapa

Como punto adicional, quisiera mostrarles la ventaja que tenemos ante la posibilidad de incorporar tablas en formato html a nuestro compositor de mapas en el QGIS. A continuación se muestra una imagen como ejemplo.

Reflexión Final

Considero que lo presentado hasta el momento nos puede dar una idea del gran potencial que tenemos al manejar nuestros datos empleando algunos paquetes de Julia. Para quienes ya tienen conocimiento de Python y R, se habrán fijado cierta similitud, incluso al leer la documentación de los paquetes de Julia, algunos de ellos fueron inspirados en dichos lenguajes. Si llegaron hasta aquí espero que haya despertado el interés en el uso de Julia, porque como dije, esto solo es el inicio de un grupo de entradas en donde me dedicaré a explorar otros paquetes que nos permitan realizar otro de los procesos importantes como la visualización.

Para quienes deseen probar todo lo visto hasta el momento, se ha generado un repositorio en donde se comparte todo el código y el proyecto de QGIS para visualizar el mapa. https://github.com/ccarbajal16/IntroDataScience.

También comparto un video elaborado sobre el procedimiento seguido.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *