sábado, 12 de abril de 2014

Elaboración de Heatmaps usando Quantum GIS

En esta oportunidad quisiera mostrarles a través de un ejemplo práctico la herramienta de análisis del Quantum Gis denominada heatmap. 

¿Qué son los Heatmaps?
En primer lugar podemos decir que los Heatmaps (Mapas de calor) son una de las mejores herramientas de visualización y cálculo de la densidad de datos de puntos, en otras palabras los mapas de calor muestran las ubicaciones de las densidades más altas de las entidades geográficas, esta metodología permite generar su agrupación geográfica (clusters) de un fenómeno que deseamos analizar.

Aplicaciones
El uso de los heatmaps son variados, debido a que permite visualizar geográficamente lugares en donde se presenta los patrones de ocurrencia más alta que la media de cosas como por ejemplo la actividad de delicuencia, los accidentes de tráfico o la ubicación de nuevas tiendas que pueden surgir.

Ejemplo Práctico

Datos: 
En esta oportunidad vamos a emplear un grupo de datos vectoriales 
  • Una cobertura de puntos, los cuales se tratan de pasivos ambientales de mineria, información disponible aquí: Pasivos Ambientales.
  • Una cobertura de polígonos, que representan el límite departamental, disponibles en el siguiente enlace: Limite Departamental

Software: Se va a emplear la última versión el Quantum Gis 2.2 "Valmiera" lanzada en  febrero de este año.

Procedimiento:

1. Como primer paso hay que descomprimir el archivo descargado, como se podrá ver es un ESRI Shapefile de puntos, el cual deberá ser adicionado a nuestro área de trabajo del Qgis, para ello podemos hacerlo directamente con el icono resaltado en la imagen o en su defecto ir a Capa >>Añadir capa vectorial y ubicar dentro de nuestras carpetas el archivo vectorial.

 Figura 1: Adicionando los datos de puntos del ejemplo

2.  Se puede apreciar si abrimos la tabla de atributos de la capa vectorial la existencia de 2,133 puntos, en esta oportunidad para efectos prácticos vamos a trabajar sobre una zona en donde existe mayor cantidad de puntos y sobre ellos vamos a generar el heatmap, por lo tanto vamos a cargar el otro archivo descargado (Límite Departamental).

 
Figura 2: Adicionando los datos de polígonos del ejemplo

3. Apoyados con la cobertura de polígonos, vamos a determinar cúal sería el departamento que contiene la mayor cantidad de puntos, para ello vamos a emplear las herramientas de análisis disponibles en la barra de menú Vectorial >>Herramientas de análisis>>Puntos en polígonos. En la siguiente ventana se indicará las respectivas coberturas para generar un nuevo polígono (Figura 4), el cual se adicionará un campo, para este ejemplo por defecto lo dejaremos en CTAPTO, en dicho campo se mostrará el número de puntos existentes por cada Departamento, se graba el nuevo polígono (points_polygonos.shp).

Figura 3: Empleando la herramienta Contar Puntos en Polígonos

 
Figura 4: Configurando la herramienta Contar puntos en Polígonos


4.  Paso siguiente hay que verificar la tabla de atributos del nuevo polígono generado, con la finalidad de ver los valores dentro del campo CTAPTO, como nuestro objetivo es identificar la zona en donde existen mayores cantidades de puntos, realizando un ordenamiento de los datos se comprobó que es el departamento de Cajamarca el que posee la mayor cantidad de puntos.


Figura 5:Visualizando el polígono con mayor cantidad de puntos


5. Una vez con esa información realizamos una selección de la cobertura de puntos ubicados dentro del departamento de Cajamarca, luego se exporta como una nueva cobertura, con dichos puntos mostrados en la Figura 7se va a realizar el heatmap.

 

 Figura 6: Selección de los puntos y exportación de nueva cobertura


  Figura 7: Cobertura final de la Selección de los puntos

6. Ahora que tenemos los puntos seleccionados (select_pasivos.shp) vamos a emplear la herramienta heatmap del Qgis que se ubica dentro del menú Ráster >> Mapa de calor>>Heatmap (Figura 7). Luego en la siguiente ventana se tiene que indicar el nombre del ráster de salida además de los valores del radio (m), este valor especifica la distancia alrededor de un punto en el que se hará sentir la influencia del punto, al establecer un valor de radio demasido pequeño, los patrones de densidad se limitarán a la zona alrededor del punto, mientras que si establecemos un radio de búsqueda con patrones demasiados grandes, la densidad será demasiado generalizada. Posteriormente se puede modificar el número de filas y columnas con el cual se establece el tamaño de las celdas, es decir que al aumentar el número de files o columnas disminuirá el tamaño de las celdas lo que origina un aumento del tamaño del archivo de salida. Con todo ello se logra obtener el ráster resultante (heatmap_pasivos_mineria.tif).

