1. Introducción

Este informe analiza 2.120 comparendos de tránsito de Barranquilla (Atlántico) cometidos entre el 12/04/2010 y el 27/05/2010. El objetivo es describir la base de datos, medir cómo se distribuyen las infracciones y señalar patrones útiles para el control vial. El análisis se hizo con el lenguaje R, usando las librerías readxl, dplyr, ggplot2 y scales.

La base es BD Comparendos OK - TAD. Cada registro es un comparendo que llegó a mandamiento de pago, por lo que no incluye todos los comparendos impuestos en esos meses, solo los que pasaron a cobro coactivo. Esto limita las conclusiones.

Por cada comparendo la base registra quién lo recibió (nombre y género), la infracción, la fecha, la placa, el tipo de vehículo y el valor de la multa. Con esos datos el informe revisa la calidad de la base, describe los comparendos por tiempo, género, vehículo e infracción, calcula el recaudo y analiza la reincidencia de personas y empresas.

1.1 Librerias

“readxl”: Lee el archivo de Excel desde R.

“dplyr”: Ordena y transforma los datos (filtrar, contar, sumar, agrupar).

“ggplot2”: Crea los gráficos.

“scales”: Da formato a los números y textos de los gráficos, como los puntos de miles y el ajuste de los nombres largos.

2. Funciones básicas y calidad de los datos

# Paso 1: Mostrar los nombres de las columnas de la base original
colnames(df)
##  [1] "No. MANDAMIENTO DE PAGO"   "FECHA MANDAMIENTO DE PAGO"
##  [3] "EJECUTADO"                 "TIPO DE IDENTIFICACION"   
##  [5] "#TIPO DE IDENTIFICACION"   "No. IDENTIFICACION"       
##  [7] "GENERO"                    "#GENERO"                  
##  [9] "COD. INFRACCION"           "#COD. INFRACCION"         
## [11] "NOM INFRACCION"            "#NOM INFRACCION"          
## [13] "COMPARENDO"                "FECHA DE COMPARENDO"      
## [15] "DIA"                       "NOM DIA"                  
## [17] "#NOM DIA"                  "MES"                      
## [19] "NOM MES"                   "#NOM MES"                 
## [21] "AÑO"                       "PLACA DE VEHICULO"        
## [23] "VEHICULO"                  "#VEHICULO"                
## [25] "COSTO COMPARENDO"

3. Consultas

3.1 Comparendos por día

# Paso 1: Contar cuántos comparendos hay en cada fecha
por_fecha <- d %>% count(fecha, dia, es_fin, name = "Comparendos")

# Paso 2: Graficar los comparendos por día (fines de semana en rojo)
ggplot(por_fecha, aes(x = fecha, y = Comparendos, fill = es_fin)) +
  geom_col() +
  scale_fill_manual(values = c("FALSE" = "grey70", "TRUE" = "brown4"),
                    labels = c("Lunes a viernes", "Sábado o domingo"), name = NULL) +
  labs(title = "Comparendos por día", x = "Fecha", y = "Cantidad") +
  theme_minimal()

# Paso 3: Mostrar la tabla de comparendos por mes y día de la semana
d %>%
  count(mes, dia, name = "Comparendos") %>%
  mutate(mes = factor(mes, levels = c("Abril", "Mayo"))) %>%
  arrange(mes, dia) %>%
  rename(Mes = mes, Día = dia) %>%
  knitr::kable()
Mes Día Comparendos
Abril Lunes 99
Abril Martes 110
Abril Miércoles 106
Abril Jueves 89
Abril Viernes 128
Abril Sábado 88
Abril Domingo 92
Mayo Lunes 196
Mayo Martes 154
Mayo Miércoles 167
Mayo Jueves 167
Mayo Viernes 136
Mayo Sábado 284
Mayo Domingo 304

Se registraron entre 18 y 89 comparendos por día, con un promedio de 46,1. Los días más altos coinciden con sábados y domingos.

3.2 Comparendos por día de la semana

