##Análisis Espacio-Temporal de las llamadas al 911 en Ciudad de México

En este ejercicio se realizará un análisis espacio-temporal de las llamadas al 911 (número de emergencias) en la ciudad de México durante 2020.

Primero se importan las librearí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()
library(lubridate)
## Warning: package 'lubridate' was built under R version 4.0.5
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union

Después se llaman a los archivos csv que contienen los datos de las llamadas al 911 en la Ciudad de México. Son dos, uno por cada semestre 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")

Debido a que los datos se encuentran en dos archivos distintos, se unirán mediante la función rbind()

llamadas911 <- rbind(semestre1, semestre2)
head(llamadas911)
##             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 longitud_centroide latitud_centroide
## 1          CUAUHTEMOC 0901500010038010          -99.12885          19.45990
## 2       BENITO JUAREZ 0901400010558002          -99.18454          19.38240
## 3            COYOACAN 090030001136A027          -99.11875          19.31599
## 4          CUAUHTEMOC             <NA>          -99.14406          19.43574
## 5 VENUSTIANO CARRANZA 0901700011238025          -99.08380          19.42136
## 6          IZTAPALAPA 0900700014043024          -99.05113          19.33792
##                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       geometry
## 1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               MULTIPOLYGON (((-99.129169 19.4603104899991, -99.129138262 19.4602996449992, -99.1291212519999 19.4602936439991, -99.1287963079999 19.4601789839991, -99.128676647 19.4601367599992, -99.1286361699999 19.4601224799992, -99.1285466799999 19.4600908899992, -99.1284676819999 19.4600630159991, -99.12833506 19.4600162199991, -99.12831078 19.4600076499991, -99.1283552299999 19.4598874799991, -99.128363418 19.4598653389991, -99.1284003709999 19.4597654209991, -99.12843895 19.4596610899991, -99.1284468319999 19.4596397809991, -99.1285108599999 19.4594666799991, -99.1285794 19.4594901499991, -99.128588918 19.4594934059991, -99.1287314889999 19.4595422229991, -99.128886219 19.4595952009991, -99.1290539499999 19.4596526299991, -99.129324679 19.4597453229991, -99.12935738 19.4597565199991, -99.12940688 19.4597734599991, -99.12934463 19.4599319699991, -99.1292826599999 19.4600897499992, -99.1292588479999 19.4601504189992, -99.1292444799999 19.4601870199991, -99.1292347519999 19.4602117809992, -99.12919269 19.4603188499992, -99.129169 19.4603104899991)))
## 2                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         MULTIPOLYGON (((-99.1842453399999 19.3828506499991, -99.1840582499999 19.3828342799991, -99.18411651 19.3826999099991, -99.18431435 19.3822437099992, -99.18436509 19.3821266799992, -99.1844487499999 19.3819337999992, -99.18495783 19.3819788899991, -99.18504269 19.3819863999992, -99.1847636799999 19.3827121999991, -99.1846953099999 19.3828900599991, -99.1842453399999 19.3828506499991)))
## 3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               MULTIPOLYGON (((-99.11860649 19.3164166299991, -99.1184445109999 19.3164017919991, -99.11840312 19.3163979999991, -99.11841666 19.3163390499991, -99.11842626 19.3162973099992, -99.11843515 19.3162585499992, -99.1184459399999 19.3162415999992, -99.11848646 19.3161778599991, -99.11849505 19.3161643799991, -99.1185216 19.3161007999991, -99.1185238199999 19.3160954899991, -99.11853408 19.3160365499991, -99.11853565 19.3160275499991, -99.11853766 19.3159722199991, -99.1185400799999 19.3159062799991, -99.1185423699999 19.3158432899991, -99.11854485 19.3157756199992, -99.1185462599999 19.3157369199992, -99.11857309 19.3157062599992, -99.11860432 19.3156705799991, -99.1186111799999 19.3156287999992, -99.1186280359999 19.3155261799991, -99.11862962 19.3155165399991, -99.11879829 19.3155286799992, -99.11900797 19.3155437799991, -99.11894315 19.3156401699991, -99.1188976499999 19.3157078299991, -99.11894612 19.3157284799992, -99.1189185799999 19.3157807999991, -99.11888122 19.3158517799991, -99.11887348 19.3158824899991, -99.11884994 19.3159757399991, -99.1188489999999 19.3159847699992, -99.11884143 19.3160577499991, -99.11883292 19.3161396199991, -99.1188273499999 19.3161933699992, -99.1188197499999 19.3162664899991, -99.1188096599999 19.3163637799992, -99.11880231 19.3164345499991, -99.11860649 19.3164166299991)))
## 4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         <NA>
## 5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       MULTIPOLYGON (((-99.08281148 19.4211015699992, -99.0841082899999 19.4208071799991, -99.08427789 19.4214167199991, -99.0844474899999 19.4220262799992, -99.08281148 19.4211015699992)))
## 6 MULTIPOLYGON (((-99.0505900799999 19.3387348899991, -99.0505383999999 19.3387397699992, -99.05048543 19.3387447809991, -99.0502284499999 19.3387690899991, -99.0502261499999 19.3386866199991, -99.05022388 19.3386041399991, -99.050220418 19.3384788199991, -99.0502086179999 19.3380519699991, -99.0502040799999 19.3378881499991, -99.05019651 19.3376144199991, -99.0502565799999 19.3375863399991, -99.0503166299999 19.3375582799991, -99.05037671 19.3375301999992, -99.050679368 19.3373887379992, -99.0510743989999 19.3372040779992, -99.051247291 19.3371232619991, -99.0513377499999 19.3370809799991, -99.0513307999999 19.3372673199991, -99.05204471 19.3372812699991, -99.0525062 19.3372902799991, -99.05251094 19.3374810599992, -99.0525120619999 19.3375262199991, -99.0525133199999 19.3375764499991, -99.0520711999999 19.3375499499991, -99.0520744199999 19.3379320499992, -99.0520618199999 19.3379436299991, -99.0520492199999 19.3379552299991, -99.05203662 19.3379668299991, -99.051922387 19.3380718979991, -99.0518854199999 19.3381059099991, -99.05179415 19.3379761499991, -99.0517940299999 19.3375469099992, -99.0517502499999 19.3375449399991, -99.05172034 19.3375435999991, -99.05171346 19.3380493999991, -99.0517531099999 19.3381111499991, -99.0518024199999 19.3381879399991, -99.051773311 19.3382104009991, -99.051705522 19.3382627419991, -99.051664606 19.3382943269991, -99.05165737 19.3382999199992, -99.0515836499999 19.3382267399991, -99.0515693999999 19.3375345799991, -99.0515238 19.3375379399991, -99.0514781799999 19.3375412799991, -99.05147185 19.3381923699991, -99.0514713799999 19.3382400799991, -99.05150675 19.3382828499991, -99.05157317 19.3383631699992, -99.0515691419999 19.3383669819991, -99.0515224599999 19.3384111799991, -99.0514717399999 19.3384592199992, -99.051457942 19.3384722919992, -99.05142105 19.3385072499992, -99.051402522 19.3385247819991, -99.05137032 19.3385552799991, -99.05133177 19.3385917799991, -99.05126054 19.3386592499991, -99.0512568499999 19.3386596809991, -99.051214521 19.3386646219991, -99.0511669999999 19.3386701819991, -99.0511098599999 19.3386768599992, -99.05110412 19.3383071099991, -99.0510725399999 19.3383071399991, -99.05105098 19.3383071199991, -99.05105795 19.3386829199991, -99.05064666 19.3387309699991, -99.05060302 19.3376723399991, -99.05057871 19.3376699499991, -99.05055442 19.3376675699991, -99.0505900799999 19.3387348899991)))