Figura 7: Complemento heatmap

Figura 8: Configurando el complemento heatmap

Figura 9: Resultado aplicando el complemento heatmap

7. El resultado final es una imagen ráster que va desde negro (significa la existencia de pocos puntos alrededor) a blanco (gran número de puntos alrededor de la ubicación dada). Para una mejor visualización se va a modificar los colores, por lo tanto nos vamos a propiedades de la capa dentro de la pestaña de estilo, cambiamos el tipo de renderizador, para este caso usaremos unibanda pseudocolor y para generar el mapa de color se empleará la opción YlOrRd, después de esto hacer click en Clasificar y finalmente en Aceptar.
 
 Figura 10: Configurando el heatmap


 Figura 11: Heatmap generado aplicando mejoras de visualización



8. Una vez obtenido el mapa de calor, si bien es útil para la interpretación visual, no lo es tanto si deseamos utilizar estos resultados para el análisis, como por ejemplo si deseamos identificar los llamados hotspots, lo que permite agrupar las zonas en donde existe la más alta concentración de puntos. Para ello vamos ahora a identificar esos puntos a partir del heatmap generado. Ir a Ráster >>Calculadora ráster, luego se tendrá que decidir sobre el umbral primero, en nuestro caso vamos a considerar el valor de 0.02, por lo tanto todos los valores por encima de este umbral se considera que están en un clúster, una vez definido esto, pasamos a nombrar la capa de salida (hotspot_pasivos.tif), mientras que en la banda de raster identificada heatmap_pasivos_mineria@1, hacer doble Click, con ello se añadirá a la zona de la calculadora de campos, aquí debemos completar la expresión como: heatmap_pasivos_mineria@1>0.02, finalmente verifique que este marcado la casilla de "Añadir resultados al proyecto" luego Aceptar.

 
Figura 12: Empleo de la calculadora ráster para generar hotspots

9. La nueva capa añadida (hotspot_pasivos.tif), contine valores de 0 ó 1, todos los pixeles de la capa de entrada, donde el valor del pixel es mayor que 0.02 ahora tiene un valor de 1 y los demás son 0. Posteriormente vamos a convertir el ráster en una capa vectorial de polígonos, para ello nos vamos a Ráster>>Conversión>>Poligonizar (Ráster a vectorial), aquí debemos nombrar a la capa vectorial de salida (hotspot_pasivos_poly.shp) y también activar la casilla del nombre del campo (DN), finalmente Aceptar.

Figura 13: Conversión de ráster a vector


10. Una vez generada la nueva capa vectorial, la misma es la representación vectorial de las agrupaciones (clúster) creados en el paso anterior, por lo tanto contienen valores 0 y 1, como paso siguiente vamos a filtrar o seleccionar solamente los valores de 1, para ello solamente tenemos que estar dentro de la capa vectorial (hotspot_pasivos_poly.shp) haciendo un Click derecho ubicar Filtrar, en dicha ventana simplemente hacer doble Click sobre DN y dentro de la zona de "Expresión del filtrado específica del proveedor", terminar la expresión "DN"=1 luego Aceptar (Figura 15); como paso final el resultado obtenido hay que exportarlo como una nueva capa vectorial (hotspot_pasivos_final.shp).

 Figura 14: Resultado de generar una capa vectorial con valores de 0 y 1


Figura 15: Filtrado de los valores para generar las agrupaciones (clústers)


Figura 16: Resultado final con los clúster identificados


Con ello se termina este ejemplo, en caso desean profundizar este tema a continuación les voy a recomendar un grupo de enlaces, los mismos que sirvieron como referencia para lograr desarrollar este ejercicio.
  • http://www.qgistutorials.com/en/docs/creating_heatmaps.htm
  • http://www.digital-geography .com/create-point-density-raster-in-qgis/
  • http://www.gislounge.com/heat-maps-in-gis/
  • http://qgis.org/en/docs/user_manual/plugins/plugins_heatmap.html
  • http://idvux.wordpress.com/2009/08/21/heat-maps/



17 comentarios:

Marta Venegas dijo...

Excelente, de gran ayuda!

Mayra dijo...

Muchas gracias por compartir el tutorial, excelente.

Anónimo dijo...

Muchas gracias por tu tutorial, excelente trabajo :D