# Paso 1: Contar cuántas veces aparece cada día de la semana en el calendario del periodo
calendario <- tibble(fecha = seq(min(d$fecha), max(d$fecha), by = "day")) %>%
  mutate(wd = as.POSIXlt(fecha)$wday) %>% count(wd, name = "dias")

# Paso 2: Contar los comparendos por día de la semana y calcular el promedio por día
por_dia <- d %>% count(wd, dia, name = "Comparendos") %>%
  left_join(calendario, by = "wd") %>%
  mutate(promedio = Comparendos / dias)

# Paso 3: Graficar el promedio de comparendos por día de la semana
ggplot(por_dia, aes(x = dia, y = promedio)) +
  geom_col(fill = "brown4", color = "black") +
  geom_text(aes(label = round(promedio, 1)), vjust = -0.4) +
  labs(title = "Promedio de comparendos por día de la semana", x = "Día", y = "Promedio por día") +
  theme_minimal()

Los sábados y domingos suman 36,2 % de los comparendos, aunque son 2 de cada 7 días.

3.3 Comparendos por mes

# Paso 1: Resumir por mes: total de comparendos, días con registro y promedio diario
d %>% group_by(mes) %>%
  summarise(comparendos = n(), dias_con_registro = n_distinct(fecha),
            promedio_diario = round(n() / n_distinct(fecha), 1)) %>%
  knitr::kable()
mes comparendos dias_con_registro promedio_diario
Abril 712 19 37.5
Mayo 1408 27 52.1
# Paso 2: Graficar el total de comparendos por mes
d %>% count(mes, name = "Comparendos") %>%
  ggplot(aes(x = mes, y = Comparendos)) + geom_col(fill = "brown4", color = "black") +
  geom_text(aes(label = Comparendos), vjust = -0.4) +
  labs(title = "Comparendos por mes", x = "Mes", y = "Cantidad") + theme_minimal()

Como abril solo cubre del 12 al 30 y mayo del 1 al 27, conviene comparar los meses por el promedio diario y no solo por el total.

3.4 Comparendos por género

# Paso 1: Contar los comparendos por género, calcular el porcentaje y mostrar la tabla
d %>% count(genero, name = "Comparendos") %>%
  mutate(porcentaje = round(100 * Comparendos / sum(Comparendos), 1)) %>%
  arrange(desc(Comparendos)) %>% knitr::kable()
genero Comparendos porcentaje
MUJER 970 45.8
HOMBRE 683 32.2
EMPRESA 467 22.0
# Paso 2: Graficar los comparendos por género
d %>% count(genero, name = "Comparendos") %>%
  ggplot(aes(x = reorder(genero, -Comparendos), y = Comparendos)) +
  geom_col(fill = "brown4", color = "black") +
  geom_text(aes(label = Comparendos), vjust = -0.4) +
  labs(title = "Comparendos por género", x = "Género", y = "Cantidad") + theme_minimal()

La base cuenta infracciones y no conductores. Sin saber cuántas mujeres y hombres conducen, no se puede afirmar que un grupo infrinja más que otro.

3.5 Comparendos por tipo de vehículo

# Paso 1: Contar los comparendos por tipo de vehículo, calcular el porcentaje y mostrar la tabla
d %>% count(vehiculo, name = "Comparendos") %>%
  mutate(porcentaje = round(100 * Comparendos / sum(Comparendos), 1)) %>%
  arrange(desc(Comparendos)) %>% knitr::kable()
vehiculo Comparendos porcentaje
AUTO 1938 91.4
MOTO 182 8.6
# Paso 2: Graficar los comparendos por tipo de vehículo
d %>% count(vehiculo, name = "Comparendos") %>%
  ggplot(aes(x = reorder(vehiculo, -Comparendos), y = Comparendos)) +
  geom_col(fill = "brown4", color = "black") +
  geom_text(aes(label = Comparendos), vjust = -0.4) +
  labs(title = "Comparendos por tipo de vehículo", x = "Vehículo", y = "Cantidad") + theme_minimal()

3.6 Comparendos por tipo de infracción

