TRABAJO PRACTICO N°4

CIENCIA DE DATOS PARA CIUDADES II: Analizando datos espaciotemporales

Snyders, Federico / Vargas, Juan

library(tidyverse)
## -- Attaching packages ---------------------------------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.0     v purrr   0.3.3
## v tibble  2.1.3     v dplyr   0.8.5
## v tidyr   1.0.2     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.5.0
## -- Conflicts ------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(ggmap)
## 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(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:dplyr':
## 
##     intersect, setdiff, union
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union

#Continuamos trabajando con los datos de la ciudad de Boston

#Descargamos el dataset de crímenes e incidentes en la ciudad de Boston desde el año 2015 hasta los meses cursados del año 2020. Para este trabajo se analizar los crímenes cometidos en el curso del año 2020 con el fin de contrastar la situación generada por la pandemia del COVID-19.

CRIMENES_BOSTON <- read.csv("~/JUAN/POSGRADOS/MAESTRIA EN ECONOMIA URBANA/2020/CIENCIA DE DATOS PARA CIUDADES II/CLASE 4/TP 4/CDC2_TP4/tmpprt4ydrl.csv")

#Filtramos loo delitos y incidentes desde enero hasta la primer quincena de mayo 2020.

CRIMENES_BOSTON <- CRIMENES_BOSTON %>% 
  filter(YEAR==2020)
summary(CRIMENES_BOSTON)
##   INCIDENT_NUMBER   OFFENSE_CODE                         OFFENSE_CODE_GROUP
##  202000255:    2   Min.   : 111                                   :31028   
##  202000310:    2   1st Qu.:1102   Aggravated Assault              :    0   
##  202000531:    2   Median :3006   Aircraft                        :    0   
##  202000608:    2   Mean   :2378   Arson                           :    0   
##  202000623:    2   3rd Qu.:3207   Assembly or Gathering Violations:    0   
##  202000712:    2   Max.   :3831   Auto Theft                      :    0   
##  (Other)  :31016                  (Other)                         :    0   
##                             OFFENSE_DESCRIPTION    DISTRICT    REPORTING_AREA 
##  VERBAL DISPUTE                       : 2988    B2     :5031   Min.   :  1.0  
##  INVESTIGATE PERSON                   : 2931    C11    :4380   1st Qu.:200.0  
##  ASSAULT - SIMPLE                     : 1931    B3     :3722   Median :355.0  
##  SICK ASSIST                          : 1542    D4     :3634   Mean   :392.2  
##  M/V - LEAVING SCENE - PROPERTY DAMAGE: 1306    A1     :2827   3rd Qu.:538.0  
##  VANDALISM                            : 1288    D14    :2063   Max.   :962.0  
##  (Other)                              :19042    (Other):9371   NA's   :2679   
##  SHOOTING             OCCURRED_ON_DATE      YEAR          MONTH     
##   :    0   2020-01-03 00:00:00:   20   Min.   :2020   Min.   :1.00  
##  0:30734   2020-01-18 00:00:00:   19   1st Qu.:2020   1st Qu.:1.00  
##  1:  294   2020-01-01 00:00:00:   18   Median :2020   Median :3.00  
##  Y:    0   2020-01-06 00:00:00:   17   Mean   :2020   Mean   :2.63  
##            2020-01-27 00:00:00:   17   3rd Qu.:2020   3rd Qu.:4.00  
##            2020-02-01 00:00:00:   17   Max.   :2020   Max.   :5.00  
##            (Other)            :30920                                
##     DAY_OF_WEEK        HOUR          UCR_PART                STREET     
##  Friday   :4847   Min.   : 0             :31028   WASHINGTON ST : 2880  
##  Monday   :4366   1st Qu.: 9   Other     :    0                 : 2419  
##  Saturday :4319   Median :14   Part One  :    0   HARRISON AVE  : 1115  
##  Sunday   :3976   Mean   :13   Part Three:    0   BLUE HILL AVE : 1009  
##  Thursday :4432   3rd Qu.:18   Part Two  :    0   GIBSON ST     : 1001  
##  Tuesday  :4423   Max.   :23                      NEW SUDBURY ST:  754  
##  Wednesday:4665                                   (Other)       :21850  
##       Lat             Long                               Location    
##  Min.   :42.23   Min.   :-71.24   (0.00000000, 0.00000000)   :26521  
##  1st Qu.:42.30   1st Qu.:-71.10   (42.32866200, -71.08563400):  170  
##  Median :42.33   Median :-71.08   (42.29755500, -71.05970900):  117  
##  Mean   :42.32   Mean   :-71.08   (42.33954100, -71.06940800):  112  
##  3rd Qu.:42.35   3rd Qu.:-71.06   (42.36183800, -71.05976400):   96  
##  Max.   :42.45   Max.   :-71.00   (42.28482500, -71.09137300):   89  
##  NA's   :26521   NA's   :26521    (Other)                    : 3923

