0. Instalar y cargar paquetes

install.packages("tidyverse")
install.packages("leaflet")
install.packages("rgdal")
install.packages("deldir")
install.packages("sp")
install.packages("RColorBrewer")
install.packages("KernSmooth")
library(data.table)
library(ggplot2)
library(tidyverse)
library(leaflet) ## Nos permite hacer los mapas 
library(rgdal)
library(deldir)
library(sp)
library(RColorBrewer)
library(KernSmooth)

rm(list=ls())

1. Cargando Mapas

  1. Mapa accidentes en bicicleta 2016

Fuente: http://www.ide.cl/index.php/salud/item/1595-accidentes-en-bicicleta-ano-2016

biciMap<-readOGR( dsn= "C:/Users/mariajesustraub/Desktop/Rstudio/Ejercicio mapas/Bici_personaGS2016_2/Bici_personaGS2016_2.shp")
## OGR data source with driver: ESRI Shapefile 
## Source: "C:\Users\mariajesustraub\Desktop\Rstudio\Ejercicio mapas\Bici_personaGS2016_2\Bici_personaGS2016_2.shp", layer: "Bici_personaGS2016_2"
## with 1135 features
## It has 30 fields
## archivo que contiene las bases de datos y coordenadas
## readOGR nos permite abrir los archivos shp
biciMap@proj4string # proyección y para ver los componentes utilizo @, son los conjuntos de coordenadas que tiene la proyección 
## CRS arguments: +proj=longlat +datum=WGS84 +no_defs
proj4string(biciMap) # proyección escrita de otra manera, es el mismo resultado.
## [1] "+proj=longlat +datum=WGS84 +no_defs"
biciMap@coords # coordenadas en la base
coordinates(biciMap) # coordenadas lat (Y) long (X)
View(biciMap@data) # para ver los datos del data frame
  1. Mapa comunas Santiago (ciudad)

Fuente: http://www.censo2017.cl/servicio-de-mapas/

ComunasR13Map<-readOGR(dsn = "C:/Users/mariajesustraub/Desktop/Rstudio/Ejercicio mapas/ComunasR13/ComunasR13_COMUNA_C17.shp")
## OGR data source with driver: ESRI Shapefile 
## Source: "C:\Users\mariajesustraub\Desktop\Rstudio\Ejercicio mapas\ComunasR13\ComunasR13_COMUNA_C17.shp", layer: "ComunasR13_COMUNA_C17"
## with 52 features
## It has 8 fields
## tienen proyecciones distintas
ComunasR13Map@proj4string #proyección
## CRS arguments:
##  +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs
ComunasR13Map<-spTransform(ComunasR13Map,CRSobj = proj4string(biciMap)) #tenemos que transformar la proyección que sea igual a la proyección que tenga bicimap con spTransform, creando una nueva proyección con CRSobj

ComunasR13Map@proj4string
## CRS arguments: +proj=longlat +datum=WGS84 +no_defs

Static base plot

plot(biciMap) #puntos como coordenadas

plot(ComunasR13Map) #Polígonos

Interactive/live Plot

leaflet(biciMap)%>% ## función que permite hacer un mapa interactivo
  addTiles()%>% ##%<% quiere decir lo que voy a hacer siguiente en la función y addTitles (títulos) y add Markers (los puntos)
  addMarkers() 

Alternativa con puntos

leaflet(biciMap)%>%
  addTiles()%>%
  addCircles() ## en vez de con markers podemos mostrarlos con círculos

Interactive/live Plot

leaflet(ComunasR13Map)%>%
  addTiles()%>%
  addPolygons() ## delimitaciones entre polígonos

Interactive/live Plot

Mezclando las 2 bases
leaflet(ComunasR13Map)%>%
  addTiles()%>%
  addPolygons()%>% ## comunas estamos trabajando en polígonos
  addMarkers(biciMap,lng = biciMap@coords[,1],lat = biciMap@coords[,2]) ##markers que vengan de la base bicimap; lng son longitudes (1 componente), lat son latitudes (2 componente)

