Professional Documents
Culture Documents
LECCIÓN 2
Esta lección fue escrita por Sean Angiolillo y se actualizó por última vez el 29 de enero de 2019.
La lección anterior examinó los numerosos casos de uso de datos geoespaciales. Ahora comenzaremos a manipular los datos
geoespaciales en R usando el sf paquete. Aprenderá cómo importar datos espaciales, combinar datos de atributos en
objetos geoespaciales existentes, calcular áreas y simplificar marcos de datos espaciales antes de trazarlos (que es el tema
de la próxima lección ).
En muchos sentidos, los beneficios de usar R sobre un SIG de escritorio son similares a los beneficios de usar R sobre Excel
para el análisis de datos.
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 1/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
R es gratuito y de código abierto , lo que hace que sea más fácil y económico comenzar, en comparación con las
costosas licencias necesarias para muchos SIG de escritorio. Esto ha ayudado a difundir el análisis de datos
geoespaciales más allá del dominio de solo especialistas en SIG, lo que abre la oportunidad a un ecosistema más amplio
de contribuyentes.
Como un lenguaje de programación completo, la interfaz de línea de comandos de R tiene una mayor flexibilidad que la
interfaz de apuntar y hacer clic de un SIG de escritorio. Esto significa que no hay restricción en lo que finalmente se
puede lograr.
R es reproducible de una manera que las interfaces de apuntar y hacer clic no lo son. Esto es, por supuesto, clave para el
proceso científico.
La mayor capacidad de compartir de los scripts y paquetes R fomenta un ciclo de desarrollo más rápido y un flujo de
trabajo más colaborativo.
Muchas de estas ventajas se aplican a cualquier lenguaje de programación de código abierto, como Python, que comparte
una API con muchos GIS de escritorio. Sin embargo, R, diseñado como un entorno para la computación estadística, es
particularmente adecuado para estadísticas espaciales y ofrece un acceso incomparable a un enorme ecosistema de
bibliotecas estadísticas. Las bibliotecas de visualización de datos de R en particular son una ventaja clave cuando se trata de
mapear datos geoespaciales.
APRENDE MÁS:
Consulte "¿Por qué Geocomputación con R?" para una mayor discusión de los méritos de R para GIS.
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 2/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
Antes de trabajar con un nuevo área de dominio en R, es útil verificar su Vista de tareas CRAN asociada para obtener una
descripción general de los paquetes relevantes. La Vista de Tareas CRAN para el Análisis de Datos Espaciales enumera
docenas de paquetes relacionados con datos geoespaciales. Hasta hace poco, el primer paquete mencionado era sp , pero
ahora muestra primero el sf paquete y observa que el mantenimiento sp continuará.
¿Qué paquete debe utilizar para los datos geoespaciales? La respuesta podría diferir según sus objetivos, pero el sf paquete
es probablemente el mejor lugar para comenzar. El sf paquete (Características simples) proporciona un sistema de clase
para datos vectoriales geográficos. Es el sucesor del sp paquete y está siendo adoptado rápidamente por muchos otros
paquetes para datos geoespaciales.
Comencemos a explorar algunas de las características del paquete con datos económicos y de población indios simples a
nivel estatal.
APRENDE MÁS:
¿Nunca usaste el sf paquete? Comience con el libro de código abierto recientemente completado en desarrollo,
Geocomputation with R de Robin Lovelace, Jakub Nowosad y Jannes Muenchow. En particular, el Capítulo 2 brinda una
gran introducción sobre qué son las características simples y la estructura de los sf objetos.
Los entusiastas de los datos espaciales también están entusiasmados con el anuncio de que sf los autores del paquete,
Edzer Pebesma y Roger Bivand, están trabajando actualmente en un libro de código abierto propio, Ciencia de datos
espaciales . Los borradores de los primeros ocho capítulos de lo que seguramente será un recurso clave para el campo
ya están disponibles.
Creando objetos sf
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 3/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
Para los usuarios de Tidyverse, uno de los aspectos más interesantes del sf paquete es la capacidad de trabajar con datos
geoespaciales en un flujo de trabajo ordenado. A diferencia de su paquete predecesor sp , con el sf paquete, los datos
geoespaciales y de atributos se pueden almacenar juntos en un marco de datos espacial , donde la geometría del objeto
ocupa una columna de lista especial. Además de ser más rápido, esto le permite manipular un sf objeto a través de
magrittr conductos como un marco de datos ordinario, o al menos uno con algunas características especiales.
Es ciertamente posible crear sus propios sf objetos con funciones del paquete como st_point() , st_linestring() , y
st_polygon() . Pero en la mayoría de los casos solo tenemos que leer datos espaciales existentes. Eso se hace generalmente
con la st_read() función.
Los shapefiles utilizados en esta demostración se pueden encontrar en el repositorio de GitHub asociado a este blog .
library(sf)
my_sf <- st_read("india_states_2014/india_states.shp")
NOTA:
Todas las sf funciones comienzan con st_* ayudar a los usuarios a identificarlos.
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 4/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
En general, puede encontrar datos de límites administrativos de GADM . Mantiene los datos de límites administrativos
actuales de fuente abierta para la mayoría de los países. Es posible descargar datos espaciales directamente desde el sitio
web de GADM, pero usar el GADMTools paquete ayuda a garantizar que su flujo de trabajo sea reproducible. Especificando
level = 1 devuelve límites a nivel de estado.
APRENDE MÁS:
El sitio web de Robin Wilson proporciona una gran lista de fuentes de datos GIS gratuitas, que cubren tanto la geografía
física como la humana.
El siguiente código descargará los shapefiles para los estados de la India. Sin embargo, dado que Kashmir no está incluido en
las fronteras de la India, usaremos los shapefiles en el repositorio.
library(GADMTools)
india_wrapper <- gadm.loadCountries("IND", level = 1, basefile = "./")
# check your directory for a file "IND_adm1.rds" after running this command
Inspeccionar objetos
Antes de trabajar con este sf objeto, comparemos brevemente los paquetes sf y sp .
Primero, convertiré el sf objeto a SpatialPolygonsDataFrame , una clase S4 definida por el sp paquete. Podemos hacer esto
con sf::as() .
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 5/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
class(my_spdf)
## [1] "SpatialPolygonsDataFrame"
## attr(,"package")
## [1] "sp"
str(my_spdf, max.level = 2)
Notamos que tiene 5 "ranuras" (cada una precedida por el @ símbolo). La primera ranura debe parecer familiar. La ranura de
datos contiene un marco de datos con 36 observaciones de 8 variables. Podemos extraer cualquiera de estas ranuras usando
el @ símbolo como lo haríamos normalmente con el $ símbolo.
library(tidyverse)
glimpse(my_spdf@data)
## Observations: 36
## Variables: 8
## $ id <dbl> 28, 1, 2, 3, 5, 6, 4, 8, 12, 7, 11, 13, 17, 14, 20, ...
## $ name <fct> Andhra Pradesh, Jammu & Kashmir, Himachal Pradesh, P...
## $ abbr <fct> AP, JK, HP, PB, UT, HR, CH, RJ, AR, DL, SK, NL, ML, ...
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 6/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
Los siguientes ranuras tienen polygons , plotOrder , bbox y proj4string . Volveremos a estos en el contexto de los
sf objetos. Por ahora, solo tenga en cuenta que los datos y aspectos de la geometría del objeto se mantienen en ranuras
separadas. Esto no es compatible con el flujo de trabajo de estilo tidyverse al que muchos de nosotros nos hemos
acostumbrado.
Si bien podemos continuar trabajando con este formato, volvamos a convertirlo en un sf objeto con la st_as_sf() función e
inspeccionemos la diferencia.
La primera SpatialPolygonsDataFrame , una clase definida por el sp paquete, ahora tiene dos clases simultáneas: sf y
data.frame . Imprimir las primeras observaciones nos dice mucho sobre el objeto.
head(ind_sf, 3)
El geometry type es un multipolígono porque las geometrías representan las formas de varias áreas. Otros tipos de
geometría comunes incluyen puntos, líneas y sus contrapartes "múltiples".
epsg y proj4string describir el sistema de referencia de coordenadas (CRS). Tenga en cuenta que este es un CRS
geográfico (medido en longitud y latitud) en lugar de un CRS proyectado.
APRENDE MÁS:
Para obtener más información sobre los sistemas de coordenadas de referencia, véase la sección 2.4 de
Geocomputación con R .
Podríamos acceder directamente a la información sobre las características espaciales del objeto con funciones como
st_geometry_type() , st_dimension() , st_bbox() y st_crs() . Por otra parte, las funciones familiares como glimpse() o
View() que iba a usar para explorar una trama de datos también funcionan en sf objetos.
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 8/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
Si inspecciona más este objeto, puede ver que tiene algunas columnas de atributos que dan una abreviatura y un cuadro de
límite para cada estado. Lo más importante es que la última columna contiene la geometría de cada estado en una columna
de lista.
glimpse(ind_sf)
## Observations: 36
## Variables: 9
## $ id <dbl> 28, 1, 2, 3, 5, 6, 4, 8, 12, 7, 11, 13, 17, 14, 20, ...
## $ name <fct> Andhra Pradesh, Jammu & Kashmir, Himachal Pradesh, P...
## $ abbr <fct> AP, JK, HP, PB, UT, HR, CH, RJ, AR, DL, SK, NL, ML, ...
## $ geo_level <int> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3...
## $ minx <fct> 76.7600000000000051, 72.5742599999999953, 75.6050299...
## $ miny <fct> 12.6230899999999995, 32.2647800000000018, 30.3816600...
## $ maxx <fct> 84.7149699999999939, 80.3008899999999954, 79.0511599...
## $ maxy <fct> 19.1614800000000010, 37.0503000000000000, 33.2219100...
## $ geometry <MULTIPOLYGON [°]> MULTIPOLYGON (((80.0553 15...., MULTIPO...
Manipulando objetos sf
Debido a que los marcos de datos espaciales en el sf paquete son marcos de datos, podemos manipularlos usando nuestras
herramientas normales de manipulación de datos, como dplyr . Aquí solo seleccionaremos y renombraremos las columnas
que queramos.
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 9/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
NOTA:
Esto no selecciona explícitamente la columna de geometría, pero la geometría en los sf objetos es pegajosa .
Permanece en el objeto a menos que se descarte explícitamente con ind_sf %>% st_set_geometry(NULL) .
Para aquellos que ya están familiarizados con el tidyverse, usar dplyr verbos normales para manipular sf objetos es uno de
los grandes beneficios de usar el paquete sf. Si estuviéramos trabajando con las ranuras de lo anterior
SpatialPolygonsDataFrame , esto no sería posible. Además, tenga en cuenta que estas manipulaciones no han afectado a la
clase de nuestro objeto de ninguna manera.
class(ind_sf)
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 10/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
Ya que nos estamos enfocando en el proceso en lugar de los datos en sí, usaremos datos de población , económicos y
regionales de Wikipedia. Si no está familiarizado con la importación de datos mediante el googlesheets paquete, el raspado
web con el que está rvest lidiando y la organización dplyr , consulte el prepare_data.R script en este repositorio de GitHub
para ver cómo attributes.rds se ensamblaron los datos.
APRENDE MÁS:
¿No estás familiarizado con estos paquetes? Echa un vistazo a la viñeta del googlesheets paquete y al capítulo
Transformación de datos de la R para la ciencia de datos de Hadley Wickham .
Una vez que hemos preparado un marco de datos de atributos, podemos unirlo al marco de datos espacial al igual que con
dos marcos de datos, así como mutar dos nuevas variables.
APRENDE MÁS:
Consulte el capítulo Datos relacionales de R para Data Science si left_join() no está familiarizado.
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 11/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
Si inspeccionamos este objeto una vez más, podemos ver que tiene todas las columnas de atributos esperados, y la última
columna contiene la geometría de cada estado en una lista. Los mismos atributos espaciales con respecto al cuadro
delimitador del objeto y CRS también se mantienen.
head(ind_sf, 3)
Área de cálculo
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 12/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
Nuestros datos de atributos ya tienen una columna para el área, extraída de Wikipedia. Sin embargo, si este no fuera el caso o
no confiésemos en los datos, podríamos calcular el área de cada observación en nuestro marco de datos espacial utilizando
la st_area() función.
Es lo suficientemente simple para hacer esto, pero debemos tener cuidado con las unidades. En este caso, tenemos que
convertir de metros cuadrados a kilómetros cuadrados.
library(units)
# mutate area
ind_sf <- ind_sf %>%
mutate(my_area = st_area(.))
# convert units
units(ind_sf$my_area) <- with(ud_units, km^2)
NOTA:
Consulte esta guía sobre unidades de medida para vectores R para obtener más información sobre la conversión de
unidades en R.
En la salida a continuación, note la diferencia entre la clase numérica simple area_km2 y la clase de "unidades" para el cálculo
del área resultante de st_area() .
class(ind_sf$area_km2)
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 13/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
## [1] "numeric"
class(ind_sf$my_area)
## [1] "units"
Por otra parte, podemos ver que las dos figuras están cerca pero no exactamente iguales.
Simplificando la geometría
Antes de trazar sf objetos (el tema de la próxima lección ), deberíamos simplificar los polígonos en el marco de datos
espacial.
Para mapas simples, no es necesario tener el nivel de detalle que viene con los datos GADM o muchas otras fuentes de datos
geoespaciales. La simplificación puede reducir enormemente los requisitos de memoria y sacrificar muy poco en términos de
salida visual. Afortunadamente, hay un proceso fácil para reducir el número de vértices en un polígono mientras se mantiene
la misma forma visible.
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 14/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
Una opción es sf::st_simplify() , pero aquí usaremos la ms_simplify() función del rmapshaper paquete. A continuación,
mantenemos solo el 1% de los vértices del objeto mientras mantenemos el mismo número de formas.
NOTA:
Otra función útil es sf::st_geometry() . Cuando se le pasa un sf objeto, devolverá solo la geometría. Esto nos permite
crear una gráfica rápida de solo la geometría para comprobar si todo se ve bien.
También eliminamos la clase de unidades para el área que calculamos porque creó un problema para ms_simplify() .
Siempre podemos agregarlo después de la simplificación.
mutate
( my_area = as.vector (my_area), gdp_density_usd_km2 = as.vector (gdp_density_usd
_km2)
)
biblioteca (rmapshaper)
simp_sf <- ms_simplify (ind_sf, keep = 0.01 , keep_shapes = TRUE )
simple_geometry <- st_geometry (simp_sf)
par (mfrow = c ( 1 , 2 ))
plot (original_geometry, main = "Geometría original" )
plot (simple_geometry, main = "Geometría simplificada" )
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 15/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
El mapa original está arriba a la izquierda, y la versión simplificada está a la derecha. La versión simplificada no se ve
diferente a pesar de tener solo el 1% de los vértices. De hecho, se ve aún mejor porque las líneas de borde son más limpias.
library(pryr)
object_size(original_geometry)
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 16/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
## 9.56 MB
object_size(simple_geometry)
## 150 kB
saveRDS(simp_sf, "simp_sf.rds")
NOTA:
Para obtener más información acerca de la simplificación, véase la sección 5.2.1 del Geocomputación con R .
Pensamientos finales
Después de presentar brevemente el contexto del uso de R como un SIG, esta lección mostró cómo el sf paquete crea una
estructura de clase para almacenar datos geoespaciales y de atributos juntos en un objeto que se ajusta a un flujo de trabajo
tidyverse. Podemos ver claramente los beneficios de esta estructura cuando se trata de manipular un marco de datos
espacial con nuestros dplyr verbos familiares .
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 17/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
Ahora que sabe cómo manipular datos geoespaciales, el siguiente paso natural es la visualización o el mapeo. Una vez más,
vamos a ver el beneficio de un flujo de trabajo ordenado, ahora que ggplot2 's geom_sf() está disponible para nosotros. Sin
embargo, como verá en la siguiente lección, ggplot2 es solo una de las excelentes opciones de paquetes cuando se trata de
visualizar datos geoespaciales en R.
SIGUIENTE LECCIÓN
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 18/19
9/2/2019 SocialCops | Curso en línea - Introducción a GIS en R: Lección 2
En una misión para enfrentar los problemas más críticos del mundo a través de la inteligencia de datos.
Geo localización
Expansión Informada
8,350 líderes del Banco Mundial, USAID, la Universidad de Chicago y otras organizaciones increíbles se suscriben a nuestros boletines informativos para obtener recursos
de datos, estudios de casos y mejores prácticas. Ahora es tu turno.
yourname@website.com Suscribir
https://socialcops.com/courses/introduction-to-gis-r/lesson2-manipulating-geospatial-data/ 19/19