INTRODUCCIÓN

A continuación, presento mi trabajo de proyecto final donde realizaré un analisis estadístico sobre los tipos de delitos ocurridos en la ciudad de Chicago durante el primer semestre del año 2020, en diferentes períodos e instancias de tiempo, así como también, las diferentes zonas en las que suelen ocurrir este tipo de crímenes. Se espera que este análisis comprenda diferentes dimensiones del problema, teniendo en cuenta las variables presentadas en el dataset.

Cómo se caracterizó la ocurrencia de delitos de Chicago durante el primer semestre del año 2020?

Primero hacemos una visualización de los datos

crimes_chicago <<- read.csv("chicagoCrime2020.csv")
str(crimes_chicago) #==> Estructura del dataset
## 'data.frame':    91318 obs. of  26 variables:
##  $ X                   : int  24279 24280 24283 24284 24285 24286 24287 24288 24289 24290 ...
##  $ id                  : int  11938480 11939100 11939898 11940123 11940158 11941117 11942080 11942146 11942728 11942841 ...
##  $ case_number         : chr  "JD100355" "JD101264" "JD102057" "JD102395" ...
##  $ date                : chr  "2020-01-01 04:00:00" "2020-01-02 01:33:00" "2020-01-02 14:00:00" "2020-01-02 23:00:00" ...
##  $ block               : chr  "048XX N WINCHESTER AVE" "003XX S CICERO AVE" "054XX S HOMAN AVE" "056XX W MADISON ST" ...
##  $ iucr                : chr  "0930" "0486" "1310" "0263" ...
##  $ primary_type        : chr  "MOTOR VEHICLE THEFT" "BATTERY" "CRIMINAL DAMAGE" "CRIM SEXUAL ASSAULT" ...
##  $ description         : chr  "THEFT/RECOVERY: AUTOMOBILE" "DOMESTIC BATTERY SIMPLE" "TO PROPERTY" "AGGRAVATED: KNIFE/CUT INSTR" ...
##  $ location_description: chr  "STREET" "GAS STATION" "RESIDENCE" "VEHICLE NON-COMMERCIAL" ...
##  $ arrest              : chr  "False" "True" "False" "False" ...
##  $ domestic            : chr  "True" "False" "False" "False" ...
##  $ beat                : int  2032 1533 822 1513 423 733 621 423 423 924 ...
##  $ district            : int  20 15 8 15 4 7 6 4 4 9 ...
##  $ ward                : int  47 28 14 29 7 6 6 10 7 12 ...
##  $ community_area      : int  4 25 63 25 46 68 71 46 46 61 ...
##  $ fbi_code            : chr  "07" "08B" "14" "02" ...
##  $ x_coordinate        : int  1162542 1144438 1154637 1138946 1194966 1171230 1172885 1197280 1195113 1166060 ...
##  $ y_coordinate        : int  1932100 1898165 1868368 1899461 1849540 1856757 1853815 1847679 1850446 1878849 ...
##  $ year                : int  2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
##  $ updated_on          : chr  "2020-01-08 15:49:48" "2020-01-09 15:57:56" "2020-01-09 15:57:56" "2020-01-09 15:57:56" ...
##  $ latitude            : num  42 41.9 41.8 41.9 41.7 ...
##  $ longitude           : num  -87.7 -87.7 -87.7 -87.8 -87.6 ...
##  $ location            : chr  "(41.969341211, -87.677712622)" "(41.876581037, -87.745137513)" "(41.794616486, -87.708485645)" "(41.880238942, -87.76527117)" ...
##  $ hash                : chr  "2020-01-01 04:00:00" "2020-01-02 01:33:00" "2020-01-02 14:00:00" "2020-01-02 23:00:00" ...
##  $ point_date          : logi  NA NA NA NA NA NA ...
##  $ geom                : logi  NA NA NA NA NA NA ...
summary(crimes_chicago) #==> Resumen estadistico
##        X                 id           case_number            date          
##  Min.   :  24279   Min.   :   24889   Length:91318       Length:91318      
##  1st Qu.:1781055   1st Qu.:11974960   Class :character   Class :character  
##  Median :3564740   Median :12010619   Mode  :character   Mode  :character  
##  Mean   :3574290   Mean   :11973896                                        
##  3rd Qu.:5376446   3rd Qu.:12046081                                        
##  Max.   :7135304   Max.   :12085764                                        
##                                                                            
##     block               iucr           primary_type       description       
##  Length:91318       Length:91318       Length:91318       Length:91318      
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##  location_description    arrest            domestic              beat     
##  Length:91318         Length:91318       Length:91318       Min.   : 111  
##  Class :character     Class :character   Class :character   1st Qu.: 612  
##  Mode  :character     Mode  :character   Mode  :character   Median :1021  
##                                                             Mean   :1136  
##                                                             3rd Qu.:1654  
##                                                             Max.   :2535  
##                                                                           
##     district          ward       community_area    fbi_code        
##  Min.   : 1.00   Min.   : 1.00   Min.   : 1.00   Length:91318      
##  1st Qu.: 6.00   1st Qu.:10.00   1st Qu.:23.00   Class :character  
##  Median :10.00   Median :23.00   Median :32.00   Mode  :character  
##  Mean   :11.13   Mean   :22.86   Mean   :37.61                     
##  3rd Qu.:16.00   3rd Qu.:34.00   3rd Qu.:56.00                     
##  Max.   :31.00   Max.   :50.00   Max.   :77.00                     
##                  NA's   :2                                         
##   x_coordinate      y_coordinate          year       updated_on       
##  Min.   :1092647   Min.   :1813897   Min.   :2020   Length:91318      
##  1st Qu.:1152959   1st Qu.:1857892   1st Qu.:2020   Class :character  
##  Median :1166541   Median :1890260   Median :2020   Mode  :character  
##  Mean   :1164941   Mean   :1884924   Mean   :2020                     
##  3rd Qu.:1176618   3rd Qu.:1907957   3rd Qu.:2020                     
##  Max.   :1205112   Max.   :1951507   Max.   :2020                     
##  NA's   :751       NA's   :751                                        
##     latitude       longitude        location             hash          
##  Min.   :41.64   Min.   :-87.93   Length:91318       Length:91318      
##  1st Qu.:41.77   1st Qu.:-87.71   Class :character   Class :character  
##  Median :41.85   Median :-87.66   Mode  :character   Mode  :character  
##  Mean   :41.84   Mean   :-87.67                                        
##  3rd Qu.:41.90   3rd Qu.:-87.63                                        
##  Max.   :42.02   Max.   :-87.52                                        
##  NA's   :751     NA's   :751                                           
##  point_date       geom        
##  Mode:logical   Mode:logical  
##  NA's:91318     NA's:91318    
##                               
##                               
##                               
##                               
## 