Ana dijo...

Estupendo tutorial. Me gustaría realizar un mapa de calor usando la opción "usar peso a partir de campo", pero en vez de sumar los valores del campo necesito que calcule el promedio, es posible? Muchas gracias. Un saludo.

carlos carbajal dijo...

Hola Ana, gracias por tu comentario. Estuve revisando la herramienta y probé con datos que consideraba valores de población, con la finalidad de emplear la opción de "usar peso a partir de campo", en efecto, al hacer la comparación he visto que genera el raster en donde considera la existencia de valores mayores al promedio dentro del radio establecido, aunque entiendo que tu consulta va sobre si es posible trabajar solo con promedios; al parecer no existe la opción de manera directa, pienso que puedes establecer manualmente tus zonas y determinar por selección el valor promedio que deseas evaluar para luego generar un campo con esos valores. Te recomiendo que revises dentro de las herramientas de análisis para vectores, la opción de "análisis de vecinos más próximos", te permite saber las distancias medias existentes, ayudando a establecer un mejor criterio antes de elaborar un mapa de calor.

pakenzio dijo...

¿en que unidades están los valores de cada celda del raster que arroja el mapa de calor? por ejemplo en arcgis con la herramienta density kernel da los valores en "número de puntos por kilómetro cuadrado" si tu proyecto esta en metros por ejemplo

carlos carbajal dijo...

La verdad no se profundizó ese tema, debido a que mi objetivo se enfocó a los efectos de visualización, pero me parece interesante poder analizarlo desde un punto de vista más estadístico, por lo que pude ver, existe opciones para definir el criterio de salida, el cual considera valores en bruto o escalado por el tamaño del núcleo. Bueno será motivo para investigar mas, gracias por tu comentario.

Andrés Novero y Claudia Suarez dijo...

Muy bueno, util e interesante, pero aun no puedo encontrar como calcular el radio, es decir, el valor ideal, quizas usando algunos calculos matematicos o estadisticos como vecino mas proximo, aun no lo se. Lo cierto es que al emplear una mininma unidad ya sean 2 mts o 50 mts. La objetividad que intenta lograr esta aplicación se pierde. Muchas gracias voy a descargar el QGIS y experimentar con zonas calientes de delitos en Mendoza. Abrazo y Excelente laburo.

Unknown dijo...

Hola, antes que nada decirte que el blog es excelente!! Quisiera consultarte cómo puedo hacer para obtener un mapa como el del siguiente enlace: https://fs02.androidpit.info/userfiles/4774964/image/ATT4GCoverageMapUSA-w628.jpg
Muchas gracias! :)

carlos carbajal dijo...

Gracias por los comentarios al blog. De acuerdo a la imagen que indicas María, al parecer se trataría de las zonas de cobertura de redes móviles o sobre el uso de las mismas; ahora saber cómo lo hicieron no podría decirte, es posible que realizaron un tipo de interpolación o simplemente han rasterizado datos; lo importante es saber que todo depende de los datos que tenemos y qué es lo que queremos mostrar.

Unknown dijo...

Muchas gracias, Carlos. Como verás estoy aprendiendo a usar qgis, por lo que no tengo mucho conocimiento aún, seguro te contacte nuevamente con más preguntas :)

carlos carbajal dijo...

Me da gusto María que tengas las ganas de seguir aprendiendo el uso del QGIS, es una buena herramienta, por mi parte trataré de seguir difundiendo sus aplicaciones, espero que al igual que tú otros se animen a usarlo.
Saludos,

Unknown dijo...

No puedo bajar los insumos del tutorial, me los puedes enviar por favor para realizar el ejercicio. Gracias

carlos carbajal dijo...

Hola Carlos, en efecto me estoy dando cuenta que los enlaces que menciono ya no están activos. No existe ningún problema mi estimado, solamente me escribes a mi correo cmcarbajal@gmail.com y te respondo adjuntando los archivos.

Saludos

Anónimo dijo...

carlos, qué representan los valores que salen en el raster y que se gradúan por color? gracias desde ya.

Mariela Marino dijo...

carlos, qué representan los valores que salen en el raster y que se gradúan por color? gracias desde ya.

carlos carbajal dijo...

Hola Mariela,

En relación a tu consulta, los valores que resultan al ejecutar la herramienta de "heatmap", simplemente representan la densidad de puntos, los cuales pueden variar dependiendo del valor del radio considerado. Cómo verás, los valores más altos representan o se interpretan como aquellas zonas en donde se concentran más puntos, esto de acuerdo a su ubicación.