Se puede apreciar que la base de datos contiene datos del tipo de incidente reportado, mes, hora, colonia, alcaldía y coordenadas geográficas.

Ahora se revisará la estructura de los datos

str(llamadas911)
## 'data.frame':    1180692 obs. of  18 variables:
##  $ folio             : Factor w/ 1180692 levels "AO/200113/07864",..: 10971 10978 10980 10985 10986 10989 10990 10998 11001 11012 ...
##  $ incidente_c4      : Factor w/ 276 levels "Abandono-Animal",..: 116 116 116 233 233 196 196 116 116 116 ...
##  $ fecha_creacion    : Factor w/ 388 levels "2019-01-16","2019-06-28",..: 56 56 56 56 56 56 56 56 56 56 ...
##  $ hora_creacion     : Factor w/ 86314 levels "00:00:00","00:00:01",..: 82058 82264 82339 82352 82384 82433 82424 82500 82669 82845 ...
##  $ mes_creacion      : Factor w/ 12 levels "Abril","Agosto",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ año_creacion      : int  2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
##  $ fecha_cierre      : Factor w/ 335 levels "2020-01-01","2020-01-02",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ mes_cierre        : Factor w/ 11 levels "Abril","Enero",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ año_cierre        : int  2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
##  $ hora_cierre       : Factor w/ 86284 levels "00:00:00","00:00:01",..: 82974 82683 82809 82510 82796 83846 82994 84433 84030 84328 ...
##  $ colonia           : Factor w/ 2033 levels "10 DE ABRIL",..: 1312 1211 426 372 471 992 373 630 929 1886 ...
##  $ codigo_cierre     : Factor w/ 5 levels "Afirmativo","Duplicado",..: 5 5 3 2 5 5 2 5 5 5 ...
##  $ clas_con_f_alarma : Factor w/ 6 levels "DELITO","EMERGENCIA",..: 4 4 3 5 5 6 6 4 4 4 ...
##  $ delegacion_cierre : Factor w/ 17 levels "ALVARO OBREGON",..: 6 3 4 6 16 9 1 11 5 9 ...
##  $ manzana           : Factor w/ 39654 levels "0900200010010002",..: 31811 30913 3612 NA 37535 17498 22367 35471 4048 14075 ...
##  $ longitud_centroide: num  -99.1 -99.2 -99.1 -99.1 -99.1 ...
##  $ latitud_centroide : num  19.5 19.4 19.3 19.4 19.4 ...
##  $ geometry          : Factor w/ 39200 levels "MULTIPOLYGON (((-98.94723077 19.2243450299991, -98.94731309 19.2240347799991, -98.9472780199999 19.224024909999"| __truncated__,..: 19289 29341 16999 NA 10212 5487 36591 29283 37094 15273 ...

