martes, 21 de julio de 2015

Estadísticas para datos espaciales con QGIS 2.10 Pisa: Parte 3



En esta oportunidad vamos a completar este grupo de entradas, las cuales tienen como objetivo mostrar las herramientas existentes en QGIS para mostrar estadísticas de nuestros datos espaciales.

Cuarto Ejercicio:

Para este ejercicio vamos a necesitar descargar otro grupo de datos, denominado "SEAS_data_comp.zip", disponible en el enlace compartido en la primera parte de este grupo de entradas. Se refiere a datos de tipo vector, correspondiendo a los valores de una encuesta realizada para nuestro ámbito de estudio (en total son 7,803 registros), cada punto representa geográficamente el centroide de cada polígono SEA, por lo tanto, para un mismo punto se van a registrar varios valores, pero nosotros necesitamos generar una tabla de datos con la suma de los valores agrupados por cada SEA, para ello existe una columna representa el valor único de cada SEA (ID_UBISEA).

Paso 1: Instalar el plugin "Dissolve with stats" tal como ya lo sabemos hacer desde el administrador de complementos, para que luego lo podemos ver dentro de la barra de menú "Vectorial" (Fig. 1).


Fig. 1: Instalando el plugin Dissolve with stats

Paso 2: Descargar los datos requeridos y ponerlo como uno de las capas en nuestro QGIS, revisando la tabla de atributos para comprobar la cantidad de registros existentes. Una opción digamos más profesional podría ser empleando otro plugin interesante, nos referimos al "Live Statistics" (Fig. 2), en resumen permite visualizar estadísticas sencillas sobre datos vectoriales en una pequeña barra de herramienta proporcionando información en tiempo real.

Fig. 2: Instalando el plugin Live Statistics


Paso 3: Una vez activado el plugin Live Statistics, vamos a configurar para poder consultar información en tiempo real, para ello primero debemos asegurarnos tener activo la capa que vamos a consultar, siendo nuestro objetivo mostrar cuantos datos por punto existen, como ejemplo podemos seleccionar un punto y veremos que en un misma coordenada existen 77 valores, del mismo modo podemos consultar otras estadísticas (Fig. 3).


Fig. 3: Obteniendo estadísticas en tiempo real con el plugin


Paso 4: Ahora ya podemos realizar el ejercicio, para lo cual ejecutaremos el plugin Dissolve with stats, para luego configurar en su ventana los datos requeridos, hay que tener cuidado de establecer que tipo de estadística queremos calcular para todas los campos (Fig. 4).

Fig.4: Configuración del plugin Dissolve with stats

Paso 5: Finalmente tendremos como resultado 390 registros que corresponde a cada SEA (ID_UBISEA), con sus valores totales, puesto que se realizó una suma de todos los que compartían una misma coordenada (Fig. 5).


Fig. 5: Resultado de disolver un campo sumando sus valores numéricos



Quinto Ejercicio:

Vamos a realizar nuestro último ejercicio, en la cual vamos a enfocarnos a trabajar con nuestros datos de tipo raster, en específico el que corresponde a nuestro DEM (dem_ambito_utm.tif), además se requiere tener instalado dos plugins o complementos, el primero Slicer y también el denominado Raster Pixel Count by ClassBreak.

Paso 1: Primero vamos a realizar un recorte de nuestro raster, para ello empleamos "Clipper", el cual es una de las herramientas de extracción ubicado dentro del menú Ráster. El objetivo es que nuestro raster solo cubra el ámbito de las provincias, por lo tanto este último va ser la capa de máscara (Fig. 6).

Fig. 6: Ejecutando Clipper para nuestro DEM


Paso 2: Ahora vamos a emplear el plugin Slicer; en resumen nos permite realizar una reclasificación de valores de datos raster, considerando el rango de valores, realizando cortes homogéneos o variables. Una vez activo, nos permite mostrar el rango de nuestros valores de entrada, en este caso de altitud en metros, luego de indicar nuestra archivo de salida, debemos elegir el método para determinar los pasos (Step), para nuestro caso se van a considerar "variable" para no extender el número de reclasificación (Fig. 7).