#Observamos que el incidente más cometido es la disputa verbal, el día jueves es el día de mayor cantidad de observaciones, la calle con más observaciones es la calle WASHINGTON y que la hora más habitual para los crímenes e incidentes es entre las 13.00 y las 18.00

#Convertimos fecha (date)

CRIMENES_BOSTON <- CRIMENES_BOSTON %>% mutate(OCCURRED_ON_DATE = ymd_hms(OCCURRED_ON_DATE))

#Mostramos los registros para el año 2020 y observamos que el MES en el que mas delitos hubo fue ENERO

CRIMENES_BOSTON %>% 
    filter(year(OCCURRED_ON_DATE) == 2020) %>% 
    ggplot() +
        geom_bar(aes(x = month(OCCURRED_ON_DATE, label = TRUE)))+
    labs(title = "Delitos en la ciudad de BOSTON",
         subtitle = "año 2020",
         fill = "Cantidad",
         caption= "Fuente: https://data.boston.gov/dataset", y="Cantidad",
         x="MES")

#Analizamos en profundidamos los delitos mas cometidos.

CRIMENES_BOSTON %>% 
    count(OFFENSE_DESCRIPTION) %>% 
    top_n(5) %>% 
    arrange(desc(n))
## Selecting by n
## # A tibble: 5 x 2
##   OFFENSE_DESCRIPTION                       n
##   <fct>                                 <int>
## 1 VERBAL DISPUTE                         2988
## 2 INVESTIGATE PERSON                     2931
## 3 ASSAULT - SIMPLE                       1931
## 4 SICK ASSIST                            1542
## 5 M/V - LEAVING SCENE - PROPERTY DAMAGE  1306

#Guardamos el top 5 de delitos

CRIMENES_BOSTON_FRECUENTES <- CRIMENES_BOSTON %>% 
    count(OFFENSE_DESCRIPTION) %>% 
    top_n(5) %>% 
    pull(OFFENSE_DESCRIPTION)
## Selecting by n

#Graficamos la información de los 5 delitos mas cometidos.

CRIMENES_BOSTON%>% 
    filter(year(OCCURRED_ON_DATE) == 2020,
           OFFENSE_DESCRIPTION %in% CRIMENES_BOSTON_FRECUENTES) %>% 
    ggplot() +
        geom_bar(aes(x = month(OCCURRED_ON_DATE, label = TRUE), fill = OFFENSE_DESCRIPTION))+
  labs(title = "BOSTON: delitos año 2020",
         subtitle = "Cinco delitos mas cometidos",
         fill = "Cantidad",
         caption= "Fuente: https://data.boston.gov/dataset", y="Cantidad",
         x="MES")

CRIMENES_BOSTON %>% 
  filter(year(OCCURRED_ON_DATE) == 2020,
         OFFENSE_DESCRIPTION %in% CRIMENES_BOSTON_FRECUENTES) %>% 
ggplot() +
        geom_bar(aes(x = month(OCCURRED_ON_DATE, label = TRUE), fill =OFFENSE_DESCRIPTION), position = "dodge")+
  labs(title = "BOSTON: delitos año 2020",
         subtitle = "Cinco delitos mas cometidos",
         fill = "Cantidad",
         caption= "Fuente: https://data.boston.gov/dataset", y="Cantidad",
         x="MES")

#Mostramos la información de los delitos cometidos por mes para el año 2020, en un grafico de lineas

conteo <-  CRIMENES_BOSTON %>% 
    filter(year(OCCURRED_ON_DATE) == 2020,
           OFFENSE_DESCRIPTION %in% CRIMENES_BOSTON_FRECUENTES) %>% 
    count(OFFENSE_DESCRIPTION, mes = month(OCCURRED_ON_DATE, label = TRUE))

ggplot(conteo) +
    geom_line(aes(x = mes, y = n, group = OFFENSE_DESCRIPTION, color = OFFENSE_DESCRIPTION))+
  labs(title = "BOSTON: delitos año 2020",
         subtitle = "Cinco delitos mas cometidos",
         fill = "Cantidad",
         caption= "Fuente: https://data.boston.gov/dataset", y="Cantidad",
         x="MES")