Limpieza de los datos

Se eliminan las columnas ‘point_date’, ‘geom’ ya que no tiene datos. Adicional, para las columnas de Latitud y Longitud, se eliminan los registros que están con datos nulos

new_data_crimes_chicago<-crimes_chicago %>%
  select(-point_date, -geom) # para borrar las columnas que no necesito
colSums(is.na(new_data_crimes_chicago)) # vemos que categorias tiene datos NA
##                    X                   id          case_number 
##                    0                    0                    0 
##                 date                block                 iucr 
##                    0                    0                    0 
##         primary_type          description location_description 
##                    0                    0                    0 
##               arrest             domestic                 beat 
##                    0                    0                    0 
##             district                 ward       community_area 
##                    0                    2                    0 
##             fbi_code         x_coordinate         y_coordinate 
##                    0                  751                  751 
##                 year           updated_on             latitude 
##                    0                    0                  751 
##            longitude             location                 hash 
##                  751                    0                    0
#Para el caso anterior las columnas latitude y longitude tiene 751 registros con NA,

new_data_crimes_chicago$location_description[is.na(new_data_crimes_chicago$location_description)] <- "Unknown" #Preservo datos porque me puedesn ser util

new_data_crimes_chicago <- new_data_crimes_chicago %>%
  filter(!is.na(latitude) & !is.na(longitude)) #Elimino por 