# Paso 1: Contar los comparendos por infracción, calcular el porcentaje y mostrar la tabla
d %>% count(infraccion, name = "Comparendos") %>%
  mutate(porcentaje = round(100 * Comparendos / sum(Comparendos), 1)) %>%
  arrange(desc(Comparendos)) %>% knitr::kable()
infraccion Comparendos porcentaje
Conducir un vehículo a velocidad superior a la máxima permitida. 1626 76.7
No detenerse ante una luz roja o amarilla de semáforo 385 18.2
No respetar el paso de peatones 105 5.0
Transitar en sentido contrario al estipulado para la vía 4 0.2
# Paso 2: Graficar los comparendos por infracción (barras horizontales)
d %>% count(infraccion, name = "Comparendos") %>%
  ggplot(aes(x = reorder(infraccion, Comparendos), y = Comparendos)) +
  geom_col(fill = "brown4", color = "black") +
  geom_text(aes(label = Comparendos), hjust = -0.3) +
  coord_flip() + scale_x_discrete(labels = label_wrap(35)) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
  labs(title = "Comparendos por infracción", x = "Infracción", y = "Cantidad") + theme_minimal()

3.7 Recaudo por tipo de infracción

# Paso 1: Calcular cuántos comparendos y cuánto recaudo hay por infracción
rec <- d %>% group_by(infraccion) %>%
  summarise(comparendos = n(), recaudo = sum(costo, na.rm = TRUE)) %>%
  arrange(desc(recaudo))

# Paso 2: Graficar el recaudo por infracción
ggplot(rec, aes(x = reorder(infraccion, recaudo), y = recaudo)) +
  geom_col(fill = "brown4", color = "black") +
  scale_x_discrete(labels = label_wrap(35)) +
  
  scale_y_continuous(labels = label_comma(big.mark = ".", decimal.mark = ",")) +
  labs(title = "Recaudo por infracción", x = "Infracción", y = "Total ($)") + theme_minimal()

# Paso 3: Armar la tabla con valor de la multa, comparendos y recaudo por infracción
por_inf <- d %>%
  group_by(infraccion) %>%
  summarise(`Valor de la multa` = max(costo, na.rm = TRUE),
            Comparendos = n(),
            Recaudo = sum(costo, na.rm = TRUE), .groups = "drop") %>%
  arrange(desc(Recaudo)) %>%
  rename(Infracción = infraccion)

# Paso 4: Dejar vacías las celdas sin dato en la tabla
options(knitr.kable.NA = "")


# Paso 5: Agregar la fila de totales y mostrar la tabla final
bind_rows(
  por_inf,
  tibble(Infracción = "Total",
         Comparendos = sum(por_inf$Comparendos),
         Recaudo = sum(por_inf$Recaudo))
) %>%
  knitr::kable(format.args = list(big.mark = ".", decimal.mark = ","))
Infracción Valor de la multa Comparendos Recaudo
Conducir un vehículo a velocidad superior a la máxima permitida. 257.500 1.626 418.695.000
No detenerse ante una luz roja o amarilla de semáforo 515.000 385 198.275.000
No respetar el paso de peatones 257.500 105 27.037.500
Transitar en sentido contrario al estipulado para la vía 515.000 4 2.060.000
Total 2.120 646.067.500

El recaudo total es de $ 646.067.500.

4. Reincidencia

4.1 Personas con más comparendos (sin empresas)

# Paso 1: Quitar las empresas, contar los comparendos por persona y quedarse con las 15 primeras
top_personas <- d %>% filter(genero != "EMPRESA") %>%
  count(ejecutado, sort = TRUE, name = "Comparendos") %>%
  slice_max(Comparendos, n = 15, with_ties = TRUE)