2. Mapa por comuna con más accidentes

  1. Creando un mapa con las comunas que tienen datos (solo donde hay accidentes)
head(ComunasR13Map@data) ##head permite ver las primeras 5 obs de las bases de datos
##   REGION                        NOM_REGION PROVINCIA NOM_PROVIN COMUNA
## 0     13 REGIÓN METROPOLITANA DE SANTIAGO       134      MAIPO  13404
## 1     13 REGIÓN METROPOLITANA DE SANTIAGO       134      MAIPO  13402
## 2     13 REGIÓN METROPOLITANA DE SANTIAGO       131   SANTIAGO  13124
## 3     13 REGIÓN METROPOLITANA DE SANTIAGO       131   SANTIAGO  13103
## 4     13 REGIÓN METROPOLITANA DE SANTIAGO       133  CHACABUCO  13301
## 5     13 REGIÓN METROPOLITANA DE SANTIAGO       133  CHACABUCO  13303
##    NOM_COMUNA SHAPE_Leng  SHAPE_Area
## 0       PAINE  1.6253302 0.066034887
## 1        BUIN  0.8841641 0.021166233
## 2    PUDAHUEL  0.7201757 0.019124278
## 3 CERRO NAVIA  0.1701803 0.001075965
## 4      COLINA  1.6920071 0.093820189
## 5      TILTIL  1.3301477 0.063169398
head(biciMap@data)
##   IdAcciden Accidentes Fallecidos Graves Menos_Grav Leves Ilesos  ANO     FECHA
## 1    870941          2          0      0          0     2      0 2016 1/11/2016
## 2    875846          1          0      1          0     0      0 2016 1/22/2016
## 3    876106          1          0      1          0     0      0 2016 1/23/2016
## 4    876656          1          0      1          0     0      0 2016 1/27/2016
## 5    884912          1          0      0          0     0      1 2016 2/23/2016
## 6    881882          2          0      0          0     1      1 2016 2/25/2016
##    HORA COD_COMUNA     COMUNA1 COD_REGION              REGION1       TIPO_ACCID
## 1  7:40      13123 PROVIDENCIA         13 REGION METROPOLITANA COLISION LATERAL
## 2 16:15      13103 CERRO NAVIA         13 REGION METROPOLITANA COLISION LATERAL
## 3 20:30      13120       NUNOA         13 REGION METROPOLITANA         COLISION
## 4 20:50      13128       RENCA         13 REGION METROPOLITANA   CHOQUE FRONTAL
## 5 14:00      13101    SANTIAGO         13 REGION METROPOLITANA        ATROPELLO
## 6 19:30      13119       MAIPU         13 REGION METROPOLITANA COLISION LATERAL
##   TIPO__CONA   ZONA         UBICACION_                   CAUSA__CON
## 1   COLISION URBANA TRAMO DE VIA RECTA     PERDIDA CONTROL VEHICULO
## 2   COLISION URBANA TRAMO DE VIA RECTA       CAUSAS NO DETERMINADAS
## 3   COLISION URBANA TRAMO DE VIA RECTA    IMPRUDENCIA DEL CONDUCTOR
## 4     CHOQUE URBANA TRAMO DE VIA RECTA                 OTRAS CAUSAS
## 5  ATROPELLO URBANA TRAMO DE VIA RECTA DESOBEDIENCIA A SENALIZACION
## 6   COLISION URBANA TRAMO DE VIA RECTA    IMPRUDENCIA DEL CONDUCTOR
##                                              CAUSA1           CALLE_UNO
## 1                          PERDIDA CONTROL VEHICULO        SANTA ISABEL
## 2                            CAUSAS NO DETERMINADAS             NEPTUNO
## 3 CONDUCCION NO ATENTO CONDICIONES TRANSITO MOMENTO       DUBLE ALMEYDA
## 4                                      OTRAS CAUSAS             NAPOLES
## 5     SENALIZACION DESOBEDECER LUZ ROJA DE SEMAFORO JOSE SANTIAGO MONTT
## 6 CONDUCCION NO ATENTO CONDICIONES TRANSITO MOMENTO  FUNDO LA RINCONADA
##   CALLE_DOS NUMERO            INTERSECCI               DIRECCIO_1
## 1      <NA>   1161          - STA ISABEL        1161 SANTA ISABEL
## 2      <NA>   1530             - NEPTUNO             1530 NEPTUNO
## 3      <NA>   4289       - DUBLE ALMEYDA       4289 DUBLE ALMEYDA
## 4      <NA>   1496             - NAPOLES             1496 NAPOLES
## 5      <NA>   2373 - JOSE SANTIAGO MONTT 2373 JOSE SANTIAGO MONTT
## 6      <NA>    145  - FUNDO LA RINCONADA   145 FUNDO LA RINCONADA
##                      CALZADA TIPO_CALZA ESTADO_CAL CONDICION_ ESTADO_ATM
## 1             UNIDIRECCIONAL    ASFALTO    REGULAR       SECO  DESPEJADO
## 2              BIDIRECCIONAL    ASFALTO      BUENO       SECO  DESPEJADO
## 3             UNIDIRECCIONAL   CONCRETO      BUENO       SECO  DESPEJADO
## 4             UNIDIRECCIONAL   CONCRETO      BUENO       SECO  DESPEJADO
## 5 BIDIRECCIONAL CON BANDEJON    ASFALTO      BUENO       SECO  DESPEJADO
## 6             UNIDIRECCIONAL    ASFALTO      BUENO       SECO  DESPEJADO
table(ComunasR13Map@data$COMUNA%in%biciMap@data$COD_COMUNA) ##todas las comunas (variable) que estan en comuna de comunar13 y en bicimap
## 
## FALSE  TRUE 
##    17    35
ComunasR13MapBici<-ComunasR13Map[ComunasR13Map@data$COMUNA%in%biciMap@data$COD_COMUNA,] ## nos vamos a quedar con las comunas que estén en la base de datos bici y en comunas r13