#Confirmo la limpieza
str(new_data_crimes_chicago)
## 'data.frame':    90567 obs. of  24 variables:
##  $ X                   : int  24279 24280 24283 24284 24285 24286 24287 24288 24289 24290 ...
##  $ id                  : int  11938480 11939100 11939898 11940123 11940158 11941117 11942080 11942146 11942728 11942841 ...
##  $ case_number         : chr  "JD100355" "JD101264" "JD102057" "JD102395" ...
##  $ date                : chr  "2020-01-01 04:00:00" "2020-01-02 01:33:00" "2020-01-02 14:00:00" "2020-01-02 23:00:00" ...
##  $ block               : chr  "048XX N WINCHESTER AVE" "003XX S CICERO AVE" "054XX S HOMAN AVE" "056XX W MADISON ST" ...
##  $ iucr                : chr  "0930" "0486" "1310" "0263" ...
##  $ primary_type        : chr  "MOTOR VEHICLE THEFT" "BATTERY" "CRIMINAL DAMAGE" "CRIM SEXUAL ASSAULT" ...
##  $ description         : chr  "THEFT/RECOVERY: AUTOMOBILE" "DOMESTIC BATTERY SIMPLE" "TO PROPERTY" "AGGRAVATED: KNIFE/CUT INSTR" ...
##  $ location_description: chr  "STREET" "GAS STATION" "RESIDENCE" "VEHICLE NON-COMMERCIAL" ...
##  $ arrest              : chr  "False" "True" "False" "False" ...
##  $ domestic            : chr  "True" "False" "False" "False" ...
##  $ beat                : int  2032 1533 822 1513 423 733 621 423 423 924 ...
##  $ district            : int  20 15 8 15 4 7 6 4 4 9 ...
##  $ ward                : int  47 28 14 29 7 6 6 10 7 12 ...
##  $ community_area      : int  4 25 63 25 46 68 71 46 46 61 ...
##  $ fbi_code            : chr  "07" "08B" "14" "02" ...
##  $ x_coordinate        : int  1162542 1144438 1154637 1138946 1194966 1171230 1172885 1197280 1195113 1166060 ...
##  $ y_coordinate        : int  1932100 1898165 1868368 1899461 1849540 1856757 1853815 1847679 1850446 1878849 ...
##  $ year                : int  2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
##  $ updated_on          : chr  "2020-01-08 15:49:48" "2020-01-09 15:57:56" "2020-01-09 15:57:56" "2020-01-09 15:57:56" ...
##  $ latitude            : num  42 41.9 41.8 41.9 41.7 ...
##  $ longitude           : num  -87.7 -87.7 -87.7 -87.8 -87.6 ...
##  $ location            : chr  "(41.969341211, -87.677712622)" "(41.876581037, -87.745137513)" "(41.794616486, -87.708485645)" "(41.880238942, -87.76527117)" ...
##  $ hash                : chr  "2020-01-01 04:00:00" "2020-01-02 01:33:00" "2020-01-02 14:00:00" "2020-01-02 23:00:00" ...

Analisis temporal

Ahora realizo un analísis usando Barplots e histogramas para observar los picos y patrones en los delitos por tiempo.

Distribución Temporal

Convertir la columna ‘date’ a formato fecha

new_data_crimes_chicago$date <- as.POSIXct(new_data_crimes_chicago$date, format = "%Y-%m-%d %H:%M:%S")

Extraemos componentes de tiempo

new_data_crimes_chicago$month <- month(new_data_crimes_chicago$date, label = TRUE, abbr = TRUE)
new_data_crimes_chicago$day_of_week <- wday(new_data_crimes_chicago$date, label = TRUE, abbr = TRUE)
new_data_crimes_chicago$hour <- hour(new_data_crimes_chicago$date)

Cantidad de delitos por mes (Incluye todos los delitos reportados)

A continuación podemos observar la cantidad de delitos por mes para el primer semestre del año 2020

ggplot(new_data_crimes_chicago, aes(x = month)) +
  geom_bar(fill = "#4682B4", color = "black", alpha = 0.8) + #se le asigna color de cada barra y borde, alpha para transparencia
  theme_minimal(base_size = 15) + # Ajustando el tamaño  de fuente
  labs(
    title = "Crímenes por Mes en el primer semestre en Chicago (2020)",
    subtitle = "Análisis basado en datos obtenidos.",
    caption = "Fuente: Chicago Police Department",
    x = "Mes",
    y = "Número de Crímenes"
  ) +
  #Configurando la apariencia
  theme(
    plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), # Para Centrar el título
    plot.subtitle = element_text(hjust = 0.5, size = 14, face = "italic"), # ParaCentrar el subtítulo
    axis.title = element_text(size = 14, face = "bold"), # Dando estilo a etiquetas y los ejes ejes
    axis.text = element_text(size = 12), # Ajustando texto de los ejes
    panel.grid.major = element_line(color = "gray80"), # Personalizar las líneas de cuadrícula
    panel.grid.minor = element_blank() # Eliminar cuadrícula menor
  ) +
  scale_x_discrete(labels = toupper(levels(new_data_crimes_chicago$month))) + # Texto en mayúsculas para los meses
  scale_y_continuous(expand = expansion(mult = c(0, 0.1))) # Ajustando las márgenes del eje Y

De la gráfica anterior se puede deducir que para el primer semestre del año 2020, la ocurrencia de delitos en Chicago tuvo una tendencia a la baja desde el mes de Enero al mes de Junio. Mas adelante se puede observar discriminado por el top 5 de mayores delitos cometidos que hubo una disminución significativa en delitos cometidos.

