Analisis Geografico de Crimenes en Chicago

Introducción

Con el propósito de aplicar los conocimientos adquiridos durante el curso de Inteligencia de Negocios, se plantea llevar a cabo un análisis geográfico de los crímenes en Chicago, Estados Unidos. El conjunto de datos utilizado se obtendrá del repositorio de Kaggle, específicamente del siguiente enlace: https://www.kaggle.com/datasets/currie32/crimes-in-chicago. Para este análisis, se selecciono los registros del año 2014.

El objetivo principal de este análisis es comprender la variación estacional mensual de los crímenes en Chicago. Además, se pretende identificar los delitos más recurrentes en distintas localidades de la ciudad.

Este enfoque permitirá obtener insights valiosos sobre la distribución geográfica de los crímenes a lo largo de un año, así como destacar patrones estacionales que podrían ser de interés para la toma de decisiones en el ámbito de la seguridad pública.


Preguntas de Investigación:

Con el objetivo de abordar el análisis geográfico de los crímenes en Chicago, se formularán dos preguntas investigativas. Estas serán respondidas mediante el empleo de estadísticas descriptivas y análisis detallado:

  1. ¿Cuales son los meses de mayor ocurrencia de crimenes?

Se explorarán tendencias, patrones estacionales y posibles factores influyentes que hayan impactado la frecuencia de crímenes en la ciudad a lo largo de los meses en el año 2014.

  1. ¿Cuáles son los crímenes más recurrentes en las distintas localidades de Chicago?

Se analizarán las estadísticas por área geográfica para identificar patrones específicos y entender la distribución de tipos de crímenes en la ciudad, proporcionando así información valiosa para la formulación de estrategias de seguridad localizadas.



Estadisticas descriptivas



Dataset <- read.csv("C:/Users/yquitian/OneDrive - CasaLuker S.A/Escritorio/Maestria/Chicago_Crimes_2012_to_2017_.csv", sep=";")

# Imprimir las primeras filas del dataset para verificar
head(Dataset)
##         ID Case.Number              Date                Block
## 1 10512552    HZ253503   11/1/14 9:00 AM      004XX E ERIE ST
## 2 10517063    HZ259229 12/10/14 12:00 PM 063XX S KOMENSKY AVE
## 3 10517120    HZ259337    1/1/14 9:00 AM  035XX W LE MOYNE ST
## 4 10518590    HZ259878  2/26/14 10:15 AM       0000X E 9TH ST
## 5 10518648    HZ260491    7/1/14 8:00 AM 092XX S MANISTEE AVE
## 6 10466568    HZ205549   1/1/14 12:00 PM   105XX S WABASH AVE
##          Primary.Type                         Description
## 1  DECEPTIVE PRACTICE               ILLEGAL USE CASH CARD
## 2  DECEPTIVE PRACTICE FINANCIAL IDENTITY THEFT OVER $ 300
## 3  DECEPTIVE PRACTICE FINANCIAL IDENTITY THEFT OVER $ 300
## 4  DECEPTIVE PRACTICE FINANCIAL IDENTITY THEFT OVER $ 300
## 5  DECEPTIVE PRACTICE FINANCIAL IDENTITY THEFT OVER $ 300
## 6 CRIM SEXUAL ASSAULT                           PREDATORY
##             Location.Description Arrest Domestic Beat District Ward
## 1 ATM (AUTOMATIC TELLER MACHINE)  FALSE    FALSE 1834       18   42
## 2                      RESIDENCE  FALSE    FALSE  813        8   13
## 3                      RESIDENCE  FALSE    FALSE 1422       14   26
## 4                                 FALSE    FALSE  123        1    2
## 5                      RESIDENCE  FALSE    FALSE  423        4    7
## 6                      RESIDENCE  FALSE    FALSE  512        5    9
##   Community.Area X.Coordinate Y.Coordinate Year Latitude Longitude Location
## 1              8           NA           NA 2014                            
## 2             65           NA           NA 2014                            
## 3             23           NA           NA 2014                            
## 4             32           NA           NA 2014                            
## 5             48           NA           NA 2014                            
## 6             49           NA           NA 2014
#Contar valores nulos por columna
nulos_por_columna <- colSums(is.na(Dataset))
print(nulos_por_columna)
##                   ID          Case.Number                 Date 
##                    0                    0                    0 
##                Block         Primary.Type          Description 
##                    0                    0                    0 
## Location.Description               Arrest             Domestic 
##                    0                    0                    0 
##                 Beat             District                 Ward 
##                    0                    0                    2 
##       Community.Area         X.Coordinate         Y.Coordinate 
##                    1                 4323                 4323 
##                 Year             Latitude            Longitude 
##                    0                    0                    0 
##             Location 
##                    0
datos_sin_nulos <- na.omit(Dataset)