# Paso 2: Mostrar la tabla
knitr::kable(top_personas)
ejecutado Comparendos
LILIANA ROZO PINZON 27
ELVIRA DEL CARMEN GARRIDO AREVALO 10
MIGUEL HERNANDO GARAY CALLE 9
IRIS DEL CARMEN OVIEDO CANTILLO 8
JOSE ANTONIO TOVAR PUCCINI 8
ENRIQUE JESUS ARRIETA JIMENEZ 7
HEYDI MARGARITA DE MOYA GUTIERREZ 7
KELLY PAOLA ENSUNCHO CASTRO 7
LEONOR SUESCUN RODRIGUEZ 7
EDWIN ALBERTO SALCEDO CANO 6
JONATHAN BARRIOS MANCO 6
LUZ M BASTIDAS ALVAREZ 6
MARIO ANDRES VARON LOZANO 6
MERY BEATRIZ ANAYA VALENCIA 6
MILENA ROSA CAICEDO VILLA 6
# Paso 3: Graficar las personas con más comparendos
ggplot(top_personas, aes(x = reorder(ejecutado, Comparendos), y = Comparendos)) +
  geom_col(fill = "brown4", color = "black") + coord_flip() +
  geom_text(aes(label = Comparendos), hjust = -0.3) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.1))) +
  labs(title = "Personas con más comparendos", x = "Nombre", y = "Cantidad") + theme_minimal()

4.2 Empresas con más comparendos

# Paso 1: Dejar solo las empresas, contar sus comparendos y quedarse con las 10 primeras
top_empresas <- d %>% filter(genero == "EMPRESA") %>%
  count(ejecutado, sort = TRUE, name = "Comparendos") %>%
  slice_max(Comparendos, n = 10, with_ties = TRUE)

# Paso 2: Mostrar la tabla
knitr::kable(top_empresas)
ejecutado Comparendos
LEASING BANCOLOMBIAA SA CF 61
FINANCIERA INTERNACIONAL SA 32
TRANSPORTES MST Y CIA SENC 31
LEASING DE OCCIDENTE SA CF 28
GMAC FINANCIERA DE COLOMBIA 21
LEASING DE CREDITO SA 21
TRANSPORTES MST Y CIA S EN C 17
UINON FAMILIAR CHARRIS SEN C 13
BENEMOTORS SAS 8
FRANCISCO COLLAVINI CIA LTDA 8
TRANSURBAR LTDA 8

5. Conclusiones

-Se analizaron 2.120 comparendos de Barranquilla entre el 12 de abril y el 27 de mayo de 2010. El exceso de velocidad domina con el 76,7 %, seguido de semáforo en rojo o amarillo (18,2 %) y paso de peatones (5,0 %). Los fines de semana concentran el 36,2 % de los comparendos, aunque son el 28,6 % de los días. Los autos son el 91,4 % y las motos el 8,6 %.

El recaudo total es de $ 646.067.500: el 64,8 % viene de velocidad y el 30,7 % de semáforo, que aporta más de lo que le tocaría por cantidad porque su multa es el doble. La reincidencia está repartida entre muchas personas (el 26 % tiene más de un comparendo), con un solo caso extremo de 27. Las empresas con más comparendos son entidades de leasing y financieras, probablemente por ser propietarias de vehículos arrendados.

  • El exceso de velocidad es la infracción más común: 76,7 % de los comparendos.
  • Los sábados y domingos concentran 36,2 % de los comparendos, con promedios diarios muy superiores a los de entre semana.
  • Los autos representan 91,4 % de los comparendos y las motos el resto.
  • Las empresas aparecen en 22 % de los comparendos; varias son entidades de leasing y financieras, que podrían figurar como propietarias de vehículos arrendados. Esto es una hipótesis, porque la base no indica quién conducía.
  • La reincidencia se concentra en pocas personas, lo que permite enfocar campañas y controles en ellas.

Recomendaciones: reforzar los controles de velocidad en fines de semana, revisar con las entidades de leasing quién responde por los comparendos de vehículos arrendados y hacer seguimiento a los infractores reincidentes.

Limitaciones: la base solo incluye comparendos con mandamiento de pago y cubre 46 días. Además, hay números de comparendo repetidos.

6. Referencias

  • Base de datos BD Comparendos OK - TAD (Excel entregado en el curso), comparendos de Barranquilla, abril y mayo de 2010.or