Este informe presenta una visualización geográfica preliminar de los hechos violentos registrados en la base REGISTRO DE HECHOS VIOLENTOS 2025-2026, a partir de coordenadas de latitud y longitud estimadas o registradas.
El objetivo es facilitar la exploración espacial de los eventos, su tipología y su localización general en el territorio.
ruta_archivo <- "C:/Users/Erick Caicedo Ruiz/Desktop/Documentos Contrato SIDOC/Voz a vos/REGISTRO DE HECHOS VIOLENTOS 2025-2026.xlsx"
datos <- read_excel(ruta_archivo)
names(datos)
datos_mapa <- datos %>%
mutate(
Latitud = as.numeric(trimws(gsub(",", ".", Latitud))),
Longitud = as.numeric(trimws(gsub(",", ".", Longitud)))
) %>%
mutate(
Latitud = ifelse(abs(Latitud) > 90, Latitud / 1000000, Latitud),
Longitud = ifelse(abs(Longitud) > 180, Longitud / 1000000, Longitud)
) %>%
filter(
!is.na(Latitud), !is.na(Longitud),
Latitud >= -90, Latitud <= 90,
Longitud >= -180, Longitud <= 180
)
glimpse(datos_mapa)
resumen_tipo <- datos_mapa %>%
count(`TIPO DE HECHO`, sort = TRUE)
resumen_tipo
El gráfico 1, muestra una clara concentración de los registros en unos pocos tipos de hecho, especialmente en ataques armados, que sobresalen ampliamente como la categoría más frecuente con 22 casos. Esta cifra más que duplica a la segunda categoría, presencia o detonación de artefactos explosivos con 10 registros, lo que sugiere que la dinámica de violencia documentada en la base está marcada principalmente por acciones armadas directas y, en segundo lugar, por eventos asociados al uso o hallazgo de explosivos.
En un nivel intermedio aparecen confrontación armada / ataques armados con 7 registros y violencias contra civiles con 6 registros, lo que indica que además de los ataques directos, también existe una afectación importante sobre población civil y escenarios de confrontación que no siempre se registran bajo una sola tipología homogénea. Más abajo, con 3 registros cada uno, se ubican alteración del orden público urbano, alertas tempranas comunitarias y riesgo por actividad delincuencial, categorías que reflejan contextos de tensión y prevención más que hechos letales o explosivos consumados.
Finalmente, las categorías de menor frecuencia corresponden a ataque o confrontación armada y violencia contra civiles con 2 casos, y a afectación a infraestructura y servicios, control territorial y movilidad y Control territorial y movilidad con 1 registro cada una. Esto sugiere que estos eventos aparecen de manera más esporádica en la base o que han sido menos documentados. También se evidencia una duplicidad en algunas categorías, por ejemplo entre “ATAQUES ARMADOS” y “Confrontación armada / Ataques armados”, así como entre “CONTROL TERRITORIAL Y MOVILIDAD” y “Control territorial y movilidad”, lo que indica la necesidad de homogeneizar la codificación para evitar dispersión analítica y mejorar la lectura estadística del conjunto de datos.
En términos generales, el gráfico permite concluir que la base registra una violencia predominantemente asociada a acciones armadas y explosivas, con una presencia secundaria de hechos que afectan a la población civil, el orden público y la movilidad. Esto refuerza la importancia de priorizar el seguimiento de eventos armados de alto impacto, al tiempo que se fortalecen criterios estandarizados de clasificación para lograr análisis más precisos.
library(ggplot2)
library(dplyr)
resumen_tipo <- datos_mapa %>%
count(`TIPO DE HECHO`, sort = TRUE) %>%
mutate(
`TIPO DE HECHO` = factor(`TIPO DE HECHO`, levels = rev(`TIPO DE HECHO`)),
intensidad = rank(n, ties.method = "first")
)
ggplot(resumen_tipo, aes(x = `TIPO DE HECHO`, y = n, fill = n)) +
geom_col() +
geom_text(
aes(label = n),
hjust = -0.2,
size = 4
) +
coord_flip() +
scale_fill_gradient(
low = "#CFE8FF",
high = "#08306B",
guide = "none"
) +
labs(
title = "Gráfico 1. Número de registros por tipo de hecho",
x = "Tipo de hecho",
y = "Número de registros"
) +
theme_minimal() +
expand_limits(y = max(resumen_tipo$n) + 2)
El siguiente mapa presenta la georreferenciación preliminar de los hechos violentos registrados en la base de datos del programa, a partir de coordenadas de latitud y longitud asociadas a cada evento. Esta visualización permite identificar la distribución espacial de los casos reportados en Cali, Buenaventura y municipios del Cauca, facilitando una lectura territorial de las dinámicas de violencia documentadas.
Su propósito es apoyar el seguimiento contextual, la identificación de zonas de concentración y el análisis de patrones geográficos que puedan incidir en la operación del programa y en la definición de medidas de prevención y mitigación.
leaflet(datos_mapa) %>%
addProviderTiles("CartoDB.Positron") %>%
addCircleMarkers(
lng = ~Longitud,
lat = ~Latitud,
radius = 6,
color = "red",
fillColor = "red",
fillOpacity = 0.8,
stroke = TRUE,
weight = 1,
popup = ~paste0(
"<b>Fecha:</b> ", FECHA, "<br>",
"<b>Lugar:</b> ", LUGAR, "<br>",
"<b>Hecho:</b> ", HECHOS, "<br>",
"<b>Tipo:</b> ", `TIPO DE HECHO`, "<br>",
"<b>Latitud:</b> ", Latitud, "<br>",
"<b>Longitud:</b> ", Longitud, "<br>",
"<b>Noticia:</b> <a href='", `ENLACE A NOTICIA`, "' target='_blank'>Abrir enlace</a>"
)
) %>%
fitBounds(
lng1 = min(datos_mapa$Longitud, na.rm = TRUE),
lat1 = min(datos_mapa$Latitud, na.rm = TRUE),
lng2 = max(datos_mapa$Longitud, na.rm = TRUE),
lat2 = max(datos_mapa$Latitud, na.rm = TRUE)
)
A continuación, se presenta una tabla interactiva que consolida los registros de hechos violentos incluidos en la base de datos analizada. Esta herramienta permite consultar de manera detallada la información asociada a cada caso, incluyendo la fecha, el lugar, la descripción del hecho, su tipología y el enlace a la fuente de verificación. Su formato interactivo facilita la búsqueda, el filtrado y la exploración individual de los registros, constituyéndose en un insumo útil para el seguimiento continuo, la validación de información y el análisis detallado de los eventos reportados.
tabla_reporte <- datos_mapa %>%
select(
FECHA,
LUGAR,
HECHOS,
`TIPO DE HECHO`,
`ENLACE A NOTICIA`,
Latitud,
Longitud
)
datatable(
tabla_reporte,
options = list(
pageLength = 10,
scrollX = TRUE
),
rownames = FALSE
)