Se puede observar que las columnas de fecha y hora son de tipo factor, pero como se desea realizar análisis temporales es conveniente que se encuentren en formato date.

llamadas911 <- llamadas911 %>%
  mutate(fecha=ymd(fecha_cierre)) %>%
  mutate(hora=hms(hora_cierre)) %>%
  mutate(hora2=hour(hora))

Primero vamos a realizar un análisis temporal identificando las fechas con más llamadas al 911 durante 2020

ggplot(llamadas911 %>%
    group_by(fecha) %>%
    summarise(cantidad=n())) +
  geom_line(aes(x=fecha, y=cantidad), color="darkred", size=0.5) +
  labs(title = "Llamadas al 911 según fecha",
       subtitle = "Ciudad de México, 2020",
       caption = "Fuente: C5 Ciudad de México",
       line = "Llamadas",
       x = "Fecha", 
       y = "Total de llamadas") +
  theme_bw() +
  theme (plot.title = element_text(family = "sans",
                                   size = rel(1), 
                                   vjust = 2, 
                                   face = "bold.italic", 
                                   color = "black", 
                                   lineheight = 1.5), 
          plot.subtitle = element_text(family = "sans",
                                      size = rel(0.8),
                                      vjust = 2, 
                                      face = "italic", 
                                      color = "gray40", 
                                      lineheight = 1.5),
          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="gray60", size=rel(0.75)), 
        axis.title.y = element_text(face="bold", vjust=1.5, colour="gray60", angle= 90, size=rel(0.75)),
        axis.text.x = element_text(face="italic", colour="gray60", size=rel(0.65)),
        axis.text.y = element_text(face="italic", colour="gray60", size=rel(0.65)),
        legend.title = element_text(face = "bold", colour="gray60", size=rel(0.75)),
        legend.text = element_text(face="italic", colour="gray60", size=rel(0.6)))