Cantidad de delitos por día de la semana (Incluye todos los delitos reportados)

A continuación podemos observar la cantidad de delitos por día de la semana para el primer semestre del año 2020

ggplot(new_data_crimes_chicago, aes(x = day_of_week)) +
  geom_bar(fill = "#ff4f33", color = "black", alpha = 0.8) + #se le asigna color de cada barra y borde, alpha para transparencia
  theme_minimal(base_size = 15) + # Ajustando el tamaño  de fuente
  labs(
    title = "Crímenes por día de la semana en el primer semestre en Chicago (2020)",
    subtitle = "Análisis basado en datos obtenidos.",
    caption = "Fuente: Chicago Police Department",
    x = "Día",
    y = "Número de Crímenes"
  ) +
  #Configurando la apariencia
  theme(
    plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), # Para Centrar el título
    plot.subtitle = element_text(hjust = 0.5, size = 14, face = "italic"), # Para centrar el subtítulo
    axis.title = element_text(size = 14, face = "bold"), # Dando estilo de las etiquetas y los ejes ejes
    axis.text = element_text(size = 12), # Ajustando texto de los ejes
    panel.grid.major = element_line(color = "gray80"), # Personalizando las líneas de cuadrícula
    panel.grid.minor = element_blank() 
  ) +
  scale_x_discrete(labels = toupper(levels(new_data_crimes_chicago$day_of_week))) + # Texto en mayúsculas para los meses
  scale_y_continuous(expand = expansion(mult = c(0, 0.1))) # Ajustando márgenes del eje Y

No existe una gran diferencia de la cantidad de delitos cometidos por día de la semana en el primer semestre del año 2020 pero se puede observar que los días viernes, sabados y domingos y un leve aumento en delitos reportados.

1. ESTADISTICA DESCRIPTIVA DEL PROBLEMA

1.1 FRECUENCIA POR TIPO DE DELITOS

Los delitos suelen tener patrones horarios por lo que procedo a comparar cómo las horas de ocurrencias varían entre categorías de crimen. Cereo que nos puede brindar una mejor idea del problema de delitos.

Primero se obtiene la frecuencia por tipo de delito

attach(new_data_crimes_chicago)
crime_counts = as.data.frame(table(primary_type))
crime_counts = crime_counts[order(crime_counts$Freq, decreasing = TRUE),]
crime_counts
##                         primary_type  Freq
## 3                            BATTERY 18524
## 30                             THEFT 18404
## 7                    CRIMINAL DAMAGE 10715
## 2                            ASSAULT  7741
## 10                DECEPTIVE PRACTICE  5668
## 23                     OTHER OFFENSE  5622
## 4                           BURGLARY  4075
## 18               MOTOR VEHICLE THEFT  3795
## 19                         NARCOTICS  3692
## 31                 WEAPONS VIOLATION  3173
## 27                           ROBBERY  3155
## 9                  CRIMINAL TRESPASS  2130
## 21        OFFENSE INVOLVING CHILDREN   877
## 26            PUBLIC PEACE VIOLATION   706
## 8            CRIMINAL SEXUAL ASSAULT   418
## 28                       SEX OFFENSE   401
## 14  INTERFERENCE WITH PUBLIC OFFICER   386
## 12                          HOMICIDE   280
## 1                              ARSON   230
## 6                CRIM SEXUAL ASSAULT   123
## 24                      PROSTITUTION   111
## 29                          STALKING    67
## 5  CONCEALED CARRY LICENSE VIOLATION    65
## 16                        KIDNAPPING    57
## 17              LIQUOR LAW VIOLATION    52
## 15                      INTIMIDATION    51
## 20                         OBSCENITY    26
## 11                          GAMBLING    11
## 22          OTHER NARCOTIC VIOLATION     5
## 25                  PUBLIC INDECENCY     4
## 13                 HUMAN TRAFFICKING     3
ggplot(crime_counts, aes(x = reorder(primary_type, Freq), y = Freq)) + 
  geom_bar(stat = "identity", fill = "steelblue", color = "black", alpha = 0.8) + # Colores atractivos
  theme_minimal(base_size = 14) + # Tema minimalista con tamaño de fuente ajustado
  coord_flip() + # Invertir los ejes para mejor visualización
  labs(
    title = "Frecuencia de Tipos de Crímenes en Chicago",
    subtitle = "Análisis basado en datos reportados en 2020",
    x = "Tipo de Crimen",
    y = "Frecuencia",
    caption = "Fuente: Chicago Police Department"
  ) +
  theme(
    plot.title = element_text(hjust = 0.5, size = 18, face = "bold"), # Centrar y estilizar el título
    plot.subtitle = element_text(hjust = 0.5, size = 14, face = "italic"), # Subtítulo centrado y en cursiva
    axis.title.x = element_text(size = 12, face = "bold"), # Estilo para el eje Y
    axis.title.y = element_text(size = 12, face = "bold"), # Estilo para el eje X
    axis.text.y = element_text(size = 10), # Ajustar tamaño de etiquetas del eje Y
    axis.text.x = element_text(size = 10), # Ajustar tamaño de etiquetas del eje X
    panel.grid.major = element_line(color = "gray80"), # Líneas de cuadrícula
    panel.grid.minor = element_blank() # Eliminar cuadrícula menor
  )