Interactive/live Plot

leaflet(ComunasR13MapBici)%>%
  addTiles()%>%
  addPolygons()%>%
  addMarkers(biciMap,lng = biciMap@coords[,1],lat = biciMap@coords[,2]) ##grafico con la nueva base de datos 
  1. Añadiendo tabla de estadísticos descriptivos al mapa
class(biciMap@data)
## [1] "data.frame"
biciData<-data.table(biciMap@data)
NumAccBici<-biciData[,.(NumAccBici=.N),by=COD_COMUNA] ##Numero de accidentes en bicicleta por comuna
View(ComunasR13MapBici@data)
ComunasR13MapBici@data<-merge(ComunasR13MapBici@data,NumAccBici,by.x="COMUNA",by.y="COD_COMUNA",sort=F, all.x=T) ## by.x o by.y es porque aunque las variables signifiquen lo mismo, tienen distinto nombre. sort=F es para que no se reordene 
View(ComunasR13MapBici@data)
  1. Creando colores
pColor<-colorQuantile(palette = brewer.pal(4,name = "Reds"),domain =range(ComunasR13MapBici@data$NumAccBici,na.rm = T),n = 5) ## los colores se hacen antes de hacer el mapa y se asignan a un objeto
  1. Creando labels
labels <- sprintf(
  "<strong>Comuna: %s </strong><br/>Acc.Bicicleta: %g ",
  ComunasR13MapBici$NOM_COMUNA, ComunasR13MapBici$NumAccBici
) %>% lapply(htmltools::HTML) ## etiquetas que permita verificar los datos por comuna cuando pase el mouse por encima del mapa

Gráfico de colores por comuna

