En este ejercicio se realizará un proceso de unión de datos espaciales. Primero se cargan las librerías necesarias
library(sf)
## Warning: package 'sf' was built under R version 4.0.5
## Linking to GEOS 3.9.0, GDAL 3.2.1, PROJ 7.2.1
library(ggmap)
## Warning: package 'ggmap' was built under R version 4.0.5
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.0.5
## Google's Terms of Service: https://cloud.google.com/maps-platform/terms/.
## Please cite ggmap if you use it! See citation("ggmap") for details.
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.0.5
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v tibble 3.1.0 v dplyr 1.0.5
## v tidyr 1.1.3 v stringr 1.4.0
## v readr 1.4.0 v forcats 0.5.1
## v purrr 0.3.4
## Warning: package 'tidyr' was built under R version 4.0.5
## Warning: package 'dplyr' was built under R version 4.0.5
## Warning: package 'stringr' was built under R version 4.0.5
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
Después se cargan los datasets, primero los datos espaciales de las 16 alcaldías de la Ciudad de México
alcaldias <- st_read("alcaldias_cdmx.geojson", stringsAsFactors = TRUE)
## Reading layer `alcaldias' from data source `D:\Roberto\CursoCiudades\Clase2\Clase2\alcaldias_cdmx.geojson' using driver `GeoJSON'
## Simple feature collection with 16 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -99.36492 ymin: 19.04824 xmax: -98.9403 ymax: 19.59276
## Geodetic CRS: WGS 84
Se puede ver el resumen del archivo
summary(alcaldias)
## CVEGEO CVE_ENT CVE_MUN NOMGEO
## 09002 : 1 09:16 002 : 1 Álvaro Obregón : 1
## 09003 : 1 003 : 1 Azcapotzalco : 1
## 09004 : 1 004 : 1 Benito Juárez : 1
## 09005 : 1 005 : 1 Coyoacán : 1
## 09006 : 1 006 : 1 Cuajimalpa de Morelos: 1
## 09007 : 1 007 : 1 Cuauhtémoc : 1
## (Other):10 (Other):10 (Other) :10
## geometry
## MULTIPOLYGON :16
## epsg:4326 : 0
## +proj=long...: 0
##
##
##
##
Y se puede apreciar el primer mapa
ggplot(alcaldias)+
geom_sf()+
labs(title = "Ciudad de México: Alcaldías",
subtitle = "Fuente: INEGI",
caption = "@geogracelis") +
labs(x = "Longitud", y = "Latitud") +
theme_bw() +
theme (plot.title = element_text(family = "sans",
size = rel(1),
vjust = 2,
face = "bold.italic",
color = "black",
lineheight = 1.5)) +
theme (plot.subtitle = element_text(family = "sans",
size = rel(0.8),
vjust = 2,
face = "italic",
color = "gray40",
lineheight = 1.5)) +
theme (plot.caption = element_text(family = "sans",
size = rel(0.7),
vjust = 2,
face = "italic",
color = "gray30",
lineheight = 1.5)) +
theme(axis.title.x = element_text(face="bold", vjust=-0.5, colour="darkgray", size=rel(0.75))) +
theme(axis.title.y = element_text(face="bold", vjust=1.5, colour="darkgray", size=rel(0.75))) +
theme(axis.text.x = element_text(face="italic", colour="gray", size=rel(0.65)),
axis.text.y = element_text(face="italic", colour="gray", size=rel(0.65), angle=90, hjust=0.5))
theme(legend.title = element_text(face = "bold", colour="darkgray", size=rel(0.75))) +
theme(legend.text = element_text(face="italic", colour="gray", size=rel(0.6)))
## List of 2
## $ legend.title:List of 11
## ..$ family : NULL
## ..$ face : chr "bold"
## ..$ colour : chr "darkgray"
## ..$ size : 'rel' num 0.75
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ legend.text :List of 11
## ..$ family : NULL
## ..$ face : chr "italic"
## ..$ colour : chr "gray"
## ..$ size : 'rel' num 0.6
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi FALSE
## - attr(*, "validate")= logi TRUE
Ahora se importan las tablas en formato csv que contiene la información de las llamadas al 911 (teléfono de emergencias) en la Ciudad de México durante el año 2020. Son dos tablas, de cada uno de los semestres del año.
semestre1 <- read.csv("911_semestre1.csv", stringsAsFactors = TRUE, encoding = "UTF-8")
semestre2 <- read.csv("911_semestre2.csv", stringsAsFactors = TRUE, encoding = "UTF-8")
Se puede hacer uso de la función names() de cada tabla para verificar que tienen el mismo número de columnas y el mismo orden de las mismas
names(semestre1)
## [1] "folio" "incidente_c4" "fecha_creacion"
## [4] "hora_creacion" "mes_creacion" "año_creacion"
## [7] "fecha_cierre" "mes_cierre" "año_cierre"
## [10] "hora_cierre" "colonia" "codigo_cierre"
## [13] "clas_con_f_alarma" "delegacion_cierre" "manzana"
## [16] "longitud_centroide" "latitud_centroide" "geometry"
names(semestre2)
## [1] "folio" "incidente_c4" "fecha_creacion"
## [4] "hora_creacion" "mes_creacion" "año_creacion"
## [7] "fecha_cierre" "mes_cierre" "año_cierre"
## [10] "hora_cierre" "colonia" "codigo_cierre"
## [13] "clas_con_f_alarma" "delegacion_cierre" "manzana"
## [16] "longitud_centroide" "latitud_centroide" "geometry"
Se puede apreciar que ambas tablas tienen el mismo número de columnas y se encuentran en el mismo orden por lo que es posible hacer una unión de las filas con la función rbin()
llamadas911 = rbind(semestre1, semestre2)
View (llamadas911)
# summary(llamadas911)
Debido a que en la base de datos, las llamadas al 911 tienen coordenadas geográficas se puede realizar un mapa
ggplot(llamadas911) +
geom_point(aes(x = longitud_centroide, y = latitud_centroide), color = "#2C9FB8", alpha=0.5, size= 0.2)+
labs(title = "Ciudad de México: Llamadas 911",
subtitle = "Fuente: C5 Ciudad de México",
caption = "@geogracelis") +
labs(x = "Longitud", y = "Latitud") +
theme_bw() +
theme (plot.title = element_text(family = "sans",
size = rel(1),
vjust = 2,
face = "bold.italic",
color = "black",
lineheight = 1.5)) +
theme (plot.subtitle = element_text(family = "sans",
size = rel(0.8),
vjust = 2,
face = "italic",
color = "gray40",
lineheight = 1.5)) +
theme (plot.caption = element_text(family = "sans",
size = rel(0.7),
vjust = 2,
face = "italic",
color = "gray30",
lineheight = 1.5)) +
theme(axis.title.x = element_text(face="bold", vjust=-0.5, colour="darkgray", size=rel(0.75))) +
theme(axis.title.y = element_text(face="bold", vjust=1.5, colour="darkgray", size=rel(0.75))) +
theme(axis.text.x = element_text(face="italic", colour="gray", size=rel(0.65)),
axis.text.y = element_text(face="italic", colour="gray", size=rel(0.65), angle=90, hjust=0.5))
theme(legend.title = element_text(face = "bold", colour="darkgray", size=rel(0.75))) +
theme(legend.text = element_text(face="italic", colour="gray", size=rel(0.6)))
## List of 2
## $ legend.title:List of 11
## ..$ family : NULL
## ..$ face : chr "bold"
## ..$ colour : chr "darkgray"
## ..$ size : 'rel' num 0.75
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ legend.text :List of 11
## ..$ family : NULL
## ..$ face : chr "italic"
## ..$ colour : chr "gray"
## ..$ size : 'rel' num 0.6
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi FALSE
## - attr(*, "validate")= logi TRUE
También se pueden visualizar ambos datasets en un mismo mapa
ggplot()+
geom_sf(data = alcaldias, aes(fill= NOMGEO), show.legend = FALSE) +
geom_point(data = llamadas911, aes(x = longitud_centroide, y = latitud_centroide), color = "gray30", alpha=0.5, size= 0.1) +
labs(title = "Ciudad de México: Llamadas al 911 en 2020",
subtitle = "Fuente: C5 Ciudad de México",
caption = "@geogracelis") +
labs(x = "Longitud", y = "Latitud")+
theme_bw() +
theme (plot.title = element_text(family = "sans",
size = rel(1),
vjust = 2,
face = "bold.italic",
color = "black",
lineheight = 1.5)) +
theme (plot.subtitle = element_text(family = "sans",
size = rel(0.8),
vjust = 2,
face = "italic",
color = "gray40",
lineheight = 1.5)) +
theme (plot.caption = element_text(family = "sans",
size = rel(0.7),
vjust = 2,
face = "italic",
color = "gray30",
lineheight = 1.5)) +
theme(axis.title.x = element_text(face="bold", vjust=-0.5, colour="darkgray", size=rel(0.75))) +
theme(axis.title.y = element_text(face="bold", vjust=1.5, colour="darkgray", size=rel(0.75))) +
theme(axis.text.x = element_text(face="italic", colour="gray", size=rel(0.65)),
axis.text.y = element_text(face="italic", colour="gray", size=rel(0.65), angle=90, hjust=0.5))
theme(legend.title = element_text(face = "bold", colour="darkgray", size=rel(0.75))) +
theme(legend.text = element_text(face="italic", colour="gray", size=rel(0.6)))
## List of 2
## $ legend.title:List of 11
## ..$ family : NULL
## ..$ face : chr "bold"
## ..$ colour : chr "darkgray"
## ..$ size : 'rel' num 0.75
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ legend.text :List of 11
## ..$ family : NULL
## ..$ face : chr "italic"
## ..$ colour : chr "gray"
## ..$ size : 'rel' num 0.6
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi FALSE
## - attr(*, "validate")= logi TRUE
Ahora se transforma el dataset csv en uno espacial
llamadas_geo <- st_as_sf(llamadas911, coords = c("longitud_centroide", "latitud_centroide"), crs = 4326)
head(llamadas_geo)
## Simple feature collection with 6 features and 15 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -99.18454 ymin: 19.31599 xmax: -99.05113 ymax: 19.4599
## Geodetic CRS: WGS 84
## folio incidente_c4 fecha_creacion hora_creacion
## 1 C5/200103/07617 Disturbio-Escándalo 2020-01-03 23:01:50
## 2 C5/200103/07629 Disturbio-Escándalo 2020-01-03 23:05:16
## 3 C5/200103/07633 Disturbio-Escándalo 2020-01-03 23:06:31
## 4 C5/200103/07639 Servicios-Entrevista Ciudadana 2020-01-03 23:06:44
## 5 C5/200103/07640 Servicios-Entrevista Ciudadana 2020-01-03 23:07:16
## 6 C5/200103/07648 Médicos-Inconsciente 2020-01-03 23:08:05
## mes_creacion año_creacion fecha_cierre mes_cierre año_cierre hora_cierre
## 1 Enero 2020 2020-01-03 Enero 2020 23:18:08
## 2 Enero 2020 2020-01-03 Enero 2020 23:13:17
## 3 Enero 2020 2020-01-03 Enero 2020 23:15:23
## 4 Enero 2020 2020-01-03 Enero 2020 23:10:24
## 5 Enero 2020 2020-01-03 Enero 2020 23:15:10
## 6 Enero 2020 2020-01-03 Enero 2020 23:32:40
## colonia codigo_cierre clas_con_f_alarma
## 1 PERALVILLO Negativo FALTA CÍVICA
## 2 NONOALCO Negativo FALTA CÍVICA
## 3 CONJ HAB ALIANZA POP REVOLUCIONARIA04800 Falso FALSA ALARMA
## 4 CENTRO Duplicado SERVICIO
## 5 CUATRO ARBOLES Negativo SERVICIO
## 6 LAS PEÑAS Negativo URGENCIAS MEDICAS
## delegacion_cierre manzana geometry
## 1 CUAUHTEMOC 0901500010038010 POINT (-99.12885 19.4599)
## 2 BENITO JUAREZ 0901400010558002 POINT (-99.18454 19.3824)
## 3 COYOACAN 090030001136A027 POINT (-99.11875 19.31599)
## 4 CUAUHTEMOC <NA> POINT (-99.14406 19.43574)
## 5 VENUSTIANO CARRANZA 0901700011238025 POINT (-99.0838 19.42136)
## 6 IZTAPALAPA 0900700014043024 POINT (-99.05113 19.33792)
class(llamadas_geo)
## [1] "sf" "data.frame"
Se puede guardar el nuevo archivo en formato geojson mediante la función write_csv(datos, “nombre”)
st_write(llamadas_geo, "llamadas_911.geojson")
## Writing layer `llamadas_911' to data source `llamadas_911.geojson' using driver `GeoJSON'
## Writing 1180692 features with 15 fields and geometry type Point.
Ahora se unen ambos datasets en uno solo
llamadas_geo <- st_join(llamadas_geo, alcaldias)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
head(llamadas_geo)
## Simple feature collection with 6 features and 19 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -99.18454 ymin: 19.31599 xmax: -99.05113 ymax: 19.4599
## Geodetic CRS: WGS 84
## folio incidente_c4 fecha_creacion hora_creacion
## 1 C5/200103/07617 Disturbio-Escándalo 2020-01-03 23:01:50
## 2 C5/200103/07629 Disturbio-Escándalo 2020-01-03 23:05:16
## 3 C5/200103/07633 Disturbio-Escándalo 2020-01-03 23:06:31
## 4 C5/200103/07639 Servicios-Entrevista Ciudadana 2020-01-03 23:06:44
## 5 C5/200103/07640 Servicios-Entrevista Ciudadana 2020-01-03 23:07:16
## 6 C5/200103/07648 Médicos-Inconsciente 2020-01-03 23:08:05
## mes_creacion año_creacion fecha_cierre mes_cierre año_cierre hora_cierre
## 1 Enero 2020 2020-01-03 Enero 2020 23:18:08
## 2 Enero 2020 2020-01-03 Enero 2020 23:13:17
## 3 Enero 2020 2020-01-03 Enero 2020 23:15:23
## 4 Enero 2020 2020-01-03 Enero 2020 23:10:24
## 5 Enero 2020 2020-01-03 Enero 2020 23:15:10
## 6 Enero 2020 2020-01-03 Enero 2020 23:32:40
## colonia codigo_cierre clas_con_f_alarma
## 1 PERALVILLO Negativo FALTA CÍVICA
## 2 NONOALCO Negativo FALTA CÍVICA
## 3 CONJ HAB ALIANZA POP REVOLUCIONARIA04800 Falso FALSA ALARMA
## 4 CENTRO Duplicado SERVICIO
## 5 CUATRO ARBOLES Negativo SERVICIO
## 6 LAS PEÑAS Negativo URGENCIAS MEDICAS
## delegacion_cierre manzana CVEGEO CVE_ENT CVE_MUN
## 1 CUAUHTEMOC 0901500010038010 09015 09 015
## 2 BENITO JUAREZ 0901400010558002 09014 09 014
## 3 COYOACAN 090030001136A027 09003 09 003
## 4 CUAUHTEMOC <NA> 09015 09 015
## 5 VENUSTIANO CARRANZA 0901700011238025 09017 09 017
## 6 IZTAPALAPA 0900700014043024 09007 09 007
## NOMGEO geometry
## 1 Cuauhtémoc POINT (-99.12885 19.4599)
## 2 Benito Juárez POINT (-99.18454 19.3824)
## 3 Coyoacán POINT (-99.11875 19.31599)
## 4 Cuauhtémoc POINT (-99.14406 19.43574)
## 5 Venustiano Carranza POINT (-99.0838 19.42136)
## 6 Iztapalapa POINT (-99.05113 19.33792)
Se puede hacer un filtro para ver sólo un tipo de disturbio específico. Pero primero se muestran los tipos de disturbio existentes con la función unique()
unique(llamadas_geo$incidente_c4)
## [1] Disturbio-Escándalo
## [2] Servicios-Entrevista Ciudadana
## [3] Médicos-Inconsciente
## [4] Denuncia-Persona Sospechosa
## [5] Servicios-Corto Cables - Transformador
## [6] Denuncia-Servidor Público
## [7] Derrame o Fuga-Olor a Gas - Combustible Quimicos
## [8] Lesionado-Caída
## [9] Derrame o Fuga-Cilindro de Gas
## [10] Denuncia-Hechos
## [11] Agresión-Persona
## [12] Cadáver-Muerte Causa Ignorada
## [13] Abandono-Vehículo
## [14] Médicos-Evento Vascular Cerebral
## [15] Incendio-Instalaciones de Gobierno
## [16] Médicos-Hipoglucemia
## [17] Daños-Otros
## [18] Administrativas-Ebrios
## [19] Servicios-Vehículo Obstruyendo
## [20] Médicos-Infarto
## [21] Lesionado-Otros
## [22] Administrativas-Drogados
## [23] Administrativas-Franeleros
## [24] Agresión-Negocio
## [25] Servicios-Apoyo Vial Embotellamiento
## [26] Servicios-Persona Extraviada
## [27] Privación de la Libertad-Retención de Menores
## [28] Administrativas-Faltas a la Moral
## [29] Denuncia-Invasion de Predio
## [30] Lesionado-Picadura o Mordedura
## [31] Médicos-Crisis Nerviosa
## [32] Servicios-Reporte de Vehículo Vía Radio
## [33] Incendio-Casa Habitación
## [34] Incendio-Lote baldio
## [35] Detención Ciudadana-Robo
## [36] Explosión-Casa Habitación
## [37] Robo-Otros
## [38] Incendio-Otros
## [39] Médicos-Convulsiones
## [40] Robo-Automovilista
## [41] Servicios-Solicitud de Escolta
## [42] Agresión-A Policía
## [43] Privación de la Libertad-Secuestro
## [44] Amenaza-A Persona
## [45] Daños-Propiedad Ajena
## [46] Denuncia-Menor en riesgo
## [47] Lesionado-Prácticas Deportivas
## [48] Servicios-Apoyo Vial Semáforos Descompuestos
## [49] Administrativas-Tirar Basura en Vía Pública
## [50] Incendio-Negocio Plaza Comercial Mercado
## [51] Médicos-Intoxicado
## [52] Daños por Fenómeno Natural o Tercero-Caída de Cables
## [53] Agresión-Casa Habitación
## [54] Médicos-Enfermo
## [55] Disturbio-Disparos
## [56] Incendio-Quema de Pastizal
## [57] Incendio-Vehículo
## [58] Servicios-Vehículo Descompuesto
## [59] Derrame o Fuga-Tanque Estacionario
## [60] Derrame o Fuga-Aguas Negras
## [61] Daños-A la Nación - Vías de Comunicación
## [62] Derrame o Fuga-Agua Potable
## [63] Daños por Fenómeno Natural o Tercero-PosteLadeado
## [64] Médicos-Trabajo de Parto - Alumbramiento
## [65] Disturbio-Arrancones
## [66] Médicos-Asfixia-Atragantamiento
## [67] Cadáver-Suspendido
## [68] Derrame o Fuga-Material o Sustancia en pavimento
## [69] Médicos-Amenaza de Aborto
## [70] Incendio-Transformador
## [71] Amenaza-Bomba
## [72] Incendio-Ductos
## [73] Lesionado-Quemadura
## [74] Disturbio-Bloqueos
## [75] Daños por Fenómeno Natural o Tercero-Caída Rama
## [76] Disturbio-Jugadores
## [77] Robo-Escuela
## [78] Servicios-Menor extraviado
## [79] Lesionado-Por Objeto Contuso
## [80] Servicios-Falta de Agua
## [81] Médicos-Hemorragia
## [82] Derrame o Fuga-Gas Natural
## [83] Médicos-Dolor
## [84] Incendio-Quema de Basura
## [85] Disturbio-Riña
## [86] Cadáver-Muerte por enfermedad previamente diagnosticada
## [87] Administrativas-Fisiológica
## [88] Contra la Salud-Consumo de Droga o Estupefacientes
## [89] Disturbio-Desperdicio de Agua
## [90] Servicios-Animales Peligrosos
## [91] Administrativas-Comercio Informal
## [92] Servicios-Reporte de Vehículo Vía GPS
## [93] Intento de suicidio-Se cortó-autolesionó
## [94] Lesionado-Por Golpes-Agresión
## [95] Servicios-Alarma Activada
## [96] Denuncia-Persona en Riesgo
## [97] Lesionado-Por Arma Blanca
## [98] Servicios-Otros
## [99] Servicios-Baches
## [100] Daños por Fenómeno Natural o Tercero-Caída de Árbol
## [101] Amenaza-De Suicidio
## [102] Incendio-Edificio
## [103] Denuncia-Persona Desaparecida
## [104] Abandono-De Objeto
## [105] Disturbio-Concentración de Personas
## [106] Daños por Fenómeno Natural o Tercero-Árbol Ladeado
## [107] Daños-Casa Habitación
## [108] Lesionado-Cayó de estructura o inmueble
## [109] Abandono-Animal
## [110] Disturbio-Fiestas
## [111] Incendio-Arbol
## [112] Explosión-Negocio Plaza Comercial Mercado
## [113] Servicios-Vehículo Recuperado-Localizado
## [114] Daños por Fenómeno Natural o Tercero-Afectación Inmueble
## [115] Denuncia-Maltrato Animal
## [116] Denuncia-Allanamiento
## [117] Explosión-Otros
## [118] Explosión-Transformador
## [119] Administrativas-Otros
## [120] Cadáver-Otros
## [121] Robo-Bienes Gubernamentales (Coladeras Cable)
## [122] Robo-Animales
## [123] Daños-Sistema Tecnológico de Videovigilancia
## [124] Daños por Fenómeno Natural o Tercero-Socavón
## [125] Servicios-Apoyo para Desalojo
## [126] Servicios-Enjambre
## [127] Denuncia-Maltrato - Discriminación
## [128] Incendio-Forestal
## [129] Daños-Negocio
## [130] Incendio-Mufa
## [131] Daños por Fenómeno Natural o Tercero-Zona sin Energia Electrica
## [132] Daños por Fenómeno Natural o Tercero-Caída de Poste
## [133] Incendio-Industria
## [134] Disturbio-Quema de Pirotecnia
## [135] Daños por Fenómeno Natural o Tercero-Afectación Vehículo
## [136] Administrativas-Grafitis
## [137] Daños por fenómeno natural o tercero-Caída de Anuncio Espectacular
## [138] Incendio-Comercio ambulante
## [139] Cadáver-Caída
## [140] Cadáver-Atragantamiento-Asfixia
## [141] Agresión-Servidor Público
## [142] Servicios-Coladera o Resgistro sin Tapa
## [143] Lesionado-Policía
## [144] Intento de suicidio-Tomó pastillas o estupefacientes
## [145] Denuncia-Olor Fétido - Manchas Hematicas en Inmueble
## [146] Agresión-Otros
## [147] Servicios-Simulacro
## [148] Lesionado-Por Herramienta o Maquinaria
## [149] Detención Ciudadana-Delitos Sexuales
## [150] Lesionado-Suspendido
## [151] Servicios-Abastecimiento de Agua
## [152] Servicios-Transporte de Carga Fuera de Horario
## [153] Denuncia-Ruptura de Sellos
## [154] Denuncia-Vehiculo con Manchas Hemáticas - Olor fétido
## [155] Derrame o Fuga-Pipa de Gas
## [156] Daños-Instalaciones Gubernamentales
## [157] Abandono-Persona
## [158] Administrativas-Prostitución
## [159] Médicos-Otros
## [160] Denuncia-Otros
## [161] Incendio-Escuela
## [162] Derrame o Fuga-Productos Químicos
## [163] Daños por Fenómeno Natural o Tercero-Caída de Barda
## [164] Detención Ciudadana-Daños
## [165] Daños por Fenómeno Natural o Tercero-Derrumbe
## [166] Sismo-Persona en crisis nerviosa
## [167] Intento de suicidio-Se suspendió
## [168] Accidente-Sumersion
## [169] Servicios-Vehículo Chatarra
## [170] Intento de suicidio-Se arrojó al vacío
## [171] Robo-Cable
## [172] Detención Ciudadana-Agresión
## [173] Cadáver-Suicidio
## [174] Disturbio-Linchamiento
## [175] Robo-Institución Pública
## [176] Intento de suicidio-Otros
## [177] Abandono-Órganos-Tejido-Extremidades
## [178] Detención Ciudadana-Fraude
## [179] Explosión-Escuela
## [180] Disturbio-Casa Habitación
## [181] Amenaza-A Inmueble
## [182] Explosión-Comercio ambulante
## [183] Cadáver-Intoxicación
## [184] Daños por Fenómeno Natural o Tercero-Agrietamiento
## [185] Explosión-Vehículo
## [186] Detención ciudadana-Secuestro
## [187] Intento de suicidio-Se disparó
## [188] Daños por Fenómeno Natural o Tercero-Desprendimiento Lona de Espectacular
## [189] Daños por Fenómeno Natural o Tercero-Deslave
## [190] Robo-Cajero Automático
## [191] Disturbio-Otros
## [192] Incendio-Pipa
## [193] Explosión-Edificio
## [194] Daños por Fenómeno Natural o Tercero-Inundación
## [195] Explosión-Mufas
## [196] Lesionado-Prensado
## [197] Daños por Fenómeno Natural o Tercero-Otros
## [198] Servicios-Peregrinación
## [199] Cadáver-Sumersión-Ahogamiento
## [200] Privación de la Libertad-Otros
## [201] Daños por Fenómeno Natural o Tercero-Hundimiento
## [202] Detención Ciudadana-Otros
## [203] Explosión-Industria
## [204] Robo-Transporte de pasajeros-Foráneo
## [205] Robo-Camioneta de Valores
## [206] Denuncia de Hechos-Portación de Arma
## [207] Cadáver-Feto
## [208] Sismo-Percepción de sismo (baja intensidad)
## [209] Sismo-Fuga de Gas Natural
## [210] Sismo-Socavón
## [211] Abandono-Arma - Cartucho
## [212] Servicios-Corto Circuito instalación o subestación eléctrica
## [213] Detención Ciudadana-Allanamiento
## [214] Sismo-Evacuación
## [215] Lesionado-Electrocutado
## [216] Sismo-Evaluación-Edificio
## [217] Robo-Bancos
## [218] Servicios-9-1-1 CDMX - Llamada Silenciosa
## [219] Daños por Fenómeno Natural o Tercero-Encharcamiento
## [220] Privación de la Libertad-Secuestro Express
## [221] Sismo-Poste o Árbol Ladeado
## [222] Intento de suicidio-Inhalación de gas-químicos
## [223] Cadáver-Quemado o Electrocutado
## [224] Médicos-Sumersión-Ahogamiento
## [225] Abandono-Artefacto Explosivo
## [226] Derrame o Fuga-Petróleo y Derivados o Ductos
## [227] Denuncia-Venta de Pirotecnia
## [228] Sismo-Caída de Cables
## [229] Denuncia-Uso o presentación de documento falso
## [230] Denuncia-Reventa
## [231] Disturbio-Marcha de Personas
## [232] Electorales-Agresión a Inmueble
## [233] Sismo-Falta energía Eléctrica
## [234] Electorales-Robo de Urnas o Boletas
## [235] Electorales-Retiro de Propaganda
## [236] Daños por Fenómeno Natural o Tercero-Desborde - Canal - Rio - Presa
## [237] Incendio-Instalación o Subestación eléctrica
## [238] Servicios-Denuncia Profeco
## [239] Derrame o Fuga-Otros
## [240] Sismo-Persona atrapada-Elevador
## [241] Sismo-Fuga de Agua
## [242] Electorales-Otros
## [243] Electorales-Agresión a Funcionarios
## [244] Electorales-Proselitismo
## [245] Electorales-Compra de Votos
## [246] Explosión-Instalación o Subestación eléctrica
## [247] Daños por Fenómeno Natural o Tercero-Caída de Ceniza
## [248] Sismo-Caída de Árbol
## [249] Robo-Intento de saqueo
## [250] Robo-Saqueo de establecimiento
## [251] Incendio-Instalaciones PEMEX
## [252] Incendio-Gasolinera
## [253] Daños por Fenómeno Natural o Tercero-Caida de Rayo
## [254] Sismo-Fuga de Gas
## [255] Explosión-Artefacto Explosivo
## [256] Accidente-Aéreo
## [257] Explosión-Pipa
## [258] Servicios-Desalojo Simulacro
## [259] Amenaza-Otros
## [260] Sismo-Agrietamiento
## [261] Sismo-Estructura en Riesgo de Colapso
## [262] Intento de suicidio-Se arrojó a las vías del metro
## [263] Sismo-Evaluación-Escuela
## [264] Sismo-Evaluación-Casa Habitación
## [265] Sismo-Derrumbe
## [266] Sismo-Persona Lesionada
## [267] Sismo-Explosión Transformador
## [268] Sismo-Caída de Poste
## [269] Sismo-Evaluación-Unidad Habitacional
## [270] Sismo-Persona Atrapada
## [271] Sismo-Caída de Barda
## [272] Sismo-Incendio
## [273] Sismo-Otros
## [274] Sismo-Evaluación-Edificio de Gobierno
## [275] Explosión-Gasolinera
## [276] Explosión-Instalaciones de Gobierno
## 276 Levels: Abandono-Animal ... Explosión-Instalaciones de Gobierno
Ahpra se hará el filtro para obtener sólo el disturbio identificado como disparos
disturbio <- filter(llamadas_geo, incidente_c4 == "Disturbio-Disparos")
Se realiza un mapa de este tipo de disturbios considerando la alcaldía donde se reportó
ggplot()+
geom_sf(data = alcaldias, fill="gray75", color="white") +
geom_sf(data = disturbio, aes(color= NOMGEO), alpha=0.5, size= 0.3, show.legend = FALSE) +
scale_color_viridis_d(option = "C") +
labs(title = "Ciudad de México: Llamadas al 911 por disparos",
subtitle = "Fuente: C5 Ciudad de México",
caption = "@geogracelis") +
labs(x = "Longitud", y = "Latitud")+
theme_bw() +
theme (plot.title = element_text(family = "sans",
size = rel(1),
vjust = 2,
face = "bold.italic",
color = "black",
lineheight = 1.5)) +
theme (plot.subtitle = element_text(family = "sans",
size = rel(0.8),
vjust = 2,
face = "italic",
color = "gray40",
lineheight = 1.5)) +
theme (plot.caption = element_text(family = "sans",
size = rel(0.7),
vjust = 2,
face = "italic",
color = "gray30",
lineheight = 1.5)) +
theme(axis.title.x = element_text(face="bold", vjust=-0.5, colour="darkgray", size=rel(0.75))) +
theme(axis.title.y = element_text(face="bold", vjust=1.5, colour="darkgray", size=rel(0.75))) +
theme(axis.text.x = element_text(face="italic", colour="gray", size=rel(0.65)),
axis.text.y = element_text(face="italic", colour="gray", size=rel(0.65), angle=90, hjust=0.5))
theme(legend.title = element_text(face = "bold", colour="darkgray", size=rel(0.75))) +
theme(legend.text = element_text(face="italic", colour="gray", size=rel(0.6)))
## List of 2
## $ legend.title:List of 11
## ..$ family : NULL
## ..$ face : chr "bold"
## ..$ colour : chr "darkgray"
## ..$ size : 'rel' num 0.75
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## $ legend.text :List of 11
## ..$ family : NULL
## ..$ face : chr "italic"
## ..$ colour : chr "gray"
## ..$ size : 'rel' num 0.6
## ..$ hjust : NULL
## ..$ vjust : NULL
## ..$ angle : NULL
## ..$ lineheight : NULL
## ..$ margin : NULL
## ..$ debug : NULL
## ..$ inherit.blank: logi FALSE
## ..- attr(*, "class")= chr [1:2] "element_text" "element"
## - attr(*, "class")= chr [1:2] "theme" "gg"
## - attr(*, "complete")= logi FALSE
## - attr(*, "validate")= logi TRUE
¿Qué cantidad de llamadas al 911 por disparos tuvo cada una de las alcaldías?
llamadas_alcaldia <- disturbio %>%
group_by(NOMGEO) %>%
summarise(cantidad=n())
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
summary(llamadas_alcaldia)
## NOMGEO cantidad geometry
## Álvaro Obregón : 1 Min. : 180 MULTIPOINT :16
## Azcapotzalco : 1 1st Qu.: 1059 epsg:4326 : 0
## Benito Juárez : 1 Median : 1506 +proj=long...: 0
## Coyoacán : 1 Mean : 2098
## Cuajimalpa de Morelos: 1 3rd Qu.: 1838
## Cuauhtémoc : 1 Max. :10166
## (Other) :10
Se elimina “lo geográfico” porque puede ser muy pesado para realizar operaciones
llamadas_alcaldia <- llamadas_alcaldia %>%
st_set_geometry(NULL)
summary(llamadas_alcaldia)
## NOMGEO cantidad
## Álvaro Obregón : 1 Min. : 180
## Azcapotzalco : 1 1st Qu.: 1059
## Benito Juárez : 1 Median : 1506
## Coyoacán : 1 Mean : 2098
## Cuajimalpa de Morelos: 1 3rd Qu.: 1838
## Cuauhtémoc : 1 Max. :10166
## (Other) :10
alcaldias <- left_join(alcaldias, llamadas_alcaldia, by = "NOMGEO")
Y se realiza un mapa coroplético que indica el número de llamadas por disparos según alcaldía de la ciudad de México en 2020
ggplot(alcaldias)+
geom_sf(aes(fill = cantidad), color="white") +
labs(title = "Ciudad de México: Llamadas al 911 por disparos",
subtitle = "Fuente: C5 Ciudad de México",
caption = "@geogracelis") +
scale_fill_viridis_c("# de llamadas", option = "rocket", direction=-1) +
labs(x = "Longitud", y = "Latitud")+
theme_bw() +
theme (plot.title = element_text(family = "sans",
size = rel(1),
vjust = 2,
face = "bold.italic",
color = "black",
lineheight = 1.5)) +
theme (plot.subtitle = element_text(family = "sans",
size = rel(0.8),
vjust = 2,
face = "italic",
color = "gray40",
lineheight = 1.5)) +
theme (plot.caption = element_text(family = "sans",
size = rel(0.7),
vjust = 2,
face = "italic",
color = "gray30",
lineheight = 1.5)) +
theme(axis.title.x = element_text(face="bold", vjust=-0.5, colour="darkgray", size=rel(0.75))) +
theme(axis.title.y = element_text(face="bold", vjust=1.5, colour="darkgray", size=rel(0.75))) +
theme(axis.text.x = element_text(face="italic", colour="gray", size=rel(0.65)),
axis.text.y = element_text(face="italic", colour="gray", size=rel(0.65), angle=90, hjust=0.5)) +
theme(legend.title = element_text(face = "bold", colour="darkgray", size=rel(0.75))) +
theme(legend.text = element_text(face="italic", colour="gray", size=rel(0.6)))
Se observa que la alcaldía Iztapalapa es la que presentó el mayor número de llamadas por disparon al 911 en el año 2020.
Ahora se hará un filtro para una alcaldía: Iztacalco
iztacalco <- filter(llamadas_geo, NOMGEO == "Iztacalco")
Se realiza un mapa de los disturbios de la alcaldía Iztacalco considerando la colonia (barrio) en que se reportó
ggplot()+
geom_sf(data = iztacalco, aes(color= colonia), alpha=0.5, size= 0.5, show.legend = FALSE) +
scale_color_viridis_d(option = "C") +
labs(title = "Iztacalco: Llamadas al 911 según colonia",
subtitle = "Fuente: C5 Ciudad de México",
caption = "@geogracelis") +
labs(x = "Longitud", y = "Latitud")+
theme_bw() +
theme (plot.title = element_text(family = "sans",
size = rel(1),
vjust = 2,
face = "bold.italic",
color = "black",
lineheight = 1.5)) +
theme (plot.subtitle = element_text(family = "sans",
size = rel(0.8),
vjust = 2,
face = "italic",
color = "gray40",
lineheight = 1.5)) +
theme (plot.caption = element_text(family = "sans",
size = rel(0.7),
vjust = 2,
face = "italic",
color = "gray30",
lineheight = 1.5)) +
theme(axis.title.x = element_text(face="bold", vjust=-0.5, colour="darkgray", size=rel(0.75))) +
theme(axis.title.y = element_text(face="bold", vjust=1.5, colour="darkgray", size=rel(0.75))) +
theme(axis.text.x = element_text(face="italic", colour="gray", size=rel(0.65)),
axis.text.y = element_text(face="italic", colour="gray", size=rel(0.65), angle=90, hjust=0.5)) +
theme(legend.title = element_text(face = "bold", colour="darkgray", size=rel(0.75))) +
theme(legend.text = element_text(face="italic", colour="gray", size=rel(0.6)))
Para finalizar, se agregará un mapa base de contexto gracias a la librería ggmap()
Primero, se crea una caja con las coordenadas extremas
bbox_iztacalco <- as.numeric(st_bbox(iztacalco))
Después “se llama” a una capa base de la página http://maps.stamen.com/
mapa_iztacalco <- get_stamenmap(bbox = bbox_iztacalco,
maptype = "terrain-lines",
zoom = 15)
## Source : http://tile.stamen.com/terrain-lines/15/7360/14581.png
## Source : http://tile.stamen.com/terrain-lines/15/7361/14581.png
## Source : http://tile.stamen.com/terrain-lines/15/7362/14581.png
## Source : http://tile.stamen.com/terrain-lines/15/7363/14581.png
## Source : http://tile.stamen.com/terrain-lines/15/7364/14581.png
## Source : http://tile.stamen.com/terrain-lines/15/7365/14581.png
## Source : http://tile.stamen.com/terrain-lines/15/7366/14581.png
## Source : http://tile.stamen.com/terrain-lines/15/7367/14581.png
## Source : http://tile.stamen.com/terrain-lines/15/7360/14582.png
## Source : http://tile.stamen.com/terrain-lines/15/7361/14582.png
## Source : http://tile.stamen.com/terrain-lines/15/7362/14582.png
## Source : http://tile.stamen.com/terrain-lines/15/7363/14582.png
## Source : http://tile.stamen.com/terrain-lines/15/7364/14582.png
## Source : http://tile.stamen.com/terrain-lines/15/7365/14582.png
## Source : http://tile.stamen.com/terrain-lines/15/7366/14582.png
## Source : http://tile.stamen.com/terrain-lines/15/7367/14582.png
## Source : http://tile.stamen.com/terrain-lines/15/7360/14583.png
## Source : http://tile.stamen.com/terrain-lines/15/7361/14583.png
## Source : http://tile.stamen.com/terrain-lines/15/7362/14583.png
## Source : http://tile.stamen.com/terrain-lines/15/7363/14583.png
## Source : http://tile.stamen.com/terrain-lines/15/7364/14583.png
## Source : http://tile.stamen.com/terrain-lines/15/7365/14583.png
## Source : http://tile.stamen.com/terrain-lines/15/7366/14583.png
## Source : http://tile.stamen.com/terrain-lines/15/7367/14583.png
## Source : http://tile.stamen.com/terrain-lines/15/7360/14584.png
## Source : http://tile.stamen.com/terrain-lines/15/7361/14584.png
## Source : http://tile.stamen.com/terrain-lines/15/7362/14584.png
## Source : http://tile.stamen.com/terrain-lines/15/7363/14584.png
## Source : http://tile.stamen.com/terrain-lines/15/7364/14584.png
## Source : http://tile.stamen.com/terrain-lines/15/7365/14584.png
## Source : http://tile.stamen.com/terrain-lines/15/7366/14584.png
## Source : http://tile.stamen.com/terrain-lines/15/7367/14584.png
## Source : http://tile.stamen.com/terrain-lines/15/7360/14585.png
## Source : http://tile.stamen.com/terrain-lines/15/7361/14585.png
## Source : http://tile.stamen.com/terrain-lines/15/7362/14585.png
## Source : http://tile.stamen.com/terrain-lines/15/7363/14585.png
## Source : http://tile.stamen.com/terrain-lines/15/7364/14585.png
## Not Found (HTTP 404). Failed to aquire tile /terrain-lines/15/7364/14585.png.
## Source : http://tile.stamen.com/terrain-lines/15/7365/14585.png
## Not Found (HTTP 404). Failed to aquire tile /terrain-lines/15/7365/14585.png.
## Source : http://tile.stamen.com/terrain-lines/15/7366/14585.png
## Not Found (HTTP 404). Failed to aquire tile /terrain-lines/15/7366/14585.png.
## Source : http://tile.stamen.com/terrain-lines/15/7367/14585.png
## Not Found (HTTP 404). Failed to aquire tile /terrain-lines/15/7367/14585.png.
POdemos visualizar el mapa
ggmap(mapa_iztacalco)
Finalmente, podemos agregar los datos de las llamadas al 911 al mapa anterior
ggmap(mapa_iztacalco) +
geom_sf(data = iztacalco, aes(color= incidente_c4), alpha=0.5, size= 0.8, show.legend = FALSE, inherit.aes = FALSE) +
scale_color_viridis_d(option = "turbo") +
labs(title = "Iztacalco: Llamadas al 911 según disturbio",
subtitle = "Fuente: C5 Ciudad de México",
caption = "@geogracelis") +
labs(x = "Longitud", y = "Latitud")+
theme (plot.title = element_text(family = "sans",
size = rel(1),
vjust = 2,
face = "bold.italic",
color = "black",
lineheight = 1.5)) +
theme (plot.subtitle = element_text(family = "sans",
size = rel(0.8),
vjust = 2,
face = "italic",
color = "gray40",
lineheight = 1.5)) +
theme (plot.caption = element_text(family = "sans",
size = rel(0.7),
vjust = 2,
face = "italic",
color = "gray30",
lineheight = 1.5)) +
theme(axis.title.x = element_text(face="bold", vjust=-0.5, colour="darkgray", size=rel(0.75))) +
theme(axis.title.y = element_text(face="bold", vjust=1.5, colour="darkgray", size=rel(0.75))) +
theme(axis.text.x = element_text(face="italic", colour="gray", size=rel(0.65)),
axis.text.y = element_text(face="italic", colour="gray", size=rel(0.65), angle=90, hjust=0.5)) +
theme(legend.title = element_text(face = "bold", colour="darkgray", size=rel(0.75))) +
theme(legend.text = element_text(face="italic", colour="gray", size=rel(0.6)))
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.