La anterior gráfica nos muestra los tipos de delitos reportados a las autoridades durante el rpimer semestre del año 2020 en la ciudad de Chicago. Los delitos con mayor frecuencia son la Agresión (Battery), Robo (Theft), vandalismo (Criminal Damage), Asaltos (Assault), Estafa (deceptive pratice).

Ahora observemos de los tipos de delitos reportados, cualés son los que han terminado con personas arrestadas.

Cualés tipos de delitos tienen mayor proporción de arrestos

#Conversión a Tipo Lógico:

new_data_crimes_chicago$arrest <- as.logical(new_data_crimes_chicago$arrest)

arrest_analysis <- new_data_crimes_chicago %>%
  group_by(primary_type) %>%
  summarise(
    total_crimes = n(),
    total_arrests = sum(arrest),
    arrest_rate = (total_arrests / total_crimes) * 100
  ) %>%
  arrange(desc(arrest_rate)) # Ordenar por porcentaje de arrestos

# Crear el gráfico

ggplot(arrest_analysis, aes(x = reorder(primary_type, arrest_rate), y = arrest_rate)) +
  geom_bar(stat = "identity", fill = "steelblue", color = "black", alpha = 0.8) +
  coord_flip() + # Voltear los ejes para un gráfico horizontal
  theme_minimal(base_size = 14) +
  labs(
    title = "Proporción de Arrestos por Tipo de Crimen en Chicago",
    subtitle = "Porcentaje de crímenes que resultaron en un arresto",
    x = "Tipo de Crimen",
    y = "Porcentaje de Arrestos",
    caption = "Fuente: Chicago Police Department (2020)"
  ) +
  theme(
    plot.title = element_text(hjust = 0.5, size = 18, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5, size = 14, face = "italic"),
    axis.title = element_text(size = 14, face = "bold"),
    axis.text = element_text(size = 10),
    panel.grid.major = element_line(color = "gray80"),
    panel.grid.minor = element_blank()
  )

Se puede observar que para los delitos mas reportados como Agresión (Battery), Robo(Theft), delitos con mayor frecuencia, el porcentaje de arrestos no sobrepasa el 25%, mientras que delitos con poca fecuencia presentan un 100% en arrestos.

Por medio de boxplot miremos los tipo de delitos reportados por horas del día

ggplot(new_data_crimes_chicago, aes(x = primary_type, y = hour)) +
  geom_boxplot(fill = "#13e706", color = "black", outlier.color = "red", outlier.size = 2, alpha = 0.9) +
  theme_minimal(base_size = 15) +
  labs(
    title = "Distribución Horaria de Crímenes por Tipo de Crimen",
    subtitle = "Cada caja muestra el rango de horas del día en que ocurren los crímenes",
    caption = "Fuente: Chicago Police Department (2020)",
    x = "Tipo de Crimen",
    y = "Hora del Día"
  ) +
  theme(
    plot.title = element_text(hjust = 0.5, size = 18, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5, size = 14, face = "italic"),
    axis.title = element_text(size = 14, face = "bold"),
    axis.text.x = element_text(size = 10, angle = 45, hjust = 1), # Inclinar etiquetas para facilitar lectura
    axis.text.y = element_text(size = 12),
    panel.grid.major = element_line(color = "gray80"),
    panel.grid.minor = element_blank()
  ) +
  scale_y_continuous(breaks = seq(0, 23, 2), expand = expansion(mult = c(0, 0.1))) # Ajustar el eje Y

1.2 Identificación de patrones por meses, días y horas del día.

Aumento de delitos durante fines de semana o en horas nocturnas.