Fig. 7: Configuración del plugin Slicer

Paso 3: Una vez ejecutado el botón Slice, vamos a obtener como resultado una capa raster (dem_ambito_provincias_clasifica.tif) con valores que van desde el 1 al 9, los que representan diversos niveles de altitud en metros (Fig. 8).

Fig. 8: Reclasificación realizada empleando Slicer.

Paso 4: Ahora nos plantearemos un problema a resolver, como por ejemplo, deseo saber los porcentajes de área que ocupan cada rango de altitud en nuestro ámbito de estudio. Un caso muy típico de resolver cuando no contamos con datos vectoriales en donde por geometría es sencillo realizarlo. Nuestro opción que tenemos es emplear el plugin Raster Pixel Count by ClassBreak, el cual nos permite determinar estadísticas en función a un valor de quiebre que le asignemos, por lo tanto en nuestro caso serán los valores del 1 al 9 y del cual conocemos cuales son su rango de valores en altitud. Luego de instalar el plugin procedemos a indicarle nuestra capa raster de entrada y los valores de quiebre (Fig. 9).

Fig. 9: Ejecutando el plugin para obtener estadísticas 
de un raster por valores de quiebre


Paso 5: Finalmente los resultados lo podemos llevar a cualquier hoja de cálculo y ordenarlos para que podamos obtener los porcentajes requeridos en nuestro problema. Hay que tener en cuenta que para comprobar si realizamos bien nuestro trabajo, podemos comparar el valor total del área obtenido desde nuestro polígono frente al calculado con los valores raster, si bien nunca serán los mismos por tratarse de dos tipos de datos, éstos deben aproximarse. Lo importante de esta herramienta es la posibilidad que conocer el número de píxeles diferenciados por valores clasificados (en este caso de altitud), y al conocer las dimensiones de cada píxel, podemos calcular un área multiplicándolo por este último valor (Fig. 10).

Fig. 10: Resultado del cálculo de porcentajes de áreas 
por rango de altitud.


Muy bien, espero que haya podido despertar el interés en el uso de herramientas estadísticas presentes en el QGIS, mi objetivo era demostrar que podemos resolver algunos problemas comunes al momento de trabajar con estadísticas; todo ello en base a mi experiencia personal en donde tuve que buscar alternativas y los pude encontrar explorando estas herramientas y lo quise compartir con todos aquellos interesados en estos temas.
Si tienen alguna duda o experiencia en el manejo de las herramientas mostradas no duden en comentar. Hasta otra oportunidad.

Referencias:


  1. https://github.com/olivierdalang/liveStats
  2. https://github.com/juliepierson/DissolveWithStats
  3. https://github.com/miguel-reginaldo/Slicer


18 comentarios:

mari dijo...

Hola, quisiera consultar por que tengo un polígono para el cual quiero calcular su area. como se hace esto en qgis. Ademas, tengo una capa raster para la cual quiero calcular el area pero solo de algunos pixeles (por ejemplo los que contengan valores por arriba de cierto limite), cómo se puede realizar eso. Desde ya le agradezco la atención y me disculpo por la molestia!

carlos carbajal dijo...

Estimada Mari, en relación a tus consultas, sobre el cálculo de área de un polígono en QGIS, la misma se puede realizar de varias formas, pero te recomiendo que uses las herramientas que están en la barra de menús llamada "Vectorial", ahí encontraras uno que dice "herramientas de geometría", seleccionas la que dice "exportar/añadir columnas de geometría", luego te mostrara una ventana en donde puedes guardar tu capa con otro nombre, luego verás en la tabla de atributos que se añadió los valores de área.
Con respecto a tu otra consulta, recomiendo que sigas el procedimiento que se indica la entrada que seguro revisaste, solo tendrías que usar el Slicer indicando tus límites de valores de tu capa raster, luego empleas el plugin Raster Pixel Count By ClassBreak, para que puedas tener las áreas en los límites requeridos.
Espero que te haya servido de ayuda, saludos.