#Se observa una caida a partir del mes de frebero, seguramente relacionado con la pandemia ocacionada por el COVID-19

#Mostramos los delitos cometidos por dia de la semana para el año 2020

conteo2 <-  CRIMENES_BOSTON %>% 
    filter(year(OCCURRED_ON_DATE) == 2020,
           OFFENSE_DESCRIPTION %in% CRIMENES_BOSTON_FRECUENTES) %>% 
    count(OFFENSE_DESCRIPTION, diasemana = wday(OCCURRED_ON_DATE, label = TRUE))
   

ggplot(conteo2) +
    geom_line(aes(x = diasemana, y = n, group = OFFENSE_DESCRIPTION, color = OFFENSE_DESCRIPTION))+ 
  labs(title = "BOSTON: delitos año 2020",
         subtitle = "Delitos por dia de semana",
         fill = "Cantidad",
         caption= "Fuente: https://data.boston.gov/dataset", y="Cantidad",
         x="DIA")

#Mostramos la información usando porcentajes.

conteo2 <-  conteo2  %>% 
    group_by(OFFENSE_DESCRIPTION) %>% 
    mutate(pct = n / sum(n) * 100)

ggplot(conteo2) +
    geom_line(aes(x = diasemana, y = pct, group = OFFENSE_DESCRIPTION, color = OFFENSE_DESCRIPTION))+
  expand_limits(y = 0)+ 
  labs(title = "BOSTON: delitos año 2020",
         subtitle = "Delitos por dia de semana",
         fill = "Cantidad",
         caption= "Fuente: https://data.boston.gov/dataset", y="Cantidad",
         x="DIA")

#Observamos que los miércoles, jueves y viernes se producen picos de los delitos e incidencia de mayor frecuencia.

#En los siguientes mapas mostramos la información georreferenciada de los delitos cometidos en BOSTON.

coordenadas <- function(campo_coordenadas) {
    extraer_coordenadas <- function(lista_coords) {
        data_frame(lonitude = lista_coords[1],
                   latitude = lista_coords[2])
    }
    
    map_df(campo_coordenadas, extraer_coordenadas)
}
CRIMENES_BOSTON <- CRIMENES_BOSTON %>% 
    filter(!is.na(Long), !is.na(Lat))
bbox <- make_bbox(CRIMENES_BOSTON$Long, CRIMENES_BOSTON$Lat)

MAPA_BASE <- get_stamenmap(bbox = bbox, maptype = "toner-lite", zoom = 10)
## Source : http://tile.stamen.com/toner-lite/10/309/378.png
## Source : http://tile.stamen.com/toner-lite/10/310/378.png
## Source : http://tile.stamen.com/toner-lite/10/309/379.png
## Source : http://tile.stamen.com/toner-lite/10/310/379.png
ggmap(MAPA_BASE)

#El mapa de densidad muestra la concentracion de crimenes cometidos durante el transcurso del año 2020 en la ciudad de Boston. Se observa una alta concentración de incidentes en la mancha urbana

ggmap(MAPA_BASE) +
    geom_bin2d(data = CRIMENES_BOSTON, aes(x = Long, y = Lat), bins = 100) +
    scale_fill_viridis_c()+
     labs(title = "Densidad de crimenes",
         subtitle = "BOSTON 2020",
         x = "Longitud",
         y = "Latitud",
         fill = "Cantidad",
         caption = "FUENTE: https://data.boston.gov/dataset")

#El mapa muestra las distribuciones espaciales para los delitos cometidos en Boston para el transcurso del año 2020. Se observa recurrencia en la zona NE de la ciudad.

ggmap(MAPA_BASE) +
    geom_density2d(data = CRIMENES_BOSTON, aes(x = Long, y = Lat, color = stat(level))) +
    scale_color_viridis_c()+
     labs(title = "Distribucion espacial de crimenes",
         subtitle = "BOSTON 2020",
         x = "Longitud",
         y = "Latitud",
         fill = "Cantidad",
         caption = "FUENTE: https://data.boston.gov/dataset") 

#Distrubución espacial de los 5 crimenes mas frecuentes en la ciudad de Boston para el curso del año 2020. Las observacaiones se distribuyen de manera uniforme.