Generalidades de la Distribución:

  • Mediana: La línea negra ubicada dentro de cada caja representa la hora típica (mediana) en la que ocurren los delitos. delitos como “Public Indecency” tienen una mediana bien definida, sin embargo, podemos por ejemplo el tipo de delito “Theft” tiene una distribución mas amplia.
  • Rango intercuartílico (IQR): (25% al 75%). Un rango más grande indica mayor dispersión en la ocurrencia de los delitos Podemos observar como ejemplo el tipo de delito “Criminal Damage”, éste tiene una dispersión relativamente amplia, lo que sugiere que ocurre a diferentes horas del día.

Análisis por Tipo de delito.

Concentración en Horarios Específicos:

Algunos delitos están altamente concentrados en ciertas horas del día. Podemos ver por ejemplo “Public Indecency” se comete principalmente en horarios muy específicos de la noche. - “Prostitution” ocurre en horarios nocturnos como se muestra por la mediana (aproximadamente a la medianoche) y los valores atípicos concentrados entre las 20:00 y las 2:00 am).

Crímenes Distribuidos Uniformemente:

Otros delitos tienen distribuciones más uniformes a lo largo del día, como “Theft” o “Battery” estos no parecen depender tanto de la hora.

Valores Atípicos (Outliers)

Los puntos rojos representan valores atípicos, que son delitos que ocurrieron en horarios inusuales en comparación con la mayoría. Por ejemplo: - “Prostitution” tiene una notable cantidad de valores atípicos en horas diurnas, lo que podría ser inusual dado su patrón nocturno. “Public Indecency” también tiene valores atípicos temprano en la mañana.

Delitos que Ocurren en Horas Nocturnas

Algunos tipos de crímenes como “Prostitution” y “Public Indecency” están claramente sesgados hacia horarios nocturnos, podemos interpretar que puede estar relacionado con la falta de control por parte de las autoridades en las horas de la noche o que estas actividades en el tiempo han ocurrido en estos horarios. Crímenes como “Theft” y “Criminal Damage” tienen un rango amplio de ocurrencia durante todo el día, esto podría deberse crímenes no están limitados a un período del día específico, ya que son muy comunes a cualquier hora del día.

Comparaciones entre Tipos de delitos

  • “Battery” y “Assault”: tienen distribuciones similares, con mayor ocurrencia durante el día, se podría decir que está relacionado con interacciones sociales y conflictos.
  • “Motor Vehicle Theft”:Se puede interpretar que ocurre en cualquier momento del día.

Descripción de los delitos

Ahora vamos a analizar los cinco delitos mas frecuentes

De acuerdo al gráfico anterior, las agresiones físicas son las que mas casos se presentan, dentro de las agresiones los mas representativos son los casos de agresiones domésticas y agresiones simples.El robo tiene la segunda frecuencia, los robos se centran principalmente en robos de dinero por debajo de los USD 500, por encima de los USD 500 y robos a minoristas. Los actos delictivos, se enfocan en propiedades y vehículos, los asaltos son simples y en menor proporción son agravados mientras que para las actividades engañosas y fraudulentas, el número de casos es un poco más homogéneno con respecto a los demás crímenes, sin embargo, las dos actividades que más resaltan son fraudes con tarjetas de crédito y a entidades financieras.

A continuación una breve descripción de cómo es la distribución social, politica y urbana de la ciudad de Chicago.

Distribución de Chicago: Community Areas y Wards

1. Community Areas (Áreas Comunitarias)

  • Cantidad: Chicago está dividida en 77 Community Areas, diseñadas en la década de 1920.
  • Propósito:
    • Son divisiones utilizadas para estudios demográficos, económicos y sociales.
    • Estas áreas son estables en el tiempo, lo que facilita la comparación histórica de datos.
  • Características:
    • Cada área comunitaria comprende varios barrios más pequeños.
    • Ejemplo: El área comunitaria de “Lake View” incluye vecindarios como Wrigleyville y Boystown.
    • Nombres Ejemplo: Hyde Park, Lincoln Park, Near North Side, Austin.

2. Wards (Distritos Electorales)

  • Cantidad: Hay 50 Wards en Chicago.
  • Propósito:
    • Representan divisiones políticas usadas para elecciones municipales.
    • Cada ward elige a un concejal que forma parte del Ayuntamiento de Chicago.
  • Características:
    • A diferencia de las Community Areas, los Wards pueden cambiar con los procesos de redistribución política cada 10 años.
    • No siempre coinciden con los límites de las áreas comunitarias.
    • Ejemplo: Un ward puede abarcar partes de varias Community Areas.
    • Nombres Ejemplo: No tienen nombres, pero están numerados del 1 al 50.

Diferencias Clave Entre Community Areas y Wards