#Mostrar las primeras filas del nuevo conjunto de datos
head(datos_sin_nulos)
##          ID Case.Number             Date               Block
## 7   9792948    HX441974  9/24/14 7:42 AM 114XX S STEWART AVE
## 11  9746045    HX395851  8/20/14 7:59 AM  046XX S KEDZIE AVE
## 12  9898680    HX548935 12/20/14 3:05 AM 069XX N SHERIDAN RD
## 32  9905633    HX556167 12/27/14 2:21 AM  008XX N WALLER AVE
## 35 10521555    HZ263643 3/28/14 12:00 PM    048XX N LONG AVE
## 46  9514244    HX169413   3/2/14 1:21 AM     023XX E 67TH ST
##              Primary.Type            Description    Location.Description Arrest
## 7       CRIMINAL TRESPASS           TO RESIDENCE RESIDENCE PORCH/HALLWAY  FALSE
## 11                ROBBERY         ARMED: HANDGUN      SMALL RETAIL STORE   TRUE
## 12    CRIM SEXUAL ASSAULT         NON-AGGRAVATED               APARTMENT   TRUE
## 32               BURGLARY ATTEMPT FORCIBLE ENTRY               APARTMENT   TRUE
## 35            SEX OFFENSE  CRIMINAL SEXUAL ABUSE           PARK PROPERTY  FALSE
## 46 PUBLIC PEACE VIOLATION    FALSE POLICE REPORT            CTA BUS STOP   TRUE
##    Domestic Beat District Ward Community.Area X.Coordinate Y.Coordinate Year
## 7     FALSE  522        5   34             49      1175674      1829041 2014
## 11    FALSE  821        8   14             58      1155814      1873754 2014
## 12    FALSE 2431       24   49              1      1166730      1946444 2014
## 32    FALSE 1511       15   29             25      1138206      1905064 2014
## 35    FALSE 1623       16   45             11      1139465      1931490 2014
## 46    FALSE  331        3    5             42      1193024      1860999 2014
##       Latitude    Longitude                      Location
## 7  41,68625271 -87,63251787 (41.686252712, -87.632517867)
## 11 41,80937285 -87,70402497 (41.809372853, -87.704024967)
## 12 42,00861253 -87,66189989 (42.008612529, -87.661899888)
## 32  41,8956277 -87,76785283 (41.895627701, -87.767852831)
## 35 41,96812055 -87,76258263 (41.968120549, -87.762582634)
## 46 41,77354357 -87,56796336 (41.773543569, -87.567963357)
nulos_por_columna2 <- colSums(is.na(datos_sin_nulos))
print(nulos_por_columna2)
##                   ID          Case.Number                 Date 
##                    0                    0                    0 
##                Block         Primary.Type          Description 
##                    0                    0                    0 
## Location.Description               Arrest             Domestic 
##                    0                    0                    0 
##                 Beat             District                 Ward 
##                    0                    0                    0 
##       Community.Area         X.Coordinate         Y.Coordinate 
##                    0                    0                    0 
##                 Year             Latitude            Longitude 
##                    0                    0                    0 
##             Location 
##                    0
Dataset <-datos_sin_nulos

Dataset$Date <- as.POSIXct(Dataset$Date, format = "%m/%d/%y %I:%M %p")

summary(Dataset)
##        ID           Case.Number             Date                       
##  Min.   : 9446748   Length:268897      Min.   :2014-01-01 01:00:00.00  
##  1st Qu.: 9572934   Class :character   1st Qu.:2014-04-11 03:45:00.00  
##  Median : 9686304   Mode  :character   Median :2014-07-04 10:20:00.00  
##  Mean   : 9685239                      Mean   :2014-07-03 17:07:14.47  
##  3rd Qu.: 9799306                      3rd Qu.:2014-09-26 01:50:00.00  
##  Max.   :10521555                      Max.   :2014-12-31 12:59:00.00  
##     Block           Primary.Type       Description        Location.Description
##  Length:268897      Length:268897      Length:268897      Length:268897       
##  Class :character   Class :character   Class :character   Class :character    
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character    
##                                                                               
##                                                                               
##                                                                               
##    Arrest         Domestic            Beat         District          Ward      
##  Mode :logical   Mode :logical   Min.   : 111   Min.   : 1.00   Min.   : 1.00  
##  FALSE:191148    FALSE:229239    1st Qu.: 612   1st Qu.: 6.00   1st Qu.:10.00  
##  TRUE :77749     TRUE :39658     Median :1023   Median :10.00   Median :23.00  
##                                  Mean   :1142   Mean   :11.19   Mean   :22.76  
##                                  3rd Qu.:1651   3rd Qu.:16.00   3rd Qu.:34.00  
##                                  Max.   :2535   Max.   :31.00   Max.   :50.00  
##  Community.Area   X.Coordinate      Y.Coordinate          Year     
##  Min.   : 1.00   Min.   :      0   Min.   :      0   Min.   :2014  
##  1st Qu.:23.00   1st Qu.:1152334   1st Qu.:1858541   1st Qu.:2014  
##  Median :32.00   Median :1165890   Median :1891055   Median :2014  
##  Mean   :37.59   Mean   :1164191   Mean   :1885099   Mean   :2014  
##  3rd Qu.:56.00   3rd Qu.:1176364   3rd Qu.:1908303   3rd Qu.:2014  
##  Max.   :77.00   Max.   :1205119   Max.   :1951499   Max.   :2014  
##    Latitude          Longitude           Location        
##  Length:268897      Length:268897      Length:268897     
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
## 
str(Dataset)
## 'data.frame':    268897 obs. of  19 variables:
##  $ ID                  : int  9792948 9746045 9898680 9905633 10521555 9514244 9712460 9814194 9856640 9723683 ...
##  $ Case.Number         : chr  "HX441974" "HX395851" "HX548935" "HX556167" ...
##  $ Date                : POSIXct, format: "2014-09-24 07:42:00" "2014-08-20 07:59:00" ...
##  $ Block               : chr  "114XX S STEWART AVE" "046XX S KEDZIE AVE" "069XX N SHERIDAN RD" "008XX N WALLER AVE" ...
##  $ Primary.Type        : chr  "CRIMINAL TRESPASS" "ROBBERY" "CRIM SEXUAL ASSAULT" "BURGLARY" ...
##  $ Description         : chr  "TO RESIDENCE" "ARMED: HANDGUN" "NON-AGGRAVATED" "ATTEMPT FORCIBLE ENTRY" ...
##  $ Location.Description: chr  "RESIDENCE PORCH/HALLWAY" "SMALL RETAIL STORE" "APARTMENT" "APARTMENT" ...
##  $ Arrest              : logi  FALSE TRUE TRUE TRUE FALSE TRUE ...
##  $ Domestic            : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ Beat                : int  522 821 2431 1511 1623 331 331 1021 922 623 ...
##  $ District            : int  5 8 24 15 16 3 3 10 9 6 ...
##  $ Ward                : int  34 14 49 29 45 5 5 24 12 6 ...
##  $ Community.Area      : int  49 58 1 25 11 42 43 29 58 69 ...
##  $ X.Coordinate        : int  1175674 1155814 1166730 1138206 1139465 1193024 1193387 1153710 1160166 1177141 ...
##  $ Y.Coordinate        : int  1829041 1873754 1946444 1905064 1931490 1860999 1860848 1893244 1873163 1852951 ...
##  $ Year                : int  2014 2014 2014 2014 2014 2014 2014 2014 2014 2014 ...
##  $ Latitude            : chr  "41,68625271" "41,80937285" "42,00861253" "41,8956277" ...
##  $ Longitude           : chr  "-87,63251787" "-87,70402497" "-87,66189989" "-87,76785283" ...
##  $ Location            : chr  "(41.686252712, -87.632517867)" "(41.809372853, -87.704024967)" "(42.008612529, -87.661899888)" "(41.895627701, -87.767852831)" ...
##  - attr(*, "na.action")= 'omit' Named int [1:4325] 1 2 3 4 5 6 8 9 10 13 ...
##   ..- attr(*, "names")= chr [1:4325] "1" "2" "3" "4" ...
View(Dataset)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)

