Análisis de Crimenes en la ciudad de San francisco, implementacion del recurso ggmap

Librerias

library(readr)   # Carga la librería 'readr' para la lectura de datos
library(dplyr)   # Carga la librería 'dplyr' para manipulación de datos
library(lubridate)   # Carga la librería 'lubridate' para trabajar con fechas
library(plotly)   # Carga la librería 'plotly' para gráficos interactivos
library(ggplot2)   # Carga la librería 'ggplot2' para visualizaciones
library(ggmap)   # Carga la librería 'ggmap' para trabajar con mapas
library(plotly)   # Carga la librería 'plotly' nuevamente (duplicado)
library(rgdax)   # Carga la librería 'rgdax' para interactuar con la API de GDAX
library(scales)

Conexión con la API

mykey = "AIzaSyABAXSsDR-f9qby3LK2o6bh0BypFWlKrm4"  # Asigna la clave de API de Google a la variable 'mykey'
register_google(key = mykey)  # Registra la clave de API para utilizar los servicios de Google en ggmap

Selección del mapa de San Francisco (Ubicación de estudio)

myLocation <- "San Francisco"  # Define la ubicación para la que se obtendrá el mapa
myMap <- get_map(location = myLocation, zoom = 12)  # Obtiene el mapa de la ubicación especificada con un nivel de zoom de 12

Lectura de datos

datos <- read.csv("violent_crimes.csv")  # Lee el archivo CSV "violent_crimes.csv" y carga los datos en el dataframe 'datos'

Exploratorio

head(datos)  # Muestra las primeras filas del dataframe 'datos'
##                 Dates       Category                       Descript DayOfWeek
## 1 2015-05-13 23:53:00       WARRANTS                 WARRANT ARREST Wednesday
## 2 2015-05-13 23:53:00 OTHER OFFENSES       TRAFFIC VIOLATION ARREST Wednesday
## 3 2015-05-13 23:33:00 OTHER OFFENSES       TRAFFIC VIOLATION ARREST Wednesday
## 4 2015-05-13 23:30:00  LARCENY/THEFT   GRAND THEFT FROM LOCKED AUTO Wednesday
## 5 2015-05-13 23:30:00  LARCENY/THEFT   GRAND THEFT FROM LOCKED AUTO Wednesday
## 6 2015-05-13 23:30:00  LARCENY/THEFT GRAND THEFT FROM UNLOCKED AUTO Wednesday
##   PdDistrict     Resolution                   Address         X        Y
## 1   NORTHERN ARREST, BOOKED        OAK ST / LAGUNA ST -122.4259 37.77460
## 2   NORTHERN ARREST, BOOKED        OAK ST / LAGUNA ST -122.4259 37.77460
## 3   NORTHERN ARREST, BOOKED VANNESS AV / GREENWICH ST -122.4244 37.80041
## 4   NORTHERN           NONE  1500 Block of LOMBARD ST -122.4270 37.80087
## 5       PARK           NONE 100 Block of BRODERICK ST -122.4387 37.77154
## 6  INGLESIDE           NONE       0 Block of TEDDY AV -122.4033 37.71343
summary(datos)  # Genera un resumen estadístico de los datos en el dataframe 'datos'
##     Dates             Category           Descript          DayOfWeek        
##  Length:878049      Length:878049      Length:878049      Length:878049     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##   PdDistrict         Resolution          Address                X         
##  Length:878049      Length:878049      Length:878049      Min.   :-122.5  
##  Class :character   Class :character   Class :character   1st Qu.:-122.4  
##  Mode  :character   Mode  :character   Mode  :character   Median :-122.4  
##                                                           Mean   :-122.4  
##                                                           3rd Qu.:-122.4  
##                                                           Max.   :-120.5  
##        Y        
##  Min.   :37.71  
##  1st Qu.:37.75  
##  Median :37.78  
##  Mean   :37.77  
##  3rd Qu.:37.78  
##  Max.   :90.00

Filtrado de datos

fecha_inicio <- "2005-01-01 00:00:00"  # Define la fecha de inicio del período de interés
fecha_fin <- "2006-01-01 00:00:00"      # Define la fecha de fin del período de interés

# Filtra los datos para incluir solo registros de crímenes de hurto (Larceny/Theft)
# que ocurrieron entre la fecha de inicio y la fecha de fin especificadas
dFilterDate <- datos %>% 
  filter(Category == "LARCENY/THEFT" & Dates > fecha_inicio & Dates < fecha_fin)

# Filtra los datos para incluir solo registros de crímenes de hurto (Larceny/Theft)
# sin restricción de fechas
dFilterGeneral <- datos %>% 
  filter(Category == "LARCENY/THEFT")

crime_data <- dFilterGeneral

Mapa de Distribucion Crimenes tipo LARCENY/THEFT Enero-2003

ggmap(myMap) +  # Muestra el mapa utilizando ggmap
  geom_point(data = dFilterDate, aes(x = X, y = Y)) +  # Agrega puntos al mapa para cada evento de hurto filtrado por fecha
  labs(title = "Distribución geográfica de eventos de LARCENY/THEFT\n(Enero 2005)")  # Añade un título al gráfico

En esta imagen se evidencia que los crímenes de hurto (Larceny/Theft) son notablemente frecuentes en enero de 2005. Sin embargo, lo más destacado es la concentración de estos incidentes en áreas específicas como Chinatown y Japantown. Este patrón sugiere una alta incidencia del crimen en esos barrios, lo cual será objeto de un análisis más detallado más adelante.

Agrupación de datos cada 5 años

# Añadir una columna YEAR con el año de cada registro
crime_data <- crime_data %>%
  mutate(YEAR = year(ymd_hms(Dates)))

# Agrupar los años en intervalos de 6 años y asignar etiquetas
crime_data <- mutate(crime_data, 
                     SIXYEARS = ifelse(YEAR %in% seq(2003, 2015, by = 6), 
                                       paste(YEAR, "-", YEAR + 5), NA))

Plot por agrupación (por 6 años) de crimenes LARCENY/THEFT ocurridos en san francisco

myMap <- get_map(location = "San Francisco", zoom = 12)

ggmap(myMap) + 
  geom_point(data=crime_data, 
             aes(x = X, y = Y, colour= SIXYEARS, size = Category,   alpha = 0.5))

En esta imagen resulta difícil distinguir con claridad los detalles debido a la baja resolución. Esto dificulta identificar de manera precisa las ocurrencias relacionadas con delitos de LARCENY/THEFT durante los intervalos de dos años

Mapa 2 (Zoom en el norte de San Francisco)

myMap <- get_map(location = "San Francisco", zoom = 13)

ggmap(myMap) + 
  geom_point(data=crime_data, 
             aes(x = X, y = Y, colour= SIXYEARS))

En esta área nos enfocamos principalmente en la parte norte de San Francisco. Es notable cómo las ocurrencias de crímenes del tipo LARCENY/THEFT están significativamente concentradas en esta zona. Esta observación resalta la importancia de entender las dinámicas específicas de cada área urbana para abordar eficazmente los desafíos relacionados con la seguridad y la prevención del delito.

Mapa de Calor

myMap <- get_map(location = "San Francisco", zoom = 14)

ggmap(myMap, extent = "device") + 
  geom_density2d(data = crime_data, aes(x = X, y = Y), size = 0.3) +
  stat_density2d(data = crime_data, 
                 aes(x = X, y = Y, fill = ..level.., alpha = ..level..), 
                 size = 0.01, bins = 16, geom = "polygon") + 
  scale_fill_gradient(low = "green", high = "red") + 
  scale_alpha(range = c(0, 0.3), guide = FALSE)

Esta vista nos permite observar que zonas como Union Square y algunas calles al norte de Showplace Square exhiben un alto volumen de crímenes relacionados con LARCENY/THEFT. Estas áreas se encuentran precisamente en Chinatown, un vecindario que hemos identificado previamente como un punto focal para este tipo de crímenes. Este patrón resalta la importancia de comprender las dinámicas locales al abordar la prevención y el control del crimen en áreas urbanas específicas.

Multiples Mapas de calor por año en torno al tipo de crimen:LARCENY/THEFT

df <- filter(dFilterGeneral, YEAR_ %in% seq(2003, 2015))
# Crear el gráfico de densidad con ggmap y ajustar el tamaño de la imagen
gg <- ggmap(myMap, extent = "device", width = 10, height = 8) + 
  stat_density2d(data = dFilterGeneral, aes(x = X, y = Y, fill = ..level.., alpha = ..level..),
                 size = 0.01, bins = 16, geom = "polygon") +
  scale_fill_gradient(low = "green", high = "red", guide = guide_colorbar(title = "Densidad")) + 
  scale_alpha(range = c(0, 0.3), guide = FALSE) + 
  facet_wrap(~YEAR_, ncol = 4) +
  theme(plot.title = element_text(size = 20)) +
  theme(plot.margin = margin(1, 1, 1, 1, "cm"))

# Mostrar el gráfico
print(gg)

Como se puede apreciar se ha mantenido el patron entorno a los lugares ubicados al noreste de San Francuscico con mayor densidad de crimenes del tipo LARCENY/THEFT a lo largo de los años, auque ciertamente a desminuido lentamente para el 2015.

Conclusiones

  1. Patrones de Crimen: Existe un patrón consistente de alta densidad de crímenes del tipo LARCENY/THEFT en áreas específicas, particularmente al noreste de San Francisco. Este patrón se ha mantenido a lo largo de los años, lo que sugiere una persistencia en la actividad delictiva en estas zonas.

  2. Tendencia Temporal: Aunque el patrón general se ha mantenido, hay evidencia de una disminución gradual en la densidad de crímenes del tipo LARCENY/THEFT hacia el año 2015. Esto podría indicar un éxito en las medidas de prevención del crimen o cambios en la demografía o dinámica social de esas áreas.

  3. Importancia del Análisis Espacial: El uso de técnicas de visualización espacial, como los mapas de calor y los gráficos de densidad, nos ha permitido identificar patrones espaciales significativos en la distribución de los crímenes. Esta información es crucial para informar y orientar estrategias efectivas de aplicación de la ley y prevención del crimen en áreas específicas.

En resumen, estos análisis subrayan la importancia de la comprensión espacial y temporal de los datos delictivos para informar políticas y acciones dirigidas a mejorar la seguridad pública y reducir la incidencia delictiva en áreas urbanas como San Francisco.