Aspecto Community Areas Wards
Cantidad 77 50
Propósito Estudio demográfico/social Representación política
Estabilidad Estables desde 1920 Cambian cada 10 años
Nombres/Números Nombres descriptivos (e.g., Hyde Park) Numerados (e.g., Ward 1)
Cobertura Basado en vecindarios Divisiones político-geográficas

Relación Entre Ambas

  • Las Community Areas y los Wards son independientes, pero un ward puede incluir partes de varias Community Areas.
  • Estas divisiones son útiles para distintos tipos de análisis:
    • Community Areas: Estudio estadístico y social a largo plazo.
    • Wards: Análisis político y de representación electoral.
## Reading layer `OGRGeoJSON' from data source 
##   `https://data.cityofchicago.org/api/geospatial/igwz-8jzy?method=export&format=GeoJSON' 
##   using driver `GeoJSON'
## Simple feature collection with 77 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -87.94011 ymin: 41.64454 xmax: -87.52414 ymax: 42.02304
## Geodetic CRS:  WGS 84


Veamos un mapa de calor para ver como se distribuyen el top 5 de los delitos mas cometidos en la ciudad de Chicago en el primer semestre del año 2020

## Reading layer `OGRGeoJSON' from data source 
##   `https://data.cityofchicago.org/api/geospatial/igwz-8jzy?method=export&format=GeoJSON' 
##   using driver `GeoJSON'
## Simple feature collection with 77 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -87.94011 ymin: 41.64454 xmax: -87.52414 ymax: 42.02304
## Geodetic CRS:  WGS 84

Se puede notar que las áreas con colores más cálidos (rojo y amarillo) representan alta densidad de crímenes lo que denota que hay una alta frecuencia de delitos en la zona norte de Chicago. Se tendría que hacer un analisis socioeconómico de cada “Community area” para poder entender mas a fondo por qué esta zonas son donde mas delitos se cometen. Las zonas centrales de Chicago tienen las áreas más densas de actividad delictiva. Los crímenes parecen seguir patrones espaciales relacionados con: - Densidad poblacional (mayor actividad en áreas urbanas). - Centros comerciales o áreas de alto tránsito.

Por ahora voy usar aprendizaje no supervisado (Clustering) para detectar si hay agrupamiento por delitos, por eso usaré del dataset las columnas de ubicación para aplicar aprendizaje no supervisado (Clustering).

Usaré K-means para dividir los grupos y minimizar la distancia entre los puntos dentro de cada grupo.

Mi idea es poder agrupar puntos geográficos a poder identificar zonas de alta y baja ocurrencia de delitos como pude interpretar en el mapa de calor que se visualizó anteriormente.

cluster_colors <- c("1" = "#E41A1C", "2" = "#377EB8", "3" = "#4DAF4A", "4" = "#984EA3")
# Elimino las filas innecsearias por valores faltantes y solo usaré Latitud y Longuitud para los 
#puntos geográficos
data_cluster <- new_data_crimes_chicago %>%
  filter(!is.na(latitude), !is.na(longitude)) %>% 
  select(latitude, longitude) # 

# Este submuestreo lo hago ya que por el espacio de memoria RAM solo me permite hasta 15000 registros y observando el comportamiento del algoritmo y la información de la lecturas, es costoso su ejecución. La recomendación según la literatura era hacer un submuestreo
set.seed(123) 
data_sample <- data_cluster %>% sample_n(15000) 

# Escalar los datos. Normalizar las columnas a usar para que la desviación estandar sea igual a 1
data_scaled <- scale(data_sample)

# Método del Codo para determinar el número de clusters
#Con este método busco encontrar el número de cluster óptimo, para efecto de ejecución y según la gráfica, la curva deja de descender en k = 4
fviz_nbclust(data_scaled, kmeans, method = "wss") +
  labs(title = "Método del Codo para Determinar Número de Clusters")

# Ajustar K-Means con el número óptimo de clusters
#Repito el algritmo 25 veces para garantizar la estabilidad del resultado
set.seed(123)
kmeans_result <- kmeans(data_scaled, centers = 4, nstart = 25)

# Agregar los resultados al dataset. se agrega una nueva columna al dataset.
data_sample$cluster <- as.factor(kmeans_result$cluster)

# Ver resultados del clustering
table(data_sample$cluster)
## 
##    1    2    3    4 
## 3909 2978 4386 3727
# Visualización de los clusters, 
fviz_cluster(kmeans_result, data = data_scaled,
             geom = "point", ellipse.type = "norm",
             main = "Resultados del K-Means Clustering",
             palette = cluster_colors) +
   scale_color_manual(values = cluster_colors) +
  labs(x = "Componente 1", y = "Componente 2")