Dada la gráfica anterior, podemos comentar dos cosas interesantes, primero, que el momento de comenzar con las medidas de sana distancia, alrededor del mes de abril de 2020 comenzaron a bajar los reportes de las llamadas al 911 y que un segundo pico en el número de llamadas ocurió alrededor de septiembre, fecha de la independencia de México.

Ahora, se realizará una gráfica de las llamadas al número de emergencias según la hora del día para ver si existe algún patrón interesante.

ggplot(llamadas911 %>%
    group_by(hora2) %>%
    summarise(cantidad=n())) +
  geom_line(aes(x=hora2, y=cantidad), color="darkblue", size=0.5) +
  labs(title = "Llamadas al 911 según hora del día",
       subtitle = "Ciudad de México, 2020",
       caption = "Fuente: C5 Ciudad de México",
       line = "Llamadas",
       x = "Hora", 
       y = "Total de llamadas") +
  theme_bw() +
  theme (plot.title = element_text(family = "sans",
                                   size = rel(1), 
                                   vjust = 2, 
                                   face = "bold.italic", 
                                   color = "black", 
                                   lineheight = 1.5), 
          plot.subtitle = element_text(family = "sans",
                                      size = rel(0.8),
                                      vjust = 2, 
                                      face = "italic", 
                                      color = "gray40", 
                                      lineheight = 1.5),
          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="gray60", size=rel(0.75)), 
        axis.title.y = element_text(face="bold", vjust=1.5, colour="gray60", angle= 90, size=rel(0.75)),
        axis.text.x = element_text(face="italic", colour="gray60", size=rel(0.65)),
        axis.text.y = element_text(face="italic", colour="gray60", size=rel(0.65)),
        legend.title = element_text(face = "bold", colour="gray60", size=rel(0.75)),
        legend.text = element_text(face="italic", colour="gray60", size=rel(0.6)))

En la gráfica anterior puede apreciarse claramente que la hora del día con menor cantidad de llamadas al 911 en la ciudad de México durante 2020 fueron las 6:00 horas, que alrededor de las 13:00 horas se presenta el primer pico, pero que el número de llamadas continúa elevándose durante la tarde hasta llegar a su punto máximo a las 21:00 horas ya que durante la madrugada el número de llamadas es descendente.

Aunque lo anterior fue muy interesante, dada la riqueza de los datos, se puede realizar un análisis de la hora según el tipo de disturbio reportado. Para este ejemplo se seleccionarán tres tipos de disturbios: “Disturbio-Arrancones”, “Robo-Automovilista” y “Servicios-Apoyo Vial Embotellamiento”.

disturbios <- filter(llamadas911, incidente_c4 %in% c( "Disturbio-Arrancones", "Robo-Automovilista", "Servicios-Apoyo Vial Embotellamiento"))

Y se grafican las horas de los reportes de dichos disturbios para identificar patrones temporales

