Introducción al análisis de capas vectoriales

En el caso de las capas vectoriales podemos trabajar únicamente con los elementos de la capa considerando solamente la tabla de la tabla de atributos asociada, como si se tratara de un data.frame independiente.

O realizar operaciones en los que se tiene en cuenta los elementos de cada capa por su componente espacial.

En este documento vamos a trabajar con la tabla de atributos.

Lectura y descripción de las capas

Para cargar o importar una capa vectorial podemos recurrir a diferentes funciones. Como lo mas usual es que tengas la información de las capa vectoriales en formato shapefile, el estándar para este tipo de datos, usaremos la funcionesshapefile() de la librería raster.

Un shapefile es un multifichero que guarda la información espacial en varios ficheros, tienen en común el nombre y se diferencian por las extensiones, pero todos son necesarios para que el multifichero sea operativo.

Como mínimo el conjunto está formado por 3 ficheros que contienen:

  1. .shp las entidades geométricas de cada objeto
  2. .shx el índice de las entidades
  3. .dbf la tabla de atributos asociada y conectada por el índice

Aunque hay otros archivos opcionales que podéis ver que contienen en el siguiente entrada de la wikipedia.

Para empezar a trabajar en R cargamos la capa:

Una vez creado el objeto asociado a la capa, puedes ver sus características, representarlo y hacer las estadísticas, transformaciones o lo que consideres necesario. Usaremos las funciones geometry(), para determinar el tipo de objeto.

Organización administrativa del territorio

En esta ocasión vas a usar los ficheros que recogen la información de una selección de términos municipales de la Región de Murcia, en formato vectorial (seleccionTerminos.shp, y sus restantes ficheros asociados .cpg, .dbf, .prj, .qpj y shx).

Trabajamos con bases de datos, en ellas, se intenta ocupar el menor espacio de disco posible; en el caso de los números enteros largos (int64) se ocupa mayor espacio que los caracteres o factores, por ello, es necesario indicar a la función que, al cargar la tabla, los tome como números. Para esto usamos el argumento integer64. Ahora ya no es necesario generar nuevas variables como numéricas, pues desde el origen se toman como tal.

Características de nuestra capa

Primero recordaremos que tipo de datos espaciales tenemos usando la función geometry(), ya vista en el módulo 1. Obtén un resumen a los datos y comprueba las dimensiones de sus tablas de atributos.

Recuerda que lo podemos representar y añadir los códigos de los municipios como etiqueta, función text(), y como leyenda usando un poco el ingenio y lo que ya sabemos de R, funciones paste() para generar el vector con el código y nombre así como la función legend(), para añadirla al gráfico.

Responde

¿Cuántos términos municipales tiene la capa vectorial?

¿Qué variables son numéricas?

¿Cuál es la superficie del municipio más grande? ¿Y del más tequeño?

¿Se te ocurre como saber qué municipios son?

Extrayendo información de la tabla

Como en cualquier data.frame podemos seleccionar registros, en función de ciertos valores, ordenar la tabla, …

Por ejemplo ¿cuáles son los términos municipales con una superficie mayor de 35 km2?

Vamos a usar las operaciones lógicas, ya vistas en módulos anteriores, y al ser objetos espaciales también podrás visualizar el resultado como un mapa.

  1. Realizamos la selección (operación lógica).

  2. Es útil mostrar el listado de términos municipales.

  3. También tienes la opción de representar gráficamente.

También puedes seleccionar por variables categóricas, por ejemplo, por la variable nombre, siguiendo los mismos pasos

  1. Realizamos la selección (operación lógica).

Responde

¿Se te ocurre como seleccionar los municipios con superficie menor de 20 km2 y mayor de 100 km2?

¿Cómo resolverías la pregunta anterior pero sólo de la comarca Vega del Segura ?

Añadiendo variables

Puedes, obviamente, añadir nuevas variables a la tabla de atributos, eso sí, debes añadir un valor para cada elemento de la capa, como lo haces en cualquier data.frame. Claro que también puedes realizar operaciones entre las variables, que den una nueva como resultado.

Vamos a ver un ejemplo de esta última opción. Como tenemos el número de habitantes de cada municipio, para el año 2015, variable POB2015, y la superficie de cada término municipal, en kilómetros cuadrados, en la variable SUPERFKM2, es fácil obtener la nueva variable densidad de población para 2015 (den2015).

Y podemos representar el mapa en función de esa varible, donde los colores más intensos indicarán una mayor densidad.

Responde

¿Qué variable necesitaríamos para calcular el incremento de población entre 2000 y 2015, en nuestros municipios?

¿Qué ocurre si utilizas la expresión terminosV$nuevaVar <- 1?

¿Qué añadirías a la representación gráfica para que fuera más explicativa?

Cálculo por códigos o tipos

En algunos casos necesitaremos obtener la información de los elementos de nuestra capa de manera agregada, es decir, el valor de alguna de las variables en función de otra. Para ello recurrimos a la función aggregate(), se trata de la función incluida en el paquete sp, que carga por defecto la librería raster; ya verás más adelante que existe también la versión aggregate del propio paquete raster, pero no te preocupes R detectará cual es la necesaria.

En las capas de polígonos esta función se puede aplicar tanto a la tabla como a la capa en sí, aspecto que vemos en otro documento. Al aplicarlo a la tabla, obtendremos solamente la información solicitada.

  1. Superficie por comarca

  2. Número de municipios por comarca

Cuidado

Si deseas trabajar con todas las columnas de la tabla puedes recurrir a la función aggregate del paquete stats:

Pero cuidado, las tablas de atributos suelen tener columnas de distintos tipos. En el caso de evaluar este ejemplo obtendrás mensajes de warning asociados al pretendido calculo de medias para variables de cadena o factores.