mari dijo...

Estimado Carlos,Muchas gracias por responder!fue muy util la entrada y la respuesta...me animé y probé la herramienta rasterpixelcount! lo hice con un archivo con formato ascii que previamente converti a tif). Primero probe con la aplicacion de slicer y luego solo con el archivo ascii sin convertir y sin aplicarle slicer..los resultados fueron muy distintos. En caso que habia aplicado el slicer al traducido, quedo un archivo recortado como queria (supuestamente a partir de los valores 0.6 que es el valor minimo limite que estableci como criterio,para el cual quiero saber cantidad de pixeles y area) pero al aplicar el rasterpixelcount, el resultado de break count muestra para cada categoria, cero pixeles y tambien cero area. Mientras que cuando utilizo la herramienta rasterpixelcount con el archivo ascii sin convertir y le indico en break values separate by commas a partir del valor 0.6 (que es el rango criterio), el break count asigna valores de contabilizacion de pixeles y area para cada categoria... mi consulta cuál es el camino apropiado?por que da cero en la contabilizacion de pixeles y area?..El resultado de area esta expresado en metros cuadrados? de antemano muchas gracias y disculpas por tantas preguntas

carlos carbajal dijo...

Hola Mari, al parecer de lo que me comentas, el archivo original en formato ascii te ha permitido obtener las áreas de los pixeles, es posible que al convertirlo a Tiff existió alguna alteración. Tengo entendido que los valores de áreas están expresados en metros cuadrados, pero revisa que sistema de referencia estás empleando.

Anónimo dijo...

Estimado Carlos
Tengo una pregunta hice un análisis de proximidad de 5 y 10 km a un raster1 y sobre este puse otro raster2, quisiera saber cuanta area del raster2 esta dentro de los 5 km y de los 10km, hay alguna herramienta que realice este calculo? o algún procedimiento para realizar este calculo de área de un raster?, espero que se entienda la pregunta y le agradezco de antemano su respuesta.
Saludos Sand

carlos carbajal dijo...

Mi estimado, para serte sincero creo que entendí a medias tu consulta, pero no creo que exista mucho inconveniente porque todo manejo de datos raster es muy manejable con la calculadora raster, pero para determinar áreas la herramienta "raster pixel count by classBreak" te debe ayudar, si deseas me puedas pasar tus raster y lo podré analizar mejor.

saludos,

Marilo dijo...

Estimado Carlos, estoy usando el plugin dissolve with stats con un shp de puntos de localidades con cantidad de población. Esta capa tambien tiene a que aglomerado pertenece cada localidad. Quiero hacer un dissolve con la columna aglomerados para que me devuelva la cantidad de poblacion por aglomerado y me da el siguiente error Sorry, could not create oulput shapefile.


muchas gracias

Ma.Lorena

carlos carbajal dijo...

Hola María, veamos tu caso. Entiendo que tienes una capa de puntos, debes tener un campo con los nombres de localidades, otro con la población y uno de aglomerados. Cuando aplicas dissolve with stats seleccionas la columna de aglomerados seguro y le indicas que genere una suma la columna de población. En teoría no debería salir error, pero revisa si los datos de población están en formato numérico (Real).

Saludos,

Vanesa&Jorge dijo...

Hola, Estoy creando un shp de polígonos, pero cuando intento crear un polígono próximo a otro, inmediatamente me crea los vértices de el polígono adyacente. A veces me sale un error diciendo que hay coincidencia de x nodos,a pesar que con el ratón he picado en otro sitio. Me comienza a pasar lo mismo al calcular las áreas desde la barra de herramientas, no usa los vértices donde pico con el ratón, si no los vértices de una figura próxima, tanto vectoriales como raster.

carlos carbajal dijo...

Hola Cristina,

