ggplot2
+ leaflet
+ rmarkdown
Este trabajo tiene como finalidad realizar visualización de variables de una base de datos con ggplot2
y leaflet
, utilizando rmarkdown
, para la generación de un informe que sea armonioso y que pueda incluir características de un script de R. Se evaluará la correcta ejecución del código y el uso eficiente de las herramientas de codificación entregadas.
rmarkdown
El formato de respuesta es el siguiente:
El formato tiene un puntaje asignado dentro de la nota (3 puntos)
Importante: Deben ser suprimidos los mensajes y warnings del informe.
Esta base de datos contiene información del número de accidentes en moto producidos por comuna en la Región Metropolitana en el año 2016. Podemos encontrar información detallada del accidente como el número de personas involucradas, la gravedad del accidente, es decir, si hubo lesionados leves, graves o incluso fallecidos. Así como también encontramos la causa del accidente, la ubicación, fecha y tipo de accidente.
1. Cargue los siguientes paquetes: data.table
,rgdal
,ggplot2
,treemap
,leaflet
,sp
,tidyverse
y RColorBrewer
. (1 punto)
library(data.table)
library(rgdal)
library(ggplot2)
library(treemap)
library(rgdal)
library(leaflet)
library(sp)
library(tidyverse)
library(RColorBrewer)
2. Cargue la base de datos de las motos (.shp), obtenga la base de datos y transformarla en un data.table (3 puntos)
motoMap<-readOGR(dsn = "Motos/MotosGS2016_2.shp")
## OGR data source with driver: ESRI Shapefile
## Source: "/Users/caromolinare/Dropbox/Carolina Molinare/Cursos/Clases y labs/Control 2/Motos/MotosGS2016_2.shp", layer: "MotosGS2016_2"
## with 2685 features
## It has 29 fields
moto<-as.data.table(motoMap@data)
3. La variable ESTADO_CAL
describe el estado de la calzada por la cual circulaba el/la motociclista. De esta forma, las categorías que debe considerar esta variable son 3: BUENO, REGULAR y MALO. Por lo tanto, lo que debe hacer, es considerar todas aquellas observaciones que tengan alguna de esas 3 categorías en la variable ESTADO_CAL
. (3 puntos)
moto<-moto[ESTADO_CAL=="BUENO"|ESTADO_CAL=="REGULAR"|ESTADO_CAL=="MALO"]
4. ¿Cuántos accidentes hay por comuna? (3 puntos)
moto[,.N,by="COMUNA1"]
## COMUNA1 N
## 1: LAMPA 14
## 2: SANTIAGO 321
## 3: NUNOA 132
## 4: EL BOSQUE 89
## 5: PUENTE ALTO 176
## 6: HUECHURABA 35
## 7: PUDAHUEL 65
## 8: VITACURA 66
## 9: LA PINTANA 28
## 10: PROVIDENCIA 205
## 11: LAS CONDES 213
## 12: QUINTA NORMAL 82
## 13: PENALOLEN 98
## 14: COLINA 31
## 15: RECOLETA 50
## 16: QUILICURA 66
## 17: PIRQUE 2
## 18: RENCA 35
## 19: MACUL 77
## 20: LA FLORIDA 95
## 21: P. AGUIRRE CERDA 28
## 22: INDEPENDENCIA 44
## 23: LA GRANJA 52
## 24: MAIPU 150
## 25: LO BARNECHEA 28
## 26: CONCHALI 48
## 27: CERRILLOS 49
## 28: SAN MIGUEL 52
## 29: ESTACION CENTRAL 60
## 30: CERRO NAVIA 36
## 31: LA CISTERNA 54
## 32: LA REINA 52
## 33: SAN JOAQUIN 58
## 34: SAN RAMON 38
## 35: SAN BERNARDO 6
## 36: LO ESPEJO 15
## 37: LO PRADO 19
## COMUNA1 N
5. ¿Cuántos accidentes con personas fallecidas hay por comuna? (3 puntos)
moto[FALLECIDOS!=0,.N,by="COMUNA1"]
## COMUNA1 N
## 1: QUINTA NORMAL 2
## 2: PUDAHUEL 3
## 3: ESTACION CENTRAL 2
## 4: COLINA 1
## 5: EL BOSQUE 1
## 6: SANTIAGO 5
## 7: MAIPU 6
## 8: SAN RAMON 1
## 9: PUENTE ALTO 1
## 10: LAS CONDES 3
## 11: PROVIDENCIA 2
## 12: SAN JOAQUIN 2
## 13: MACUL 2
## 14: RECOLETA 1
## 15: NUNOA 4
## 16: LA GRANJA 1
## 17: LO PRADO 1
## 18: LA FLORIDA 1
## 19: CERRILLOS 1
6. ¿Cuántos accidentes con personas graves hay por comuna? (3 puntos)
moto[GRAVES!=0,.N,by="COMUNA1"]
## COMUNA1 N
## 1: LAMPA 4
## 2: NUNOA 47
## 3: SANTIAGO 81
## 4: PROVIDENCIA 54
## 5: LAS CONDES 56
## 6: QUINTA NORMAL 24
## 7: COLINA 6
## 8: RECOLETA 5
## 9: PIRQUE 1
## 10: RENCA 12
## 11: PUDAHUEL 22
## 12: HUECHURABA 7
## 13: MAIPU 33
## 14: PENALOLEN 21
## 15: CONCHALI 13
## 16: CERRILLOS 18
## 17: ESTACION CENTRAL 16
## 18: PUENTE ALTO 29
## 19: P. AGUIRRE CERDA 2
## 20: VITACURA 23
## 21: SAN JOAQUIN 18
## 22: LA REINA 18
## 23: LA FLORIDA 13
## 24: INDEPENDENCIA 10
## 25: SAN MIGUEL 11
## 26: MACUL 22
## 27: EL BOSQUE 14
## 28: SAN RAMON 11
## 29: LA CISTERNA 11
## 30: QUILICURA 8
## 31: SAN BERNARDO 1
## 32: LO BARNECHEA 2
## 33: CERRO NAVIA 10
## 34: LA GRANJA 11
## 35: LO PRADO 4
## 36: LO ESPEJO 2
## 37: LA PINTANA 1
## COMUNA1 N
7. ¿Cómo podría mostrar el resultado de la pregunta 6 en un gráfico?. Muestre un gráfico legible. (5 puntos)
graves<-moto[GRAVES!=0,.N,by="COMUNA1"]
ggplot(data=graves,aes(x=COMUNA1,y=N)) +
geom_bar(stat = "identity") +
theme(axis.text.x = element_text(angle=85, vjust=0.6))
8. ¿Cuál es la principal causa (CAUSA__CON
) de accidentes? (3 puntos)
moto[,.N,by="CAUSA__CON"]
## CAUSA__CON N
## 1: OTRAS CAUSAS 340
## 2: IMPRUDENCIA DEL CONDUCTOR 1197
## 3: CAUSAS NO DETERMINADAS 511
## 4: IMPRUDENCIA DEL PEATON 64
## 5: PERDIDA CONTROL VEHICULO 147
## 6: DEFICIENCIAS VIALES 14
## 7: DESOBEDIENCIA A SENALIZACION 306
## 8: DROGAS Y/O FATIGA EN CONDUCTOR 4
## 9: FALLAS MECANICAS 9
## 10: VELOCIDAD IMPRUDENTE 10
## 11: ALCOHOL EN CONDUCTOR 62
## 12: ALCOHOL EN PEATON 4
## 13: IMPRUDENCIA DEL PASAJERO 1
Bonus 1: ¿Cuál es la principal causa (CAUSA__CON
) de accidentes por comuna? (3 puntos)
## si lo queremos ver por comuna
motivo<-moto[,.(n_causa=.N),by=c("COMUNA1","CAUSA__CON")]
motivo<-motivo[!duplicated(motivo)]
motivo[,.SD[which.max(n_causa)], by="COMUNA1"]
## COMUNA1 CAUSA__CON n_causa
## 1: LAMPA IMPRUDENCIA DEL CONDUCTOR 8
## 2: SANTIAGO CAUSAS NO DETERMINADAS 114
## 3: NUNOA IMPRUDENCIA DEL CONDUCTOR 67
## 4: EL BOSQUE IMPRUDENCIA DEL CONDUCTOR 55
## 5: PUENTE ALTO IMPRUDENCIA DEL CONDUCTOR 82
## 6: HUECHURABA IMPRUDENCIA DEL CONDUCTOR 22
## 7: PUDAHUEL IMPRUDENCIA DEL CONDUCTOR 28
## 8: VITACURA IMPRUDENCIA DEL CONDUCTOR 43
## 9: LA PINTANA IMPRUDENCIA DEL CONDUCTOR 24
## 10: PROVIDENCIA IMPRUDENCIA DEL CONDUCTOR 119
## 11: LAS CONDES CAUSAS NO DETERMINADAS 77
## 12: QUINTA NORMAL IMPRUDENCIA DEL CONDUCTOR 34
## 13: PENALOLEN IMPRUDENCIA DEL CONDUCTOR 61
## 14: COLINA CAUSAS NO DETERMINADAS 15
## 15: RECOLETA CAUSAS NO DETERMINADAS 23
## 16: QUILICURA IMPRUDENCIA DEL CONDUCTOR 35
## 17: PIRQUE CAUSAS NO DETERMINADAS 1
## 18: RENCA IMPRUDENCIA DEL CONDUCTOR 12
## 19: MACUL OTRAS CAUSAS 58
## 20: LA FLORIDA IMPRUDENCIA DEL CONDUCTOR 52
## 21: P. AGUIRRE CERDA CAUSAS NO DETERMINADAS 14
## 22: INDEPENDENCIA IMPRUDENCIA DEL CONDUCTOR 41
## 23: LA GRANJA CAUSAS NO DETERMINADAS 26
## 24: MAIPU IMPRUDENCIA DEL CONDUCTOR 88
## 25: LO BARNECHEA IMPRUDENCIA DEL CONDUCTOR 11
## 26: CONCHALI OTRAS CAUSAS 21
## 27: CERRILLOS IMPRUDENCIA DEL CONDUCTOR 33
## 28: SAN MIGUEL CAUSAS NO DETERMINADAS 35
## 29: ESTACION CENTRAL IMPRUDENCIA DEL CONDUCTOR 29
## 30: CERRO NAVIA IMPRUDENCIA DEL CONDUCTOR 17
## 31: LA CISTERNA IMPRUDENCIA DEL CONDUCTOR 39
## 32: LA REINA CAUSAS NO DETERMINADAS 22
## 33: SAN JOAQUIN CAUSAS NO DETERMINADAS 44
## 34: SAN RAMON IMPRUDENCIA DEL CONDUCTOR 19
## 35: SAN BERNARDO IMPRUDENCIA DEL CONDUCTOR 2
## 36: LO ESPEJO OTRAS CAUSAS 13
## 37: LO PRADO CAUSAS NO DETERMINADAS 10
## COMUNA1 CAUSA__CON n_causa
9. ¿Cómo podríamos mostrar,gráficamente, las diferentes causas para las dos comunas con más accidentes? Muestre un gráfico legible. (5 puntos)
ggplot(data=moto[COMUNA1 %in% c("LAS CONDES","SANTIAGO")], aes(x=CAUSA__CON)) + geom_bar() +
facet_wrap(facets = "COMUNA1") +
theme(axis.text.x = element_text(angle=85, vjust=0.6, size = 6))
10. Muestre gráficamente la cantidad de accidentes que hay para las distintas causas de accidentes. (5 puntos)
moto$IdAcciden<-as.numeric(moto$IdAcciden)
treemap(moto,index="CAUSA__CON", vSize ="IdAcciden", type="value")
11. Muestre en un mapa el número de accidentes en motos que hay para cada comuna. Este mapa debe tener colores más intensos para aquellas comunas con más accidentes en moto. Para esto:
ComunasR13Map<-readOGR(dsn = "ComunasR13/COMUNA_C17.shp")
## Warning in OGRSpatialRef(dsn, layer, morphFromESRI =
## morphFromESRI, dumpSRS = dumpSRS, : Discarded datum
## Sistema_de_Referencia_Geocentrico_para_las_AmericaS_2000 in CRS definition:
## +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs
## OGR data source with driver: ESRI Shapefile
## Source: "/Users/caromolinare/Dropbox/Carolina Molinare/Cursos/Clases y labs/Control 2/ComunasR13/COMUNA_C17.shp", layer: "COMUNA_C17"
## with 52 features
## It has 8 fields
motoMap@proj4string #proyección
## CRS arguments: +proj=longlat +datum=WGS84 +no_defs
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(motoMap))
## Warning in proj4string(motoMap): CRS object has comment, which is lost in output
ComunasR13Map@proj4string
## CRS arguments: +proj=longlat +datum=WGS84 +no_defs
ComunasMoto<-ComunasR13Map[ComunasR13Map@data$COMUNA%in%motoMap@data$COD_COMUNA,]
NumAccMoto<-moto[,.(NumAccMoto=.N),by=COD_COMUNA]
ComunasMoto@data<-merge(ComunasMoto@data,NumAccMoto,by.x="COMUNA",by.y="COD_COMUNA",sort=F, all.x=T)
pColor<-colorQuantile(palette = brewer.pal(4,name = "Reds"),domain =range(ComunasMoto@data$NumAccMoto,na.rm = T),n = 5)
labels <- sprintf(
"<strong>Comuna: %s </strong><br/>Acc.Motos: %g ",
ComunasMoto$NOM_COMUNA, ComunasMoto$NumAccMoto
) %>% lapply(htmltools::HTML)
leaflet(ComunasMoto)%>%
addTiles()%>%
addPolygons(fillColor = ~pColor(NumAccMoto),color='white',weight=1,fillOpacity = 0.7,highlight = highlightOptions(
weight = 5,
color = "#666",
fillOpacity = 0.7,
bringToFront = TRUE),label=labels)
Bonus 2: Realice el mismo mapa de la pregunta 11, pero muestre la proporción de fallecidos en relación al número de accidente en las comunas donde hubo fallecidos por accidentes de moto. (7 puntos)
Recomendación: Limpie el enviroment y vuelva a abrir las bases de motos y comunas
rm(list=ls())
motoMap<-readOGR(dsn = "Motos/MotosGS2016_2.shp")
## OGR data source with driver: ESRI Shapefile
## Source: "/Users/caromolinare/Dropbox/Carolina Molinare/Cursos/Clases y labs/Control 2/Motos/MotosGS2016_2.shp", layer: "MotosGS2016_2"
## with 2685 features
## It has 29 fields
moto<-as.data.table(motoMap@data)
ComunasR13Map<-readOGR(dsn = "ComunasR13/COMUNA_C17.shp")
## Warning in OGRSpatialRef(dsn, layer, morphFromESRI =
## morphFromESRI, dumpSRS = dumpSRS, : Discarded datum
## Sistema_de_Referencia_Geocentrico_para_las_AmericaS_2000 in CRS definition:
## +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs
## OGR data source with driver: ESRI Shapefile
## Source: "/Users/caromolinare/Dropbox/Carolina Molinare/Cursos/Clases y labs/Control 2/ComunasR13/COMUNA_C17.shp", layer: "COMUNA_C17"
## with 52 features
## It has 8 fields
ComunasR13Map<-spTransform(ComunasR13Map,CRSobj = proj4string(motoMap))
## Warning in proj4string(motoMap): CRS object has comment, which is lost in output
NumAccMoto<-moto[,.(NumAccMoto=.N),by=COD_COMUNA]
NumFallMoto<-moto[FALLECIDOS!=0,.(NumFallMoto=.N),by=COD_COMUNA]
NumFallMoto<-merge(NumFallMoto,NumAccMoto,by="COD_COMUNA")
NumFallMoto[,Prop_fall:=NumFallMoto/NumAccMoto,by=COD_COMUNA]
ComunasMoto<-ComunasR13Map[ComunasR13Map@data$COMUNA%in%NumFallMoto$COD_COMUNA,]
ComunasMoto@data<-merge(ComunasMoto@data,NumFallMoto,by.x="COMUNA",by.y="COD_COMUNA",sort=F, all.x=T)
pColor<-colorQuantile(palette = brewer.pal(4,name = "Reds"),domain =range(ComunasMoto@data$Prop_fall,na.rm = T),n = 5)
labels <- sprintf(
"<strong>Comuna: %s </strong><br/>Proporción Fallecidos: %g ",
ComunasMoto$NOM_COMUNA, ComunasMoto$Prop_fall
) %>% lapply(htmltools::HTML)
leaflet(ComunasMoto)%>%
addTiles()%>%
addPolygons(fillColor = ~pColor(Prop_fall),color='white',weight=1,fillOpacity = 0.7,highlight = highlightOptions(
weight = 5,
color = "#666",
fillOpacity = 0.7,
bringToFront = TRUE),label=labels)