La gráfica anterior permite ver los datos escalados en dos dimesiones y cada color representa un cluster diferente. Tambien se puede observar la dispersión de los datos en cada elipse. Dentro de lo que logro interpretar, los cluster están bien definidos según la literatura ya que esto sugiere que el k-means encontró valores espaciales en los datos, esto permite agrupar las coordenadas de los crimenes en 4 clusters distintos lo que se acerca a la interpretación con respecto al mapa de calor por el top de delitos cometidos, que hay caracteristicas geográficas similares en términos de concentración de delitos.

Aplicando los datos obtenidos del clusterin al mapa de Chicago

## Reading layer `OGRGeoJSON' from data source 
##   `https://data.cityofchicago.org/api/geospatial/igwz-8jzy?method=export&format=GeoJSON' 
##   using driver `GeoJSON'
## Simple feature collection with 77 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -87.94011 ymin: 41.64454 xmax: -87.52414 ymax: 42.02304
## Geodetic CRS:  WGS 84

Análsis del mapa anterior

El uso de K-means en este proyecto es para segementar de forma geográfica los puntos o locaciones (laitud y longitud) donde los delitos son similares. Ya que los delitos se agruparonen 4 clusters y fueron representados por colores, lo que me propongo es llevarlos al mapa de Chicago así como realicé el mapa de calor con anterioridad.

Lo anterior me permite interpretar que la ciudad de Chicago tiene zonas criticas que requieren mas atención por parte de las autoridades administrartivas de la ciudad, ya sea porque en estas zonas es donde hay mayor densidad poblacional, falta de oportunidades de estudio y trabajo, vulnerabilidad económica o falta de politicas de seguridad pública. Comparando los mapas, uno con clusters y otros con mapa de calor, encuentro que los mapas se complementan. El k-means me segmenta los datos en clusteres especifico y el mpa de calor me permite observa una vista de la densidad de crimenes.

Ahora voy a agregar los tipos de delitos y la hora en que se cometen para hacer un analisis mas profundo a los clusters. La idea es poder identificar los tipos de delito y la hora por cada cluster que se generó.

##   latitude longitude hour       primary_type cluster
## 1 41.89267 -87.61621   12 DECEPTIVE PRACTICE       4
## 2 41.88693 -87.63064   14            ROBBERY       4
## 3 41.74485 -87.60627    2    CRIMINAL DAMAGE       1
## 4 41.79479 -87.61679   12            ASSAULT       1
## 5 41.76224 -87.65994   12              THEFT       2
## 6 42.00500 -87.66087   23    CRIMINAL DAMAGE       4

Tipos de delitos predominantes

Cluster 1

  • Los delitos con mas frecuencia son Agresiones (Battery), Robos(Theft) y Vandalismo (Criminal Damage), lo que sugiere que en esta zona hay un alto índice de agresiones y de delitos contra la propiedad

Cluster 2

  • En esta zona predominan los asaltos y el robo a mano armada (Assault, Robbery, Weapons Violation)

Cluster 3

  • Predominan los robos y fraudes (Bulgary, Deceptive Parctice y Theft)

Cluster 4

  • En esta zona predomina el robo de autos, las agresiones, el tráfico de drogas y el robo a vehículos (Motor Vehicle Theft, Narcotics, Battery)

Distribución de Horas de los delitos

Cluster 1

  • La mayoria de los delitos suceden entre las 12 del medio día y las 6:00 p.m. Puede ser una zona de mucha actividad económica (Comercio)

Cluster 2

  • Entre las 8:00 p.m y la media noche es la mayor ocurrencia de delitos lo que coincide con os delitos de robo a manoa armada y los asaltos

Cluster 3

  • Tienden a suceder al medio día y en la noche, puede ser zonas residenciales y comerciales

Cluster 4

  • Su rango horario de mayor delitos cometidos es entre las 6:00 p.m y la media noche, puede interpretarse como una zona peligrosa en la noche.

Conclusiones

se pudo evidenciar durante el desarrollo del trabajo, que el plasmar información de manera gráfica facilita el entendimiento del problema que se está abordando, por supuesto, esto implica un desafío importante porque se debe garantizar que los gráficos utilizados sean los correctos, sobre todo cuando se goza de mucha información para analizar como en el presente tema abordado, donde se logra concluir aquellas actividades de mayor incidencia delictiva en la ciudad de Chicago. De acuerdo al ejercicio realizado anteriormente y despues de observar lo mostrado antes y despues de la ejecución de los clusters se puede concluir que: