Es importante acotar que para trabajar en este curso:
- El principal tipo de archivo a usar con el modelo vectorial: SHAPEFILE
- El principal tipo de archivo a usar con el modelo raster: IMÁGENES
- También se usarán sets de datos en formato .csv
16 - 20 de julio de 2018
Es importante acotar que para trabajar en este curso:
Algunas generalidades: (Adaptado de: ESRI Course "Teaching with GIS").
¿Quieres saber más? click acá
Geometría de un shapefile:
Atributos de un shapefile:
# Definir el directorio de trabajo
setwd("/home/pau1esteban/R/")
# Verificar directorio
getwd()
## [1] "/home/pau1esteban/R"
# Instalar la librería rgdal desde el menú respectivo # Cargar la librería para utilizarla library(rgdal)
## Loading required package: sp
## rgdal: version: 1.3-3, (SVN revision 759) ## Geospatial Data Abstraction Library extensions to R successfully loaded ## Loaded GDAL runtime: GDAL 2.2.2, released 2017/09/15 ## Path to GDAL shared files: /usr/share/gdal/2.2 ## GDAL binary built with GEOS: TRUE ## Loaded PROJ.4 runtime: Rel. 4.9.2, 08 September 2015, [PJ_VERSION: 492] ## Path to PROJ.4 shared files: (autodetected) ## Linking to sp version: 1.3-1
# Asignar el shapefile a la variable "capa" capa <- readOGR(dsn = "./shp_curso/lim_urb/GEO_LIMITE_URBANO_CUENCA.shp")
## OGR data source with driver: ESRI Shapefile ## Source: "/home/pau1esteban/R/shp_curso/lim_urb/GEO_LIMITE_URBANO_CUENCA.shp", layer: "GEO_LIMITE_URBANO_CUENCA" ## with 1 features ## It has 6 fields
# Visualizar los nombres de atributos names(capa)
## [1] "FID_PARROQ" "ID" "NOMBRE" "X_COORD" "Y_COORD" ## [6] "area_cue"
# Visualización simple del shapefile "capa" plot(capa)
# Asignar el archivo a la variable puntos con read.csv()
puntos <- read.csv("./at.csv")
# Verificar la estructura de "puntos"
str(puntos)
## 'data.frame': 130 obs. of 11 variables: ## $ CODIGO : Factor w/ 130 levels "002_AT_AQ_18",..: 18 19 20 21 22 23 24 25 26 27 ... ## $ FECHA : Factor w/ 31 levels "01/12/2017","02/12/2017",..: 3 3 2 2 2 1 4 5 2 2 ... ## $ COORD_X : Factor w/ 128 levels "673202,392214",..: 112 13 119 69 7 45 123 63 33 55 ... ## $ COORD_Y : Factor w/ 129 levels "9662603,9001",..: 96 66 80 18 124 36 85 47 38 99 ... ## $ ZONA : int 1 2 1 1 2 1 1 1 1 1 ... ## $ HORA : Factor w/ 115 levels "1:00:00 AM","1:00:00 PM",..: 60 66 57 36 24 71 72 6 8 40 ... ## $ DATE : Factor w/ 129 levels "01/12/2017 0:30:00",..: 22 20 9 10 13 3 23 25 11 14 ... ## $ DIA : Factor w/ 7 levels "domingo","jueves",..: 1 1 6 6 6 7 3 4 6 6 ... ## $ TIPO : Factor w/ 5 levels "ATROPELLO","CAIDA",..: 3 1 2 4 3 3 1 3 3 3 ... ## $ MES : Factor w/ 1 level "diciembre": 1 1 1 1 1 1 1 1 1 1 ... ## $ AFECTADOS: int 3 1 1 2 3 2 1 1 4 2 ...
¿Como evitar que los atributos sean factor?
# Leer archivo .csv sin que los caracteres se transformen en factor
puntos <- read.csv("./at.csv",stringsAsFactors = F)
# Verificar la nueva estructura de "puntos"
str(puntos)
## 'data.frame': 130 obs. of 11 variables: ## $ CODIGO : chr "1599_AT_AQ_17" "1600_AT_AQ_17" "1601_AT_AQ_17" "1602_AT_AQ_17" ... ## $ FECHA : chr "03/12/2017" "03/12/2017" "02/12/2017" "02/12/2017" ... ## $ COORD_X : chr "726113,17" "716199,671209" "726499,22" "722169,19" ... ## $ COORD_Y : chr "9680534,71" "9679687,22604" "9680114,57" "9677281,87" ... ## $ ZONA : int 1 2 1 1 2 1 1 1 1 1 ... ## $ HORA : chr "4:53:00 AM" "5:51:00 PM" "4:49:00 PM" "2:01:00 AM" ... ## $ DATE : chr "03/12/2017 4:53:00" "03/12/2017 17:51:00" "02/12/2017 16:49:00" "02/12/2017 2:01:00" ... ## $ DIA : chr "domingo" "domingo" "sábado" "sábado" ... ## $ TIPO : chr "CHOQUE" "ATROPELLO" "CAIDA" "COLISION" ... ## $ MES : chr "diciembre" "diciembre" "diciembre" "diciembre" ... ## $ AFECTADOS: int 3 1 1 2 3 2 1 1 4 2 ...
Práctica:
# Valor máximo max(puntos$AFECTADOS)
## [1] 15
# Valor mínimo min(puntos$AFECTADOS)
## [1] 1
# Media mean(puntos$AFECTADOS)
## [1] 2.6
La forma óptima de resolver esto es …
# Coerción de atributos caracter a numérico (Coordenadas)
puntos$COORD_X <- as.numeric(gsub(',','\\.',puntos$COORD_X))
puntos$COORD_Y <- as.numeric(gsub(',','\\.',puntos$COORD_Y))
# Comprobar la coerción
str(puntos)
## 'data.frame': 130 obs. of 11 variables: ## $ CODIGO : chr "1599_AT_AQ_17" "1600_AT_AQ_17" "1601_AT_AQ_17" "1602_AT_AQ_17" ... ## $ FECHA : chr "03/12/2017" "03/12/2017" "02/12/2017" "02/12/2017" ... ## $ COORD_X : num 726113 716200 726499 722169 699640 ... ## $ COORD_Y : num 9680535 9679687 9680115 9677282 9691822 ... ## $ ZONA : int 1 2 1 1 2 1 1 1 1 1 ... ## $ HORA : chr "4:53:00 AM" "5:51:00 PM" "4:49:00 PM" "2:01:00 AM" ... ## $ DATE : chr "03/12/2017 4:53:00" "03/12/2017 17:51:00" "02/12/2017 16:49:00" "02/12/2017 2:01:00" ... ## $ DIA : chr "domingo" "domingo" "sábado" "sábado" ... ## $ TIPO : chr "CHOQUE" "ATROPELLO" "CAIDA" "COLISION" ... ## $ MES : chr "diciembre" "diciembre" "diciembre" "diciembre" ... ## $ AFECTADOS: int 3 1 1 2 3 2 1 1 4 2 ...
# Instalar la librería raster desde el menu Tools, luego cargarla library(raster) # Verificar el indice de los atributos de coordenadas names(puntos[,3:4])
## [1] "COORD_X" "COORD_Y"
# Generar el data frame proyectado con base en el archivo .csv
puntos_coord <- SpatialPointsDataFrame(puntos[,3:4], # Columnas de coords.
puntos, # Variable que contiene al .csv
proj4string = crs("+init=epsg:32717")) # Proyección
# Verificar el tipo de dato de la nueva variable class(puntos_coord)
## [1] "SpatialPointsDataFrame" ## attr(,"package") ## [1] "sp"
# Verificar información de proyección #Forma 1 crs(puntos_coord)
## CRS arguments: ## +init=epsg:32717 +proj=utm +zone=17 +south +datum=WGS84 +units=m ## +no_defs +ellps=WGS84 +towgs84=0,0,0
#Forma 2 proj4string(puntos_coord)
## [1] "+init=epsg:32717 +proj=utm +zone=17 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"
# Grafica simple del data frame espacial plot(puntos_coord)
Se aplican a la simbología:
col: Color del símbolo
main: Título del gráfico
La propiedad pch tiene diversas formas:
# Aplicación de propiedades de plot: cex como caracter plot(puntos_coord, pch=".", cex=2, col="red", main="Accidentes registrados")
# Aplicación de propiedades de plot: cex como símbolo plot(puntos_coord, pch=20, cex=0.5, col="blue", main="Accidentes")
# Cargar un shapefile existente rurales <- readOGR(dsn="./shp_curso/p_rur/GEO_PARROQUIAS_RURALES_CUENCA.shp")
## OGR data source with driver: ESRI Shapefile ## Source: "/home/pau1esteban/R/shp_curso/p_rur/GEO_PARROQUIAS_RURALES_CUENCA.shp", layer: "GEO_PARROQUIAS_RURALES_CUENCA" ## with 21 features ## It has 4 fields
Para graficar dos capas es necesario usar la propiedad ADD (de plot)
# Graficar la capa de parroquias rurales plot(rurales) # Graficar los puntos de accidentes plot(puntos_coord, pch=20, cex=0.5, col="blue", main="Accidentes", add = T)
# Transformar el Spatial Data Frame en Shapefile
writeOGR(obj=puntos_coord, # Nuestro Spatial Data Frame
dsn=".", # Ubicación del directorio de trabajo
layer="puntos_nuevo", # Nombre del nuevo shapefile
driver="ESRI Shapefile", # Tipo de archivo
overwrite_layer = T, check_exists = T) # Verificación
## OGR data source with driver: ESRI Shapefile ## Source: "/home/pau1esteban/R/puntos_nuevo.shp", layer: "puntos_nuevo" ## with 130 features ## It has 11 fields
# Cargar la libreria dplyr library(dplyr) # Verificar los atributos del archivo str(puntos)
## 'data.frame': 130 obs. of 11 variables: ## $ CODIGO : chr "1599_AT_AQ_17" "1600_AT_AQ_17" "1601_AT_AQ_17" "1602_AT_AQ_17" ... ## $ FECHA : chr "03/12/2017" "03/12/2017" "02/12/2017" "02/12/2017" ... ## $ COORD_X : num 726113 716200 726499 722169 699640 ... ## $ COORD_Y : num 9680535 9679687 9680115 9677282 9691822 ... ## $ ZONA : int 1 2 1 1 2 1 1 1 1 1 ... ## $ HORA : chr "4:53:00 AM" "5:51:00 PM" "4:49:00 PM" "2:01:00 AM" ... ## $ DATE : chr "03/12/2017 4:53:00" "03/12/2017 17:51:00" "02/12/2017 16:49:00" "02/12/2017 2:01:00" ... ## $ DIA : chr "domingo" "domingo" "sábado" "sábado" ... ## $ TIPO : chr "CHOQUE" "ATROPELLO" "CAIDA" "COLISION" ... ## $ MES : chr "diciembre" "diciembre" "diciembre" "diciembre" ... ## $ AFECTADOS: int 3 1 1 2 3 2 1 1 4 2 ...
# Seleccionar las coordenadas,tipo y cantidad de afectados seleccion <- select(puntos, COORD_X, COORD_Y, TIPO, AFECTADOS) # Mostrar los primeros registros de la selección head(seleccion)
## COORD_X COORD_Y TIPO AFECTADOS ## 1 726113.2 9680535 CHOQUE 3 ## 2 716199.7 9679687 ATROPELLO 1 ## 3 726499.2 9680115 CAIDA 1 ## 4 722169.2 9677282 COLISION 2 ## 5 699639.8 9691822 CHOQUE 3 ## 6 720471.3 9678478 CHOQUE 2
# Mostrar las coordenadas de los accidentes con tres o más afectados puntos %>% filter(AFECTADOS >= 3) %>% select(COORD_X,COORD_Y,AFECTADOS)
## COORD_X COORD_Y AFECTADOS ## 1 726113.2 9680535 3 ## 2 699639.8 9691822 3 ## 3 719517.6 9678733 4 ## 4 720628.8 9679777 11 ## 5 729507.4 9672370 4 ## 6 678899.0 9693300 6 ## 7 720502.0 9677929 3 ## 8 723224.9 9677781 3 ## 9 721096.9 9682045 4 ## 10 721862.9 9681468 3 ## 11 717873.8 9676660 5 ## 12 714654.5 9683600 6 ## 13 724350.1 9679451 3 ## 14 726281.5 9680386 3 ## 15 723988.6 9680961 3 ## 16 718700.2 9680097 4 ## 17 721890.0 9678146 5 ## 18 717149.9 9675093 15 ## 19 721876.1 9677906 3 ## 20 718662.3 9684875 4 ## 21 726140.9 9683267 4 ## 22 720592.9 9678278 3 ## 23 726113.1 9681436 4 ## 24 719382.9 9679544 3 ## 25 720344.2 9680146 6 ## 26 721409.5 9679482 4 ## 27 721550.9 9680257 5 ## 28 728310.2 9674693 4 ## 29 722813.8 9678913 3 ## 30 723140.8 9680556 3 ## 31 716293.3 9681034 5 ## 32 725249.3 9679234 11 ## 33 716723.4 9680904 9 ## 34 719097.6 9680337 4 ## 35 714846.9 9678193 3 ## 36 726193.6 9683360 3 ## 37 721328.8 9680780 3 ## 38 724866.9 9679119 4 ## 39 720862.9 9677796 3 ## 40 727019.4 9687840 3 ## 41 725352.4 9679465 4 ## 42 718197.8 9676977 3 ## 43 718868.6 9677440 6 ## 44 719067.8 9677702 3 ## 45 724019.7 9679335 4 ## 46 723731.6 9681193 3 ## 47 726306.1 9683574 4 ## 48 722372.9 9677290 3 ## 49 717681.0 9664679 4
# Seleccionar los tipos de accidente registrados tipos_accid <- distinct(puntos,TIPO) # Mostrar la selección tipos_accid
## TIPO ## 1 CHOQUE ## 2 ATROPELLO ## 3 CAIDA ## 4 COLISION ## 5 VOLCAMIENTO
# Seleccionar la cantidad de accidentes por tipo tipos_accid <- distinct(count(puntos,TIPO)) # Mostrar la selección tipos_accid
## # A tibble: 5 x 2 ## TIPO n ## <chr> <int> ## 1 ATROPELLO 26 ## 2 CAIDA 7 ## 3 CHOQUE 84 ## 4 COLISION 5 ## 5 VOLCAMIENTO 8