ggmap(MAPA_BASE) +
    geom_point(data = filter(CRIMENES_BOSTON, OFFENSE_DESCRIPTION %in% CRIMENES_BOSTON_FRECUENTES), 
               aes(x = Long, y = Lat, color = OFFENSE_DESCRIPTION),
               size = 1, alpha = 0.5) +
    guides(color = guide_legend(override.aes = list(size=3, alpha = 1))) +
    scale_color_brewer(palette = "Set1")+
     labs(title = "Distribucion de crimenes ",
         subtitle = "Boston Año 2020",
         x = "Longitud",
         y = "Latitud",
         fill = "Cantidad",
         caption = "FUENTE: https://data.boston.gov/dataset")

##MAPAS FACETADOS

#El siguiente mapa facetado muestra la distribución espacial de cada uno de los 5 crímenes más cometidos en la ciudad de Boston para el curso del año 2020. Observamos que los asaltos simples tienen una concentración distribuida entre el centro y el NE de la ciudad, mientras que las disputas verbales se concentran en el centro, las investigaciones de personas tienden a ser en el centro, las asistencias tienden a extenderse desde el centro y los daños a propiedades tienden a tener epicentros distintos.

ggmap(MAPA_BASE) +
    geom_density2d(data = filter(CRIMENES_BOSTON, OFFENSE_DESCRIPTION %in% CRIMENES_BOSTON_FRECUENTES), aes(x = Long, y = Lat, color = stat(level))) +
    scale_color_viridis_c() +
    facet_wrap(~OFFENSE_DESCRIPTION, nrow =2)+
     labs(title = "Distribucion espacial por tipo de crimenes",
         subtitle = "BOSTON 2020",
         x = "Longitud",
         y = "Latitud",
         fill = "Cantidad",
         caption = "FUENTE: https://data.boston.gov/dataset")

#El siguiente mapa facetado muestra la concentración de cada uno de los 5 crimenes mas cometidos en la ciudad de Boston para el curso del año 2020

ggmap(MAPA_BASE) +
  geom_point(data = filter(CRIMENES_BOSTON, OFFENSE_DESCRIPTION %in% CRIMENES_BOSTON_FRECUENTES), 
               aes(x = Long, y = Lat, color = OFFENSE_DESCRIPTION),
               size = 1.5, alpha = 0.5) +
    scale_color_brewer(palette = "Set1") +
    facet_wrap(~OFFENSE_DESCRIPTION, nrow =2)+
       labs(title = "Distribucion por tipo de crimen",
         subtitle = "Boston Año 2020",
         x = "Longitud",
         y = "Latitud",
         fill = "Cantidad",
         caption = "FUENTE: https://data.boston.gov/dataset")

#COMBINANDO TIEMPO Y ESPACIO

#El siguiente mapa muestra la concentración de asaltos simples e investigación de persona durante la semana.

CRIMENES_BOSTON <- CRIMENES_BOSTON %>% 
    mutate(dia_semana = wday(OCCURRED_ON_DATE, label = TRUE)) %>% 
    filter(!is.na(dia_semana))


ggmap(MAPA_BASE) +
    geom_point(data = filter(CRIMENES_BOSTON, 
                             OFFENSE_DESCRIPTION %in% c("ASSAULT - SIMPLE", "INVESTIGATE PERSON")),
               aes(x = Long, y = Lat, color = OFFENSE_DESCRIPTION), alpha = .7, size = 1.5) +
    facet_wrap(~dia_semana, nrow =2)+
       labs(title = "Asalto simple e investigación de personas cometidos por cada día ",
         subtitle = "Boston Año 2020",
         x = "Longitud",
         y = "Latitud",
         fill = "Cantidad",
         caption = "FUENTE: https://data.boston.gov/dataset")

#El siguiente grafico muestra la distribución espacial de los asaltos simples en cada día de la semana. Se aprecia que el delito analizado se tiene una alta concentración los domingos en la zona NE de la ciudad, donde comienza migrar hacia el centro de la ciudad disminuyendo su frecuencia los miércoles, tendiendo a volver a migrar hacia la zona NE donde aumenta nuevamente los días sábados.

ggmap(MAPA_BASE) +
     geom_density2d(data = filter(CRIMENES_BOSTON, OFFENSE_DESCRIPTION == "ASSAULT - SIMPLE"), 
               aes(x = Long, y = Lat, color=stat(level))) +
    scale_color_viridis_c() +
    facet_wrap(~dia_semana, nrow =2)+
     labs(title = "Distribucion espacial asaltos simples por dia",
         subtitle = "BOSTON 2020",
         x = "Longitud",
         y = "Latitud",
         fill = "Cantidad",
         caption = "FUENTE: https://data.boston.gov/dataset")