Geo Big Data con Datos Censales

Introducción

En este artículo mostrare un ejemplo de análisis geográfico de todas las manzanas de México, mediante un grid hexagonal a nivel nacional. Usaremos los datos del Censo 2010 del proyecto SCINCE del INEGI (Oficina Nacional de Estadística y Geografía de México). y por supuesto vamos preparando la artillería para analizar los datos del próximo censo 2020 que será publicada la próxima semana: https://censo2020.mx/censo/.

Pasos a Seguir

Los pasos que llevaremos a cabo serán los siguientes:

  • Descargar todos los datos del proyecto, todas las manzanas de México.
  • Activar y Configurar la plataforma de análisis basada en Jupyter y Apache Spark.
  • Convertir los datos a formato parquet incluyendo la variable geográfica.
  • Calcular el centroide de cada manzana sin perder sus atributos estadísticos.
  • Obtener grid hexagonal para resumir los datos.
  • Realizar una agregación de datos censales usando los hexágonos mediante SQL.
  • Generar una visualización usando QGis.

1.- Preparar el entorno con Docker

La magia de Docker nos ayudará a simplificar varias tareas de configuración y uso de software. El precio que hay que pagar es proceder a instalarlo y verificar que funcione.

Verificar verión de Windows 10
Verificar verión de Windows 10
Verificación de Windows
  • 4 Cores o Superior
  • Y la opción de vitualización activada:
Virtualización Activada

Instalación de Docker

Para descargar el instalador hay que entrar a la siguiente liga: https://hub.docker.com/editions/community/docker-ce-desktop-windows . Ya estando en esa página procede a descargar el instalador como se muestra en la siguiente imagen:

Obtener Docker
Ignorar ésta recomendación y seguir adelante presionando [OK]
docker version
Varificación de que nuestro Docker está corriendo correctamente

2.- Descargar todos los datos de las manzanas de México.

En esta sección empezaremos a beneficiarnos de haber instalado Docker, pues usaremos un script de Linux para descargar todos los archivos censales publicados por el INEGI.

descarga_scince_linux.sh
Lista de archivos con la información censal a nivel manzana.
Descarga Archivo: http://bit.ly/2wdULXx
docker run --rm -it -v C:/geobigdata:/home jgoclawski/wget
wget https://www.inegi.org.mx/contenidos/masiva/indicadores/inv/01_SCINCE_zip.zip
Contenedor interactivo, con el directorio local mapeado en /home
# sh descarga_scince_linux.sh
Descargando los Datos Abiertos del Censo 2010 de México
Los 32 archivos con toda la información del Censo 2010

Exploremos los archivos descargados

La manera mas fácil de extraer todos los archivos es con la herramienta de Software Libre 7zip (https://www.7-zip.org/). Selecciona los archivos *.zip y ejecuta el comando Extraer aquí:

Carpetas con la información Censal
Algunas Manzanas del Estado de Aguascalientes México
Descripción de los campos estadísticos de cada Manzana geográfica.

3.- Activar y Configurar la plataforma de análisis basada en Jupyter y Apache Spark.

Para llevar a cabo el trabajo con todos los datos a la vez, es decir realizar análisis nacionales con todas las manzanas, usaremos otra imagen de docker, en esta ocasión la llamada jupyter/all-spark-notebook del proyecto Jupyter Docker Stacks (https://jupyter-docker-stacks.readthedocs.io/en/latest/), te recomiendo leer con detenimiento la documentación de dicho proyecto. Esa imagen simplifica al máximo el uso de Jupyter facilitando incluso el uso de Apache Spark ya que también está configurado dentro de esa imagen. Para que podamos procesar los archivos descargados será necesario ajustar los recursos asignados a la maquina de Docker. Se requieren al menos 8 Gb de Ram, lo cual se ajusta en la configuración de Docker Dashboard, ver la siguiente animación:

docker run -d -P -v C:/geobigdata:/home/jovyan/work  --name geobigdata jupyter/all-spark-notebook
docker port geobigdata 8888
Ejemplo de la salida del comendo anterior.
docker logs --tail 10 geobigdata
URL de Conexión a Jupyter Notebook
http://127.0.0.1:32769/?token=e24c9e2e1aacaec1a1d2b67fa659680d846ce8b14148b843
Jupyter corriendo y configurado con varios lenguajes ademas de Apache Spark
En la carpeta de Descargas encontramos los archivos del proyecto GeoSpark
docker cp geospark-1.3.1.jar geobigdata:/usr/local/spark/jars/geospark-1.3.1.jar

docker cp geospark-sql_2.3-1.3.1.jar geobigdata:/usr/local/spark/jars/geospark-sql_2.3-1.3.1.jar

docker cp geospark-viz_2.3-1.3.1.jar geobigdata:/usr/local/spark/jars/geospark-viz_2.3-1.3.1.jar
pip install geospark
conda install geopandas

4.- Convertir los datos a formato parquet incluyendo la variable geográfica

Apache Parquet (https://parquet.apache.org/) es un formato basado en columnas listo para aplicaciones de Big Data, por lo que ahora veremos como convertir los archivos descargados del INEGI a ese formato más escalable.

Crear la carpeta llamada: cuadernos
Código que lee los archivos shapefile descargados del INEGI y los convierte a formato parquet.
Todos los archivos manzanas.shp, manzanas.shx, manzanas.prj, manzanas.dbf para los 32 estados suman 1.31 GB
En el caso de el formato parquet bajo a 479 MB siendo menos de la mitad del formato shapefile original.

5.- Calcular el centroide de cada manzana sin perder sus atributos estadísticos.

Ahora que ya contamos con los archivos parquet con todas las variables estadísticas y la variable geográfica. Vamos a usar las capacidades de análisis geográfico de GeoSpark para calcular el centroide de cada manzana. Lo cual es una oportunidad para observar la integración con SQL.

Generar un nuevo parquet con los centroides de las manzanas y todos sus atributos, el cuaderno se puede descargar de aquí: http://bit.ly/2wiG8Cl

6.- Obtener grid hexagonal para resumir los datos

Para este tutorial se desarrolle un grid de hexagonos, de aproximadamente 85 Kilometros cuadrados con un total de 23,688 hexagonos cubriendo todo México.

23,688 hexágonos cubriendo todo Mexico, lo puedes descargar de aquí http://bit.ly/2IUS9kf
Convertir el Grid a parquet el código aquí http://bit.ly/3b5IrYq

7.- Realizar una agregación de datos censales usando los hexágonos mediante SQL.

Ya tenemos los elementos básicos para realizar el análisis nacional de cualquier atributo poblacional, a) las manzanas representadas por su centroide y sus atributos estadísticos y b) hexágonos cubriendo toda la república lo que resta es vincular ambas geometrías mediante un JOIN geográfico, que en este caso se realizará con la función ST_Within, que dadas dos geometrías evalúa la pregunta de si la primer geometría se encuentra dentro de la segunda.

Cuaderno de Jupyter que crea un archivo Shapefile con el resultado del análisis espacial de todas las manzanas de México agregadas por Población total, se puede descargar aquí http://bit.ly/2UdsUis

8.- Generar una visualización usando QGis

El resultado del proceso anterior generó un archivo Shapefile:

Conclusión

En este tutorial mostramos una secuencia de pasos que nos permiten instalar una plataforma de Big Data con capacidades Geográficas. El ejercicio puede mejorar mucho, por ejemplo incluir las localidades Rurales. Eso ya lo dejo para que el lector pruebe sus nuevas habilidades de procesamiento de Geo Big Data.

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