ggplot(disturbios %>%
         group_by(hora2, incidente_c4) %>%
         summarise(cantidad = n())) + 
    geom_line(aes(x = hora2, y= cantidad, color=incidente_c4, group = incidente_c4), size=1) +
  scale_color_manual(name="Incidente",values=c("Darkred", "Darkblue", "Darkgreen")) +
    labs(title = "Llamadas al 911. Distintos disturbios",
       subtitle = "Según hora del día. Ciudad de México, 2020",
       caption = "Fuente: C5 Ciudad de México",
       line = "Disturbio",
       x = "Hora del día", 
       y = "Total de llamadas") +
  theme_bw() +
  theme (plot.title = element_text(family = "sans",
                                   size = rel(1), 
                                   vjust = 2, 
                                   face = "bold.italic", 
                                   color = "black", 
                                   lineheight = 1.5), 
          plot.subtitle = element_text(family = "sans",
                                      size = rel(0.8),
                                      vjust = 2, 
                                      face = "italic", 
                                      color = "gray40", 
                                      lineheight = 1.5),
          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="gray60", size=rel(0.75)), 
        axis.title.y = element_text(face="bold", vjust=1.5, colour="gray60", angle= 90, size=rel(0.75)),
        axis.text.x = element_text(face="italic", colour="gray60", size=rel(0.65)),
        axis.text.y = element_text(face="italic", colour="gray60", size=rel(0.65)),
        legend.title = element_text(face = "bold", colour="gray60", size=rel(0.75)),
        legend.text = element_text(face="italic", colour="gray60", size=rel(0.6)))
## `summarise()` has grouped output by 'hora2'. You can override using the `.groups` argument.

En la gráfica anterior se observan tres patrones temporales distintos según la hora del reporte. Es importante notar que los arrancones son reportados principalmente durante la noche y madrugada pues presentan su punto más alto a las 0 horas. Por su parte, el robo a automovilistas presenta su pico a las 20 horas y el apoyo vial por embotellamiento presenta tres picos interesantes: a las 8:00 horas (cuando es la entrada de las escuelas de nivel básico), a las 15:00 horas (la hora típica de la comida) y entre 19: 00 y 20:00 horas cuando muchos salen de sus lugares de trabajo.

Ahora analizaremos espacialmente un disturbio, pero primero se busca saber cuál es el tipo de reporte con mayor número de llamadas.

incidente <- llamadas911 %>%
         group_by(incidente_c4) %>%
         summarise(cantidad = n()) %>%
         arrange (desc(cantidad)) %>% 
         head(20)

Se puede apreciar que por el número de llamadas al 911 durante 2020 en la ciudad de México, el tipo de disturbio con mayor número de reportes fue “Disturbio-Escándalo” por lo que se realizará un mapa de bins y de calor para identificar su disribución espacial.

Primero generamos una nueva variable sólo con los datos de interés

escandalo <- filter(llamadas911, incidente_c4 == "Disturbio-Escándalo")

Después creamos una caja con las coordenadas extremas

bbox <- make_bbox(escandalo$longitud_centroide, escandalo$latitud_centroide)

“llamamos” un mapa de la página steanmap

mapa_base <- get_stamenmap(bbox = bbox,
                           maptype = "terrain-background",
                           zoom = 11)
## Source : http://tile.stamen.com/terrain-background/11/458/910.png
## Source : http://tile.stamen.com/terrain-background/11/459/910.png
## Source : http://tile.stamen.com/terrain-background/11/460/910.png
## Source : http://tile.stamen.com/terrain-background/11/461/910.png
## Source : http://tile.stamen.com/terrain-background/11/458/911.png
## Source : http://tile.stamen.com/terrain-background/11/459/911.png
## Source : http://tile.stamen.com/terrain-background/11/460/911.png
## Source : http://tile.stamen.com/terrain-background/11/461/911.png
## Source : http://tile.stamen.com/terrain-background/11/458/912.png
## Source : http://tile.stamen.com/terrain-background/11/459/912.png
## Source : http://tile.stamen.com/terrain-background/11/460/912.png
## Source : http://tile.stamen.com/terrain-background/11/461/912.png
## Source : http://tile.stamen.com/terrain-background/11/458/913.png
## Source : http://tile.stamen.com/terrain-background/11/459/913.png
## Source : http://tile.stamen.com/terrain-background/11/460/913.png
## Source : http://tile.stamen.com/terrain-background/11/461/913.png

Y se diseña un mapa de bins