leaflet(ComunasR13MapBici)%>%
  addTiles()%>%
  addPolygons(fillColor = ~pColor(NumAccBici),color='white',weight=1,fillOpacity = 0.7,highlight = highlightOptions(
    weight = 5,
    color = "#666",
    fillOpacity = 0.7,
    bringToFront = TRUE),label=labels)

3. Seleccionar las comunas con más accidentes

  1. Verificar cuáles son las comunas con más accidentes
class(biciMap@data)
## [1] "data.frame"
biciData<-data.table(biciMap@data)
biciData[,.N,by=.(COMUNA1)]
##              COMUNA1   N
##  1:      PROVIDENCIA 135
##  2:      CERRO NAVIA  15
##  3:            NUNOA  79
##  4:            RENCA  35
##  5:         SANTIAGO 150
##  6:            MAIPU  62
##  7:       LA FLORIDA  31
##  8: P. AGUIRRE CERDA  11
##  9:         PUDAHUEL  37
## 10:        PENALOLEN  41
## 11:            LAMPA  11
## 12:           COLINA   6
## 13:       LAS CONDES  52
## 14:        QUILICURA  48
## 15:      SAN JOAQUIN  18
## 16:           PIRQUE   1
## 17:      PUENTE ALTO  73
## 18:            MACUL  28
## 19:      LA CISTERNA  16
## 20:     LO BARNECHEA   9
## 21:        EL BOSQUE  34
## 22:        CERRILLOS  14
## 23:        SAN RAMON  14
## 24:         VITACURA   6
## 25:         RECOLETA  24
## 26:         LA REINA  29
## 27:         LO PRADO  18
## 28: ESTACION CENTRAL  32
## 29:       SAN MIGUEL  19
## 30:    QUINTA NORMAL  27
## 31:        LA GRANJA  15
## 32:       HUECHURABA   6
## 33:    INDEPENDENCIA  16
## 34:       LA PINTANA  12
## 35:         CONCHALI  11
##              COMUNA1   N
  1. Crear mapa solo de la comuna con más accidentes
biciMapStgo<-biciMap[biciMap$COMUNA1=="SANTIAGO" | biciMap$COMUNA1=="PROVIDENCIA" ,] ## objeto con las comunas con más accidentes
leaflet(biciMapStgo)%>%
  addTiles()%>%
  addMarkers() 

4. Mapa de densidad de accidentes

Fuente: https://gis.stackexchange.com/questions/168886/r-how-to-build-heatmap-with-the-leaflet-package

  1. MAKE CONTOUR LINES ##### crear las líneas en base a las coordenadas
kde2d <- bkde2D(biciMapStgo@coords,
              bandwidth=c(.00225, .00225))
CL <- contourLines(kde2d$x1 , kde2d$x2 , kde2d$fhat)
  1. EXTRACT CONTOUR LINE LEVELS
LEVS <- as.factor(sapply(CL, `[[`, "level"))
NLEV <- length(levels(LEVS))
  1. CONVERT CONTOUR LINES TO POLYGONS
pgons <- lapply(1:length(CL), function(i)
  Polygons(list(Polygon(cbind(CL[[i]]$x, CL[[i]]$y))), ID=i))
spgons <- SpatialPolygons(pgons)
  1. Leaflet map with polygons
leaflet(spgons) %>% addTiles() %>% 
  addPolygons(color = heat.colors(NLEV, NULL)[LEVS])

5. Densidad de Accidentes VS. Localización de Bike Stores

bikeShops<-readRDS("C:/Users/mariajesustraub/Desktop/Rstudio/Ejercicio mapas/bikeShopsStgo.rds")
class(bikeShops$store_lat)
## [1] "character"
class(bikeShops$store_lon)
## [1] "character"
bikeShops$store_lat<-as.numeric(bikeShops$store_lat)
bikeShops$store_lon<-as.numeric(bikeShops$store_lon)
leaflet(spgons) %>% addTiles() %>% 
  addPolygons(color = heat.colors(NLEV, NULL)[LEVS])%>%
  addMarkers(lng = bikeShops$store_lon,lat = bikeShops$store_lat)