rm(list=ls())Que los robos están aumentando en el Valle de Aburrá es una verdad que ya desbordó las cifras. Lo que no deja de sorprender es la manera en la que muchos de estos crímenes ocurren, a plena luz del día, en vías principales o en establecimientos públicos vigilados. ¿A qué se debe que los ladrones estén asumiendo tantos riesgos a la hora de actuar?.
El gran objetivo de este trabajo, es analizar el comportamiento de las geolocalizaciones de robos realizados en la ciudad de Medellín - Colombia, con el fin de detectar las zonas más vulnerables a partir de modelos estadísticos de procesos puntuales
Es bastante evidente que la ciudad de Medellín es fuertemente vulnerada por grupos delictivos, en consecuencia, se desea tratar el tema de los robos en la ciudad, que se caracterizan por múltiples modalidades.
En general, la seguridad de la ciudad de Medellín es un tema bastante complejo, sin embargo, la estadística permite analizar comportamientos en este tipo de actos que atentan contra la sociedad, siendo más óptimo al aplicar estadística espacial, con el fin de relacionar estos hechos a partir de datos georeferenciados, para así, poder contribuir de forma significativa en posibles medidas que puedan mitigar estas situaciones.
Este conjunto de datos presenta las locaciones de puntos donde ocurrieron robos en diferentes zonas de la ciudad de Medellín, dichos registros, fueron tomados por la policía nacional.
los datos fueron extraídos de la página de MEData, en la cuál yacen datos abiertos suministrados por la alcaldía de Medellín: Hurtos_Medellin.
Cabe resaltar, que la base de datos original cuenta con un total de 275.000 registros, por la magnitud de la misma, se decide depurar los datos, filtrándo únicamente los robos del año 2018, en vía pública y por modalidad cosquilleo, obteniendo así, un total de 1439 registros en la ciudad de Medellín.
Las variables que se tienen en cuenta para el estudio son las siguientes:
| Variable | Descripción | Tipo | Detalle |
|---|---|---|---|
| X | Número del registro | interger | 1-1439 |
| fecha_hecho | Fecha en la cual se realizó el robo | datetime | - |
| cantidad | Cantidad robos | - | |
| latitud | Coordenada latitud de la ubicación del robo | float | - |
| longitud | Coordenada longitud de la ubicación del robo | float | - |
| sexo | sexo víctima | string | - |
| edad | Edad víctima | integer | - |
| estado_civil | Estado civíl víctima | string | - |
| grupo_actor | grupo al que pertenece | String | - |
| actividad_delictiva | historial víctima | String | - |
| parentesco | parentesco víctima | string | - |
| ocupación | A que se dedica la víctima | string | - |
| discapacidad | discapacidad víctima | string | - |
| grupo_especial | Grupo especial de la víctima | string | - |
| medio_transporte | Medio transporte usado por la víctima | string | Clases: metro, caminata, autobús, automóvil, taxi, motocicleta |
| nivel_académico | Nivel académico de la víctima | string | - |
| testigo | testigo de la víctima | string | - |
| conducta | conducta víctima | string | - |
| modalidad | modalidad de robo | integer | Clases: cosquilleo, atraco, decuido, escopolamina, agentes químicos, abuso de confianza, clonación de tarjeta, comisión de delito, forcejeo, informático, llamada millonaria, llave maestra, paquete chileno, retención de tarjeta, simulando necesidad, suplantación |
| caracterizacion | caracterización víctima | string | - |
| conducta_especial | - | - | - |
| arma_medio | Arma utilizada en el robo | string | corto punzante, arma de fuego, palanca, escopolamina, no |
| articulo_penal | - | - | - |
| categoria_penal | - | - | - |
| nombre_barrio | Barrio donde ocurrió el hecho | string | - |
| codigo_barrio | Código del Barrio donde ocurrió el hecho | interger | - |
| codigo_comuna | Código de comuna donde ocurrió el hecho | interger | - |
| lugar | Lugar donde ocurrió el hecho | string | - |
| sede_receptora | Sede policia donde se registró el hecho | string | - |
| bien | Artículo robado | string | - |
| categoría_bien | Categoría de artículo robado | string | - |
| grupo_bien | Grupo de artículo robado | string | - |
| modelo | - | - | - |
| color | - | - | - |
| permiso | - | - | - |
| unidad_medida | - | - | - |
| fecha_ingestion | - | - | - |
#Lectura librerías
library(leaflet)
library(dplyr)
library(sf)
library(rgdal)
library(raster)
library(spatstat)
library(rgeos)
#library(mapview)
library(maptools)
library(ggplot2)
library(kableExtra)
library(spatstat.geom)#Lectura Datos
crimen.med <- read.csv("crimen_med.csv", header = TRUE,
encoding="UTF-8")
head(crimen.med)Lectura shapefile
#lectura de .csv y .shp
catastral <- read.csv("Limite_Barrio_Vereda_Catastral.csv", encoding="UTF-8")
med.shp <- st_read("Limite_Barrio_Vereda_Catastral.shp")## Reading layer `Limite_Barrio_Vereda_Catastral' from data source
## `C:\Users\jdbul\OneDrive\Escritorio\UNIVERSIDAD\ASIG.VISTAS\Estadistica Espacial\Trabajo2-EstEspacial\Limite_Barrio_Vereda_Catastral.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 371 features and 8 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -75.71931 ymin: 6.162904 xmax: -75.47185 ymax: 6.374872
## Geodetic CRS: WGS 84
barrio_vereda <- read.csv("Barrio_Vereda_2014.csv", encoding="UTF-8")
med.shp2 <- st_read("comunasmedellin.shp")## Reading layer `comunasmedellin' from data source
## `C:\Users\jdbul\OneDrive\Escritorio\UNIVERSIDAD\ASIG.VISTAS\Estadistica Espacial\Trabajo2-EstEspacial\comunasmedellin.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 17 features and 7 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -75.63243 ymin: 6.175719 xmax: -75.52478 ymax: 6.312849
## Geodetic CRS: WGS 84
Nombres de columnas shapefile
colnames(med.shp)## [1] "OBJECTID" "SHAPEAREA" "SHAPELEN" "COMUNA" "BARRIO"
## [6] "CODIGO" "NOMBRE_BAR" "NOMBRE_COM" "geometry"
mapa_med <- leaflet() %>%
addProviderTiles(providers$OpenStreetMap)
mapa_med %>%
addMarkers(lat=~latitud, lng =~longitud, data = crimen.med,
icon = makeIcon(iconUrl = "robber.png",
iconWidth = 8, iconHeight = 8),
popup = paste(
"<h3>Datos del robo</h3>",
paste("Edad:",
(crimen.med$edad)),
paste("Arma de por medio:",
(crimen.med$arma_medio)),
sep = "<br>"
)
)Transformación coordenadas a UTM
get_utm <- function(longitud, latitud, zona, loc){
points = SpatialPoints(cbind(longitud, latitud), proj4string = CRS("+proj=longlat +datum=WGS84"))
points_utm = spTransform(points, CRS(paste0("+proj=utm +north=T +zone=",zona[1]," +ellps=WGS84")))
if (loc == "longitud") {
return(coordinates(points_utm)[,1])
} else if (loc == "latitud") {
return(coordinates(points_utm)[,2])
}
}
crimen.med %<>%
mutate(zona = (floor((longitud + 180)/6) %% 60) + 1, keep = "all"
) %>%
group_by(zona) %>%
mutate(utm_x = get_utm(longitud, latitud, zona, loc = "longitud"),
utm_y = get_utm(longitud, latitud, zona, loc = "latitud"))Puntos en el plano
plot(crimen.med$utm_x,crimen.med$utm_y)Geometría Medellín longlat
plot(med.shp$geometry)Transformado coordenadas de Shapefile a UTM
medshputm <- st_transform(med.shp, "+proj=utm +zone=18 ellps=WGS84")Geometría Medellín UTM
plot(medshputm$geometry)Se toman las especificaciones del cuadro delimitador de la variable medshputm para establecer la extensión geográfica para el proceso de generación de datos.
xmin <- as.vector(st_bbox(medshputm)[1])
ymin <- as.vector(st_bbox(medshputm)[2])
xmax <- as.vector(st_bbox(medshputm)[3])
ymax <- as.vector(st_bbox(medshputm)[4])#Mapa para todos los barrios, usando 'innerjoin' con el .shp de Limite_Barrio_Vereda_Catastral
Unido <- inner_join(catastral, crimen.med, by = c("COMUNA" = "codigo_comuna"))
nueva_base <- Unido %>% filter(YEAR >= 2018 & YEAR <= 2018) %>%
group_by(CODIGO) %>%
dplyr::summarise(robos = n()) %>%
dplyr::ungroup()
#Se realiza la conversion de CODIGO a formato numerico
med.shp$CODIGO <- as.numeric(as.character(med.shp$CODIGO))
#Se utiliza 'inner join' para unir dos bases y para luego generar mapa
mapa <- inner_join(med.shp, nueva_base, by = c("CODIGO" = "CODIGO"))
mypal <- colorNumeric(palette = c("#000000","#280100","#3D0201","#630201","#890100","#B00100","#DD0100","#F50201",
"#FF5F5E","#FF7A79","#FF9796","#FEB1B0","#FDC9C8", "#FFE5E4"), domain = mapa$accidentes, reverse = T)
# Creaci?n del mapa
leaflet() %>% addPolygons(data = mapa, color = "#0A0A0A", opacity = 0.6, weight = 1, fillColor = ~mypal(mapa$robos),
fillOpacity = 0.6, label = ~NOMBRE_BAR,
highlightOptions = highlightOptions(color = "black", weight = 3, bringToFront = T, opacity = 1),
popup = paste("Barrio: ", mapa$NOMBRE_BAR, "<br>", "Robos: ", mapa$robos, "<br>")) %>%
addProviderTiles(providers$OpenStreetMap) %>%
addLegend(position = "bottomright", pal = mypal, values = mapa$robos, title = "Robos", opacity = 0.6)