ggmap(mapa_base) +
  geom_bin2d(data = escandalo, aes(x = longitud_centroide, y = latitud_centroide), bins = 100, alpha=0.9)+
  scale_fill_viridis_c(option = "inferno", direction=-1) +
  labs(title = "Llamadas al 911 por escándalo",
       subtitle = "Ciudad de México, 2020",
       caption = "Fuente: C5 Ciudad de México",
       fill = "Conteo") +
  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), 
          plot.subtitle = element_text(family = "sans",
                                      size = rel(0.8),
                                      vjust = 2, 
                                      face = "italic", 
                                      color = "gray40", 
                                      lineheight = 1.5),
          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="gray60", size=rel(0.75)), 
        axis.title.y = element_text(face="bold", vjust=1.5, colour="gray60", size=rel(0.75)),
        axis.text.x = element_text(face="italic", colour="gray60", size=rel(0.65)),
        axis.text.y = element_text(face="italic", colour="gray60", size=rel(0.65)),
        legend.title = element_text(face = "bold", colour="gray60", size=rel(0.75)),
        legend.text = element_text(face="italic", colour="gray60", size=rel(0.6)))

Según el mapa de bins, la mayor concentración de llamadas al 911 por escándalo ocurrió en el centro y en el noreste de la ciudad. Pero ahora se va a comparar dicha información con un mapa de calor.

ggmap(mapa_base) +
  stat_density_2d(data = escandalo, 
                  aes(x = longitud_centroide, y = latitud_centroide,
                      fill = stat(level)), alpha = 0.9, geom = "polygon") +
  labs(title = "Llamadas al 911 por escándalos",
       subtitle = "Ciudad de México, 2020",
       caption = "Fuente: C5 Ciudad de México",
       fill = "Conteo",
       x = "Longitud", 
       y = "Latitud") +
  theme_void()+
  scale_fill_distiller(palette = "Spectral") +
  theme (plot.title = element_text(family = "sans",
                                   size = rel(1), 
                                   vjust = 2, 
                                   face = "bold.italic", 
                                   color = "black", 
                                   lineheight = 1.5), 
          plot.subtitle = element_text(family = "sans",
                                      size = rel(0.8),
                                      vjust = 2, 
                                      face = "italic", 
                                      color = "gray40", 
                                      lineheight = 1.5),
          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="gray60", size=rel(0.75)), 
        axis.title.y = element_text(face="bold", vjust=1.5, colour="gray60", size=rel(0.75)),
        axis.text.x = element_text(face="italic", colour="gray60", size=rel(0.65)),
        axis.text.y = element_text(face="italic", colour="gray60", size=rel(0.65)),
        legend.title = element_text(face = "bold", colour="gray60", size=rel(0.75)),
        legend.text = element_text(face="italic", colour="gray60", size=rel(0.6)))

Con este mapa es posible confirmar que la zona norte y centro-norte de la ciudad son aquellas con el mayor número de reportes por escándalo en la ciudad de México durante 2020.

Finalmente, se realizará un análisis del disturbio por escándalo a través de los meses del año y de los días de la semana.

Es necesario convertir los meses en factores porque de lo contrario, los meses se apreciarán en orden alfabético y no en el orden temporal

escandalo$mes_cierre = factor(escandalo$mes_cierre,                                       levels=c('Enero','Febrero','Marzo',                                 'Abril','Mayo','Junio','Julio','Agosto',
                      'Septiembre','Octubre','Noviembre',
                      'Diciembre'))

Y ahora es posible realizar un análisis de los escándalos resportados en la ciudad de México en las llamadas al 911 durante 2020

ggmap(mapa_base) +
    geom_bin2d(data = escandalo, 
               aes(x = longitud_centroide, y = latitud_centroide), bins = 70, alpha=0.9) +
  scale_fill_viridis_c(option= "magma", direction=-1)+
  facet_wrap(~mes_cierre)+
  labs(title = "Llamadas al 911 por escándalo según mes",
       subtitle = "Ciudad de México, 2020",
       caption = "Fuente: C5 Ciudad de México",
       fill = "Conteo",
       x = "Longitud", 
       y = "Latitud") +
  theme (plot.title = element_text(family = "sans",
                                   size = rel(1), 
                                   vjust = 2, 
                                   face = "bold.italic", 
                                   color = "black", 
                                   lineheight = 1.5), 
          plot.subtitle = element_text(family = "sans",
                                      size = rel(0.8),
                                      vjust = 2, 
                                      face = "italic", 
                                      color = "gray40", 
                                      lineheight = 1.5),
          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="gray60", size=rel(0.75)), 
        axis.title.y = element_text(face="bold", vjust=1.5, colour="gray60", angle= 90, size=rel(0.75)),
        axis.text.x = element_text(face="italic", colour="gray60", angle= 60, size=rel(0.65)),
        axis.text.y = element_text(face="italic", colour="gray60", size=rel(0.65)),
        legend.title = element_text(face = "bold", colour="gray60", size=rel(0.75)),
        legend.text = element_text(face="italic", colour="gray60", size=rel(0.6)))

Es interesante notar que fue en abril cuando creció el número de reportes por escándalo en las llamadas al 911 de la ciudad de México durante 2020, tal vez como consecuencia de las recomendaciones de sana distancia implementadas por el gobierno, es decir, probablemente antes la gente no se preocupaba por reuniones de personas como una vez comenzada la pandemia. El mes de diciembre no aparece porque la base de datos tiene corte en ese mes.

Finalmente, se realizará este mismo análisis por día de la semana para identificar patrones espacio-temporales de los escándalos en la ciudad de México durante 2020 a partir de las llamadas al número de emergencia 911.

Para ello se crea la etiqueta del día de la semana a partir de la columna de la fecha de la llamada.

escandalo <- mutate(escandalo, dia = wday(fecha, label= TRUE, abbr = FALSE))

Y se realizan una serie de mapas según el día de la semana

ggmap(mapa_base) +
    stat_density_2d(data = escandalo, 
                  aes(x = longitud_centroide, y = latitud_centroide,
                      fill = stat(level)), alpha = 0.9, geom = "polygon") +
  facet_wrap(~dia) +
  labs(title = "Llamadas al 911 por escándalo",
       subtitle = "Según dia de la semana. Ciudad de México, 2020",
       caption = "Fuente: C5 Ciudad de México",
       fill = "Conteo",
       x = "Longitud", 
       y = "Latitud") +
  theme_void()+
  scale_fill_distiller(palette = "Spectral") +
  theme (plot.title = element_text(family = "sans",
                                   size = rel(1), 
                                   vjust = 2, 
                                   face = "bold.italic", 
                                   color = "black", 
                                   lineheight = 1.5), 
          plot.subtitle = element_text(family = "sans",
                                      size = rel(0.8),
                                      vjust = 2, 
                                      face = "italic", 
                                      color = "gray40", 
                                      lineheight = 1.5),
          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="gray60", size=rel(0.75)), 
        axis.title.y = element_text(face="bold", vjust=1.5, colour="gray60", angle= 90, size=rel(0.75)),
        axis.text.x = element_text(face="italic", colour="gray60", angle= 60, size=rel(0.65)),
        axis.text.y = element_text(face="italic", colour="gray60", size=rel(0.65)),
        legend.title = element_text(face = "bold", colour="gray60", size=rel(0.75)),
        legend.text = element_text(face="italic", colour="gray60", size=rel(0.6)))

Es interesante identificar el comportamiento temporal de los escándalos en la ciudad de México porque se esperaría que el mayor número de llamadas por escándalos ocurriera en fin de semana, sin embargo, según los mapas, se puede apreciar que el mayor número de reportes ocurrió el día martes, probablemente porque es un día laboral y se espera descansar para continuar con la jornada al día siguiente.

Y con esto terminamos el presente ejercicio. La base de datos tiene un potencial enorme para analizar, pero creo que por el momento fue suficiente.