# Calcular la frecuencia de Primary Type y organizar por frecuencia ascendente
freq_table <- Dataset %>%
  count(`Primary.Type`, sort = TRUE) %>%
  rename(`Primary.Type` = `Primary.Type`, Frequency = n)

# Crear el gráfico de barras de menor a mayor
ggplot(freq_table, aes(x = reorder(Primary.Type, Frequency), y = Frequency)) +
  geom_bar(stat = "identity", fill = "skyblue") +
  coord_flip() +
  labs(title = "Gráfico I.Cantidad de Crímenes en Chicago (Año: 2014)", x = "Tipo de Crimen", y = "Cantidad")

De acuerdo con los datos suministrados para el año 2014 el total de crimenes cometidos en Chicago fue de 268.897, ademas en el grafico I, se puede evidenciar que en el año 2014 el crimen mas cometido en Chicago es Theft que en español se refiere al robo el cual es el acto de tomar ilegalmente la propiedad de otra persona, ademas crimenes como BATTERY (Agresión Fisica), Criminal Damage (Daño Criminal), Narcotics (Narcotics) y OTHER OFFENSE (Otro delitos) son los crimenes con mayor frecuencia en Chicago.


library(dplyr)
library(ggplot2)

# Suponiendo que tienes una columna "Arrest" en tu conjunto de datos Dataset

# Calcular la frecuencia de arrestos y no arrestos
arrest_freq <- Dataset %>%
  count(Arrest)

# Calcular los porcentajes
arrest_freq <- arrest_freq %>%
  mutate(Percentage = n / sum(n) * 100)

# Crear el gráfico de torta con porcentajes
ggplot(arrest_freq, aes(x = "", y = Percentage, fill = factor(Arrest))) +
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar("y") +
  labs(title = "Grafico II. Proporción de Arrestos en Chicago",
       fill = "Arresto",
       x = NULL,
       y = NULL) +
  theme_minimal() +
  scale_fill_manual(values = c("#1f78b4", "#33a02c")) +  # Colores para TRUE y FALSE +
  geom_text(aes(label = sprintf("%.1f%%", Percentage)), position = position_stack(vjust = 0.5))  # Añadir etiquetas de porcentaje


Ahora bien que tan efectiva es la fuerza policial en Chicago, pues segun el grafico II, de los 268.897 casos reportados solo el 28.9% de los casos tuvieron un arresto y el 71.1% no tuvo como resultado un arresto.

Ahora bien cuales son esos crimenes que son mas faciles de arrestar para la policia y cuales no? Para resolver esta pregunta se presentan los siguientes graficos de barras.


library(dplyr)
library(ggplot2)

# Suponiendo que tienes una columna "Primary.Type" y "Arrest" en tu conjunto de datos Dataset

# Filtrar los datos donde Arrest es TRUE
arrested_crimes <- Dataset %>%
  filter(Arrest == TRUE)

# Calcular la frecuencia de cada tipo de crimen con arresto
arrested_crimes_freq <- arrested_crimes %>%
  count(Primary.Type) %>%
  arrange(desc(n))