Desconozco el origen de tus datos, pero veo que tienes problemas en la edición de capas vectoriales. Por lo general cuando se necesita crear un polígono adyacente, es importante previamente definir nuestras de opciones de autoensamblado, para indicar valores que nos permita tener un mejor ajuste. Ahora en la versión 3, aparece como una opción independiente desde la barra de menú "Proyecto". Si trabajas con la versión 2.18, te recomiendo que uses también el "autoensamblador de geometrías".

saludos,

Unknown dijo...

Buen día Carlos, estoy realizando un trabajo con imagenes satelitales sobre la evolución del casco urbano de una ciudad a traves de los años. Para esto necesito calcular año tras año el area de toda la construccion urbana. Probé combinando bandas para resaltar zonas urbanas y luego con la calculadora de campos, marcando manualmente poligonos sobre la zona urbana en el ráster. Finalmente calculo las areas de esos poligonos y las sumo, de manera que obtengo el area total de construccion urbana. Mi pregunta es si hay otra manera mas eficiente de hacerlo, o de que manera me podés recomendar de que lo haga, ya que de la manera en que lo estoy haciendo depende de mi precisión a la hora de observar la imagen y de mi capacidad de discernir entre lo que es construccion urbana y lo que no, lo que puede introducir mucho error. Si no hay otra forma, seguiré con ese metodo. Muchas gracias! Saludos

carlos carbajal dijo...

Hola Ramiro,

Interesante trabajo el que me comentas. Me imagino que estás empleando imágenes con una buena resolución espacial para que logres distinguir bien las zonas urbanas. Recomiendo que emplees un método de clasificación supervisada que te ayude a identificar las zonas urbanas, quizás el uso del conocido como "OBIA (Object-Based Image Analysis)", la verdad no lo he probado mucho, pero quizás te pueda ayudar.

Saludos,

Unknown dijo...

Hola Carlos. Buen día.
Estoy trabajando con la localización y el avance en cuanto a aportes de cada empresa de un área. Ya hice todos los poligonos ( que serian las industrias y empresas) yo ahora lo que quiero hacer es representar esos avances en porcentajes y que se represente en colores o con algun plugins lindo en 3d. Un compañero me comento de Qgis2threejs, pero nunca me dijo como aplicarlo! Podrias ayudarme y guiarme como puedo hacer esa representación? Muchas gracias!

carlos carbajal dijo...

Estimado, por lo que tengo entendido el plugin Qgis2threejs trabaja con datos ráster (DEM) para dar una apariencia en 3D, si bien no lo he trabajado mucho, existe bastante material en la web para conocer su manejo. Pero por lo que me indicas, lo tuyo está más ligado a la presentación de reportes de avances. Si tienes campos con datos de tiempo, quizás puedes emplear el plugin D3 Data Visualization, en una publicación hablo al respecto (http://carbajallosa.blogspot.com/2017/09/visualizacion-y-analisis-de-datos-de.html). Otra opción es el uso del plugin Data Plotly (http://carbajallosa.blogspot.com/2017/08/generando-graficos-con-data-plotly-en.html).

Anónimo dijo...

Hola Carlos, favor publicar otro enlace que habilite la descarga del ejercicio SEAS_data_comp.zip.

Gracias.

Joseph dijo...

Hola,

Necesito ayuda. Tengo un conjunto de archivos raster que varian en el tiempo de un mismo territorio. Es posible obtener la evolución de la data en puntos específicos. Realicé el proceso de extracción de información de un raster dados algunos puntos, pero si tengo 720 raster ¿Qué podría hacer?.

Agradecería cualquier consejo o sugerencia.

carlos carbajal dijo...

Para quién esté requiriendo los datos denominados SEAS_data_comp.zip; ya está actualizado para que lo puedan descargar.

carlos carbajal dijo...

Estimado Joseph, te recomiendo usar algunos plugins que trabajan con datos variables en el tiempo, entre ellos tenemos a EO Time Series Viewer, RasterTimeseriesManager, Temporal/Spectral Profile Tool. Puedes buscar en mi blog sobre el uso de algunos de ellos. Pero de todas maneras también te tienes que apoyar en herramientas de análisis ráster propios del QGIS.