# Seleccionar los N tipos de crimen con más arrestos
top_n_crimes <- arrested_crimes_freq %>%
  top_n(10, wt = n)  # Cambia 10 por el número deseado de tipos de crimen a mostrar

# Crear el gráfico de barras con orden de derecha a izquierda
ggplot(top_n_crimes, aes(x = reorder(Primary.Type, -n), y = n)) +
  geom_bar(stat = "identity", fill = "#1f78b4") +
  labs(title = "Grafico III. Tipos de crímenes con más arrestos en Chicago",
       x = "Tipo de Crimen",
       y = "Cantidad de Arrestos") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))


Pues bien, de acuerdo al gráfico III, observamos que los crímenes con mayor cantidad de arrestos son NARCÓTICOS (NARCOTICS), AGRESIÓN (BATTERY) y ROBO (THEFT). Por otro lado, los demás tipos de crímenes presentan una tasa de arrestos más baja. Este fenómeno puede asociarse al hecho de que la fuerza policial en Chicago está altamente capacitada para detectar y abordar este tipo de crímenes.

La prioridad de aplicación de la ley en Estados Unidos juega un papel crucial en esta dinámica. Las agencias policiales suelen dar alta prioridad a la lucha contra el tráfico y la distribución de drogas ilegales, dado su impacto significativo en la salud pública y la seguridad. Este enfoque priorizado puede traducirse en una mayor efectividad en la identificación y detención de aquellos involucrados en actividades relacionadas con narcóticos.

Adicionalmente, las actividades vinculadas a los narcóticos pueden ser más visibles o más fáciles de detectar para las fuerzas del orden en comparación con otros tipos de delitos. Esta mayor visibilidad, junto con la capacitación especializada de la policía en este ámbito, podría explicar la diferencia en las tasas de arresto observadas en el análisis del gráfico III.

library(dplyr)
library(ggplot2)

# Suponiendo que tienes una columna "Primary.Type" y "Arrest" en tu conjunto de datos Dataset

# Filtrar los datos donde Arrest es FALSE
non_arrested_crimes <- Dataset %>%
  filter(Arrest == FALSE)

# Calcular la frecuencia de cada tipo de crimen sin arresto
non_arrested_crimes_freq <- non_arrested_crimes %>%
  count(Primary.Type) %>%
  arrange(desc(n))

# Seleccionar los N tipos de crimen con más casos sin arresto
top_n_non_arrested_crimes <- non_arrested_crimes_freq %>%
  top_n(10, wt = n)  # Cambia 10 por el número deseado de tipos de crimen a mostrar

# Crear el gráfico de barras con orden de derecha a izquierda
ggplot(top_n_non_arrested_crimes, aes(x = reorder(Primary.Type, -n), y = n)) +
  geom_bar(stat = "identity", fill = "#33a02c") +
  labs(title = "Grafico IV. Tipos de crímenes con más casos sin arresto en Chicago",
       x = "Tipo de Crimen",
       y = "Cantidad de Casos sin Arresto") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))


En el análisis del gráfico IV, se observa que los crímenes menos propensos a resultar en arrestos por parte de la policía son los robos convencionales, tales como robo (THEFT), agresión (BATTERY) y daño criminal (CRIMINAL DAMAGE). Esta tendencia podría vincularse con diversos factores, entre ellos, la dificultad para identificar a los delincuentes, las prioridades policiales y la propia naturaleza de estos delitos.

En casos de robo, por ejemplo, la rapidez con la que puede ocurrir el acto delictivo y la falta de testigos presenciales pueden dificultar la intervención policial inmediata. Asimismo, en situaciones de agresión y daño criminal, donde la identificación del perpetrador puede ser más compleja y las prioridades policiales podrían centrarse en crímenes más graves, la probabilidad de arresto disminuye.

Este análisis subraya la importancia de considerar no solo la incidencia delictiva, sino también los desafíos inherentes a la aplicación de la ley, proporcionando una perspectiva más completa de los patrones de crímenes y sus implicaciones en la seguridad pública.


library(dplyr)
library(ggplot2)

# Suponiendo que tienes una columna "Location.Description" en tu conjunto de datos Dataset

# Calcular la frecuencia de crímenes por ubicación
location_freq <- Dataset %>%
  count(Location.Description) %>%
  arrange(desc(n))  # Ordenar de mayor a menor frecuencia

# Seleccionar las N ubicaciones con más crímenes para mostrar en el heatmap
top_n_locations <- location_freq %>%
  top_n(10, wt = n)  # Cambia 10 por el número deseado de ubicaciones a mostrar

# Crear el heatmap
ggplot(top_n_locations, aes(x = reorder(Location.Description, -n), y = 1, fill = n)) +
  geom_tile() +
  labs(title = "Grafico V. Distribución de crímenes por ubicación en Chicago",
       x = "Ubicación",
       y = NULL,  # Eliminar etiqueta del eje y
       fill = "Cantidad de Crímenes") +
  scale_fill_gradient(low = "lightblue", high = "darkblue") +  # Colores del heatmap
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))


El análisis del heatmap anterior revela que la mayor concentración de crímenes se registra en ubicaciones como calles, residencias, apartamentos y aceras. Este patrón sugiere una asociación con los crímenes comunes que ocurren en entornos urbanos y puede atribuirse a diversos factores, entre ellos la densidad poblacional en estas áreas.

Es relevante destacar que la presencia de crímenes en calles y aceras podría relacionarse con la actividad social y la interacción entre individuos en espacios públicos. Por otro lado, la alta incidencia en residencias y apartamentos podría estar influenciada por factores como condiciones de iluminación, diseño urbano y características propias de estos entornos.

Este análisis resalta la complejidad de los determinantes que contribuyen a la distribución geográfica de los crímenes y destaca la importancia de considerar no solo factores socioeconómicos, sino también elementos urbanos y de diseño en la comprensión de los patrones delictivos en la ciudad.


Análisis

Ahora bien resulta intersante conocer la incidencia de crímenes en Chicago a lo largo del tiempo, para esto se propone el siguiente grafico.

  1. ¿Cómo ha variado la incidencia de crímenes en Chicago a lo largo del tiempo?


library(dplyr)
library(ggplot2)
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
# Suponiendo que tienes una columna "Date" en tu conjunto de datos Dataset

# Convertir la columna Date a formato de fecha
Dataset$Date <- as.Date(Dataset$Date, format = "%m/%d/%Y")

# Extraer el mes y el año de la columna Date
Dataset$Month <- month(Dataset$Date, label = TRUE)
Dataset$Year <- year(Dataset$Date)

# Calcular la frecuencia de cada mes por año
freq_table <- Dataset %>%
  count(Year, Month)

# Crear el gráfico de líneas conectadas (connected scatter plot)
ggplot(freq_table, aes(x = Month, y = n, group = Year, color = as.factor(Year))) +
  geom_line(aes(group = Year)) +
  geom_point() +
  labs(title = "Grafico VI. Frecuencia de crímenes por mes en Chicago Año:2014",
       x = "Mes",
       y = "Frecuencia",
       color = "Año") +
  scale_x_discrete(labels = month.abb) +
  theme_minimal()


De acuerdo con el análisis del Gráfico VI, que examina la cantidad de crímenes a lo largo de un año fiscal en Chicago, se destaca que el mes con la mayor incidencia de crímenes reportados es julio. Esta tendencia podría vincularse con las condiciones climáticas favorables durante el verano, propiciando una mayor actividad social y tiempo al aire libre. Resulta relevante señalar que los meses más críticos abarcan el período de mayo a agosto, sugiriendo una estacionalidad marcada en la actividad delictiva.

Por otro lado, se observa que los meses con la menor cantidad de crímenes se encuentran al inicio y al final del año, específicamente en enero, noviembre y diciembre. Esta reducción podría asociarse a factores climáticos, ya que en enero, Chicago experimenta inviernos fríos con temperaturas bajas. Las condiciones adversas pueden disminuir la actividad al aire libre y la interacción entre personas, influyendo en las tasas de ciertos tipos de crímenes.

En el caso de noviembre y diciembre, el descenso en las tasas de crimen podría relacionarse con un aumento en la presencia policial y la conciencia pública sobre la seguridad durante las festividades. Además, las personas tienden a pasar más tiempo en casa o con sus familias durante estas fechas, lo que podría contribuir a la disminución de algunos tipos de crímenes. Este análisis subraya la complejidad de los factores que influyen en los patrones de criminalidad y destaca la importancia de considerar múltiples variables para una comprensión más completa.

# Suponiendo que tienes una columna "Date" en tu conjunto de datos Dataset

# Convertir la columna Date a formato de fecha
Dataset$Date <- as.Date(Dataset$Date, format = "%m/%d/%Y")

# Extraer el mes y el año de la columna Date
Dataset$Month <- month(Dataset$Date, label = TRUE)
Dataset$Year <- year(Dataset$Date)

# Filtrar los datos para los tipos de crimen deseados
selected_crimes <- c("THEFT", "BATTERY", "NARCOTICS", "OTHER OFFENSE", "DECEPTIVE PRACTICE", "ASSAULT")
selected_data <- Dataset %>%
  filter(`Primary.Type` %in% selected_crimes)

# Calcular la frecuencia de cada mes por año para los tipos de crimen seleccionados
freq_table <- selected_data %>%
  count(Year, Month, `Primary.Type`)

# Crear el gráfico de líneas conectadas para los tipos de crimen seleccionados
ggplot(freq_table, aes(x = Month, y = n, group = interaction(Year, `Primary.Type`), color = as.factor(Year))) +
  geom_line(aes(group = interaction(Year, `Primary.Type`))) +
  geom_point() +
  labs(title = "VII. Frecuencia de crímenes por mes y año en Chicago",
       x = "Mes",
       y = "Frecuencia",
       color = "Año") +
  scale_x_discrete(labels = month.abb) +
  theme_minimal() +
  facet_wrap(~`Primary.Type`, scales = "free_y", ncol = 3) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))


Resulta intrigante identificar los meses con la mayor cantidad de casos reportados, especialmente al considerar los seis tipos de crímenes más frecuentes. El gráfico VII refleja claramente que el delito de robo (THEFT) alcanza su punto álgido en julio, coincidiendo con la temporada de verano. Por otro lado, los casos de asalto (ASSAULT) y agresión (BATTERY) exhiben picos notables de mayo a octubre, sugiriendo una posible correlación con condiciones climáticas más cálidas y un aumento en las actividades al aire libre durante estos meses.

Sin embargo, la dinámica es diferente para el crimen de práctica engañosa (DECEPTIVE PRACTICE), que presenta sus picos en marzo. Este patrón podría asociarse con eventos específicos o situaciones estacionales distintas. En un análisis general, se destaca que los últimos meses e inicios del año experimentan una disminución en la incidencia de estos seis delitos, fenómeno que parece vinculado a factores climáticos y eventos especiales asociados a la temporada.

Es crucial profundizar en el análisis considerando también factores históricos, geográficos y socioeconómicos para obtener una comprensión más completa de los patrones observados. La exploración de tendencias a lo largo del tiempo y en diferentes contextos puede proporcionar insights valiosos sobre la dinámica de la criminalidad en Chicago.


  1. ¿Cuáles son los crímenes más recurrentes en las distintas localidades de Chicago?


# Ajustar el tamaño de la ventana de visualización
options(repr.plot.width=10, repr.plot.height=6)

# Tu código para crear el mapa de calor aquí
library(ggmap)
## ℹ Google's Terms of Service: <https://mapsplatform.google.com>
##   Stadia Maps' Terms of Service: <https://stadiamaps.com/terms-of-service/>
##   OpenStreetMap's Tile Usage Policy: <https://operations.osmfoundation.org/policies/tiles/>
## ℹ Please cite ggmap if you use it! Use `citation("ggmap")` for details.
library(dplyr)

# Establecer clave de la API de Google Maps
apiKey <- "AIzaSyAuP4WbtmKdVTS_Ep2Kh5uAaPjPGtgtWtU" 
ggmap::register_google(key = apiKey)

# Convertir las columnas de longitud y latitud a formato numérico
Dataset$Longitude <- as.numeric(gsub(",", ".", Dataset$Longitude))
Dataset$Latitude <- as.numeric(gsub(",", ".", Dataset$Latitude))

# Crear un mapa más grande de Chicago (ajustar el valor de zoom según sea necesario)
city <- get_map(location = 'chicago', zoom = 11, source = 'google')
## ℹ <https://maps.googleapis.com/maps/api/staticmap?center=chicago&zoom=11&size=640x640&scale=2&maptype=terrain&language=en-EN&key=xxx>
## ℹ <https://maps.googleapis.com/maps/api/geocode/json?address=chicago&key=xxx>
chiMap <- ggmap(city)

# Crear un mapa de calor
heatMap <- chiMap +
  stat_density_2d(data = Dataset, aes(x = Longitude, y = Latitude, fill = ..level.., alpha = ..level..), geom = "polygon", color = "white") +
  scale_fill_gradient(low = "blue", high = "red") +
  scale_alpha(range = c(0, 0.3), guide = FALSE) +
  labs(title = "Mapa de Calor en Chicago", x = "Longitud", y = "Latitud") +
  theme_minimal()

# Mostrar el mapa de calor
print(heatMap)
## Warning: The dot-dot notation (`..level..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(level)` instead.
## ℹ The deprecated feature was likely used in the ggmap package.
##   Please report the issue at <https://github.com/dkahle/ggmap/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Removed 20573 rows containing non-finite values (`stat_density2d()`).
## Warning: The `guide` argument in `scale_*()` cannot be `FALSE`. This was deprecated in
## ggplot2 3.3.4.
## ℹ Please use "none" instead.
## ℹ The deprecated feature was likely used in the ggmap package.
##   Please report the issue at <https://github.com/dkahle/ggmap/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.


Al observar el mapa anterior, se destacan claramente los puntos calientes donde se reportan más crímenes en la ciudad. Se nota una intensificación del color más oscuro hacia la costa del lago Michigan, indicando una concentración de incidentes. Este fenómeno puede asociarse a la aglomeración de personas atraídas por el turismo y actividades recreativas, ya que esta área suele ser el epicentro comercial de Chicago.

Además, se aprecia una notable intensidad en la zona sureste de Chicago, abarcando áreas como Austin y West Garfield Park. Esta concentración también puede relacionarse con la afluencia de personas en estos lugares, lo que, a su vez, podría contribuir a delitos concretos como BATTERY y THEFT.

Es digno de mención que las zonas que registran menos crímenes se encuentran al sur de Chicago, abarcando áreas como SOUTH SIDE y SOUTH SHORE. Asimismo, la zona norte de la ciudad, especialmente en lugares como Lincoln Park y Rogers Park, muestra una incidencia menor de crímenes. Este patrón podría asociarse a la menor densidad poblacional en estas áreas, contribuyendo a un entorno generalmente más seguro.

library(ggmap)
library(dplyr)
#install.packages("knitr")
library(knitr)
apiKey <- "AIzaSyAuP4WbtmKdVTS_Ep2Kh5uAaPjPGtgtWtU" 
ggmap::register_google(key = apiKey)

map <- qmap(location = 'chicago', zoom = 9, source = 'google')
## ℹ <https://maps.googleapis.com/maps/api/staticmap?center=chicago&zoom=9&size=640x640&scale=2&maptype=terrain&language=en-EN&key=xxx>
## ℹ <https://maps.googleapis.com/maps/api/geocode/json?address=chicago&key=xxx>
Dataset$Longitude <- as.numeric(gsub(",", ".", Dataset$Longitude))
Dataset$Latitude <- as.numeric(gsub(",", ".", Dataset$Latitude))

#Clustering
coords <- Dataset[,c(18,17)]
colnames(coords) <- c("lon","lat")
set.seed(123)
# Kmeans
grupos <- kmeans(coords, 6, iter.max = 100, nstart = 1)
Dataset$cluster <- grupos$cluster

# Agrupar los datos por el número de cluster y el tipo de crimen, contando la frecuencia de cada crimen
top_crimes_by_cluster <- Dataset %>%
  group_by(cluster, Primary.Type) %>%
  summarise(count = n()) %>%
  top_n(3, count) %>%
  arrange(cluster, desc(count))
## `summarise()` has grouped output by 'cluster'. You can override using the
## `.groups` argument.
Dataset<- Dataset %>%
  filter(Longitude >= -87.93432)
#scatter plot
plot <- ggplot(Dataset, aes(Longitude,Latitude))
plot <- plot + geom_point(alpha=0.3, color=Dataset$cluster)

# Convex hulls
cluster1 <- subset(Dataset, Dataset$cluster==1)
cluster2 <- subset(Dataset, Dataset$cluster==2)
cluster3 <- subset(Dataset, Dataset$cluster==3)
cluster4 <- subset(Dataset, Dataset$cluster==4)
cluster5 <- subset(Dataset, Dataset$cluster==5)
cluster6 <- subset(Dataset, Dataset$cluster==6)

# Obtener indices. Funciona solo con datos x,y
indexes1 <- chull(cluster1[,c(18,17)])
indexes2 <- chull(cluster2[,c(18,17)])
indexes3 <- chull(cluster3[,c(18,17)])
indexes4 <- chull(cluster4[,c(18,17)])
indexes5 <- chull(cluster5[,c(18,17)])
indexes6 <- chull(cluster6[,c(18,17)])

# Obtener coordenadas
hullCluster1 <- cluster1[indexes1,]
hullCluster2 <- cluster2[indexes2,]
hullCluster3 <- cluster3[indexes3,]
hullCluster4 <- cluster4[indexes4,]
hullCluster5 <- cluster5[indexes5,]
hullCluster6 <- cluster6[indexes6,]

#scatter plot
plot <- ggplot(Dataset, aes(Longitude,Latitude))
plot <- plot + geom_point(alpha=0.3, color=Dataset$cluster)
plot <- plot + geom_polygon(data=hullCluster1, alpha=.2, fill='darkblue')
plot <- plot + geom_polygon(data=hullCluster2, alpha=.2, fill='aquamarine2')
plot <- plot + geom_polygon(data=hullCluster3, alpha=.2, fill='azure3')
plot <- plot + geom_polygon(data=hullCluster4, alpha=.2, fill= 'brown3')
plot <- plot + geom_polygon(data=hullCluster5, alpha=.2, fill= 'chartreuse3')
plot <- plot + geom_polygon(data=hullCluster6, alpha=.2, fill= 'darkorchid4')

# Suponiendo que ya tienes los clusters generados en Dataset$cluster
centroides <- Dataset %>%
  group_by(cluster) %>%
  summarise(centroid_lon = mean(Longitude), centroid_lat = mean(Latitude))

# Convertir los centroides a un formato de texto para mostrar en el gráfico
centroides$cluster <- as.character(centroides$cluster)
centroides_label <- centroides

View(centroides)
city <- get_map(location = 'chicago', zoom = 10, source = 'google')
## ℹ <https://maps.googleapis.com/maps/api/staticmap?center=chicago&zoom=10&size=640x640&scale=2&maptype=terrain&language=en-EN&key=xxx>
## ℹ <https://maps.googleapis.com/maps/api/geocode/json?address=chicago&key=xxx>
chiMap <- ggmap(city)

# Agregar puntos al mapa
chiMap <- chiMap + 
  geom_point(data = Dataset, aes(x = Longitude, y = Latitude, color = Primary.Type), size = 2) +
  scale_color_discrete(guide = "none")  # Desactivar la leyenda de colores para los puntos

# Agregar polígonos de clusters al mapa
chiMap <- ggmap(city) +
  geom_point(data = Dataset, aes(x = Longitude, y = Latitude, color = Primary.Type), size = 2) +
  geom_polygon(data = hullCluster1, aes(x = Longitude, y = Latitude), color = "darkorange", fill = "darkorange", alpha = 0.2) +
  geom_polygon(data = hullCluster2, aes(x = Longitude, y = Latitude), color = "gold", fill = "gold", alpha = 0.2) +
  geom_polygon(data = hullCluster3, aes(x = Longitude, y = Latitude), color = "darkorchid", fill = "darkorchid", alpha = 0.2) +
  geom_polygon(data = hullCluster4, aes(x = Longitude, y = Latitude), color = "darkcyan", fill = "darkcyan", alpha = 0.2) +
  geom_polygon(data = hullCluster5, aes(x = Longitude, y = Latitude), color = "deeppink", fill = "deeppink", alpha = 0.2) +
  geom_polygon(data = hullCluster6, aes(x = Longitude, y = Latitude), color = "darkgreen", fill = "darkgreen", alpha = 0.2) +
  scale_fill_identity(guide = "none") +  # Desactivar la leyenda de colores para los polígonos
  geom_text(data = centroides_label, aes(x = centroid_lon, y = centroid_lat, label = cluster), size = 5, color = "white") +  # Mostrar números grandes en los centroides
  guides(color = FALSE, fill = FALSE)  # Desactivar las leyendas de color y relleno
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
chiMap  # Mostrar el mapa resultante sin leyenda

# Tu código existente para generar 'top_crimes_by_cluster'

# Formatear la tabla con kable
styled_table <- kable(
  top_crimes_by_cluster,
  format = "html",
  caption = "Top 3 de los Crímenes mas recurrentes",
  table.attr = "style='border-collapse: collapse; width: 100%;'",
  col.names = c("Cluster", "Tipo de Crimen", "Cantidad")
)
styled_table  # Esto imprimirá la tabla en un formato más estilizado
Top 3 de los Crímenes mas recurrentes
Cluster Tipo de Crimen Cantidad
1 THEFT 4115
1 BATTERY 3032
1 CRIMINAL DAMAGE 2189
2 THEFT 10841
2 BATTERY 5336
2 CRIMINAL DAMAGE 4075
3 BATTERY 9265
3 THEFT 9072
3 CRIMINAL DAMAGE 5513
4 NARCOTICS 12782
4 BATTERY 11549
4 THEFT 8477
5 THEFT 16121
5 BATTERY 6001
5 DECEPTIVE PRACTICE 3889
6 BATTERY 13480
6 THEFT 12085
6 CRIMINAL DAMAGE 7012


Al dividir la ciudad de Chicago en 6 áreas basadas en el agrupamiento de crímenes por cluster y sacando el top 3 de estos, se revelan aspectos destacados en cada área:

Zona 1: En esta área, los crímenes principalmente están relacionados con robos, seguidos por agresiones físicas y daños criminales. Esta tendencia sugiere una marcada incidencia de delitos de propiedad y violencia física. Se destaca por ser la zona con menor cantidad de delitos reportados, pero con una prevalencia notable de crímenes relacionados con robos y violencia física. Por ende, se recomienda un enfoque estratégico para la prevención de robos y control de la violencia en esta área en particular.

Zona 2: En esta área, los delitos de agresiones físicas son los más frecuentes, seguidos por los robos, mientras que los actos de vandalismo tienen una menor incidencia. Esta área puede beneficiarse de estrategias orientadas a reducir la violencia y mejorar la vigilancia para mitigar los robos.

Zona 3 (Centro de Chicago): Esta área exhibe una marcada prevalencia de robos, que representan aproximadamente el 64% de los delitos principales, seguidos por agresiones físicas y fraude/estafa. Este patrón indica una elevada actividad comercial y un constante flujo de personas. Se sugiere enfocarse en medidas de seguridad y vigilancia para proteger las zonas comerciales y prevenir delitos financieros

Zona 4: Los robos son predominantes, seguidos por un número menor de agresiones físicas y un índice ligeramente más bajo de vandalismo. Recomendaría considerar un incremento en la presencia policial y en el patrullaje para reducir estos delitos y fortalecer la seguridad ciudadana.

Zona 5: Esta área se destaca por la prevalencia de delitos vinculados a narcóticos y agresiones físicas, con un número inferior de robos. Esta combinación de crímenes sugiere la urgencia de implementar medidas preventivas y de seguridad específicas. Sería crucial enfocarse en estrategias destinadas a combatir el tráfico de drogas y reducir la violencia física para mejorar significativamente la seguridad en esta zona.

Zona 6: Esta área presenta similitudes con la Zona 2, evidenciando casos frecuentes de agresiones físicas, robos y vandalismo. Se presume que esta zona puede tener una densa concentración de población, conformada por un entorno mixto entre áreas residenciales y comerciales. Estrategias orientadas a reducir la violencia y proteger tanto los hogares como los negocios podrían ser consideradas prioridades fundamentales para esta zona.


Conclusión

Se concluye que en los crimenes mas reportados son THEFT (Robo), BATTERY (Agresión Fisica), Criminal Damage (Daño Criminal), Narcotics (Narcotics) y OTHER OFFENSE (Otro delitos) y el mes con mayor tasa de crimenes es julio y a su vez el inicio y final de año reporta menor cantidad de casos, esto se vincula principalmente a factores climaticos.

Al examinar tanto el mapa de crímenes como la tabla que detalla los delitos más recurrentes por zona, se destaca la presencia constante de incidentes de THEFT y BATTERY en todas las áreas de la ciudad. Este hallazgo sugiere que estos tipos de crímenes son omnipresentes en términos generales en Chicago. Además, se observa que la Zona 1 registra una mayor incidencia de crímenes relacionados con narcóticos (Narcotics), lo que podría vincularse con las condiciones específicas de esta área.

Es relevante destacar que estos patrones de crímenes reportados están estrechamente ligados a las condiciones locales de cada lugar. La concentración de crímenes en el centro de la ciudad puede asociarse a una mayor densidad poblacional, actividad comercial y turística, factores que suelen contribuir a la incidencia delictiva.

En contraste, se evidencia una menor cantidad de crímenes reportados en las zonas norte y sur de Chicago. Este fenómeno podría vincularse directamente con la menor densidad poblacional en estas áreas y, posiblemente, con una dinámica sociodemográfica diferente.

En resumen, los datos revelan que la naturaleza y la frecuencia de los crímenes en Chicago están intrínsecamente relacionadas con las características particulares de cada lugar. Este análisis subraya la importancia de considerar factores locales al abordar cuestiones de seguridad y destaca la variabilidad de la incidencia delictiva en diferentes zonas de la ciudad.