1. Introducción

Los comparendos de tránsito son sanciones que se imponen a quienes incumplen las normas de circulación, y cuando no se pagan se convierten en un valor adeudado que se acumula con el tiempo. Analizar esta información permite entender qué infracciones pesan más en el costo total, en qué días y meses se concentran y quiénes son los que más deben.

El presente informe analiza una base de datos de comparendos de tránsito del periodo de estudio del 2010, correspondiente a los meses de abril y mayo, en formato Excel. Mediante el lenguaje de programación R se organizó la información y se construyeron cinco análisis exploratorios con gráficos y cálculos. Estos análisis revisan el valor adeudado por ejecutado, el comportamiento diario de cada mes, la participación de cada infracción en el costo, el valor adeudado por género y tipo de vehículo, y la cantidad de comparendos según el tipo de identificación.

Utilizando librerias como:

  • readxl para la lectura de archivos.
  • dplyr para la manipulacion de datos.
  • knitr para crear informe dinámicos y mejorar la presentacion.
  • ggplot2 para la creacion de graficos.
  • scales para controlar y personalizar la forma en que se muestran valores y los ejes en los gráficos.
# readxl para la lectura de archivos
library(readxl)

# Importar la base de datos COMPARENDOS
BD_COMPARENDOS <- read_excel('BD Comparendos.xlsx')

# dplyr para la manipulacion de datos.
library(dplyr)

# tidyr para la transformacion de datos.
library(tidyr)

# knitr para crear informe dinamicos y mejorar la presentacion.
library(knitr)

# ggplot para la creacion de graficos.
library(ggplot2)

# scale para controlar y personalizar la forma en que se muestran valores en gráficos.
library(scales)

2. Objetivo

Analizar la base de datos de comparendos de tránsito de abril y mayo mediante R, para identificar patrones y comportamientos del valor adeudado.

Objetivos específicos

  • Identificar los ejecutados con mayor valor adeudado.
  • Comparar el comportamiento diario del valor adeudado entre abril y mayo.
  • Determinar qué proporción del costo total corresponde a cada infracción.
  • Comparar el valor adeudado según el género y el tipo de vehículo.
  • Analizar la cantidad de comparendos según el tipo de identificación.

3. Descripción de la base de datos

La base de datos contiene 2.120 registros de comparendos de tránsito y 17 variables. Para conocer sus características se examinará su estructura, el valor y el total de cada tipo de comparendo, el número de registros y de campos con su tipo de dato, la cantidad de registros de cada género, que son empresa, hombre y mujer, y la cantidad de cada tipo de vehículo, que son auto y moto.


Primero se actualizo la base de datos se implemento el valor para cada uno de los comparendos de su año correspondido:

BD_COMPARENDOS <- BD_COMPARENDOS %>% mutate(VALOR = case_when(
  `COD. INFRACCION` %in% c(64, 67) ~ 257500,
  `COD. INFRACCION` %in% c(76, 77) ~ 515000
))


Valor_comparendo <- BD_COMPARENDOS %>%
  mutate(VALOR = format(VALOR, big.mark = '.', decimal.mark = ',')) %>%
  select(`COD. INFRACCION`, NOM.INFRACCION, VALOR) %>% 
  distinct() %>%
  arrange(`COD. INFRACCION`)

kable(Valor_comparendo, col.names = c('CODIGO', 'NOM.INFRACCION','VALOR'))
CODIGO NOM.INFRACCION VALOR
64 velocidad superior a la maxima permitida 257.500
67 No respetar el paso de peatones 257.500
76 Transitar en sentido contrario 515.000
77 No detenerse ante una luz roja o amarilla 515.000


Total de cada comparendo

total_comparendo <- BD_COMPARENDOS %>%
  group_by(`COD. INFRACCION`, NOM.INFRACCION) %>%
  summarise(TOTAL = sum(VALOR), .groups = "drop") %>%
  arrange(`COD. INFRACCION`) %>%
  mutate(TOTAL = format(TOTAL, big.mark = ".", decimal.mark = ","))

kable(total_comparendo, col.names = c('CODIGO','NOM.INFRACCION','TOTAL'))
CODIGO NOM.INFRACCION TOTAL
64 velocidad superior a la maxima permitida 418.695.000
67 No respetar el paso de peatones 27.037.500
76 Transitar en sentido contrario 2.060.000
77 No detenerse ante una luz roja o amarilla 198.275.000


Cantidad de registros y variables

# Cantidad de filas y columnas:
filas <- nrow(BD_COMPARENDOS)
columnas <- ncol(BD_COMPARENDOS)

dimensiones <- data.frame(
  CARACTERISTICA = c('Cantidad de registros', 'Cantidad de variables'),
  CANTIDAD = c(filas, columnas))

kable(dimensiones)
CARACTERISTICA CANTIDAD
Cantidad de registros 2120
Cantidad de variables 18


Nombres de las variables y su tipo de dato

# Nombres de las columnas o campos y su tipo de dato:

campos <- data.frame(
  CAMPOS = names(BD_COMPARENDOS),
  TIPO_DATO = vapply(BD_COMPARENDOS, function(x) class(x)[1], character(1)))

kable(campos, col.names = c('VARIABLE','TIPO DE DATO'), row.names = F)
VARIABLE TIPO DE DATO
No. MANDAMIENTO DE PAGO character
FECHA MANDAMIENTO DE PAGO character
EJECUTADO character
TIPO DE IDENTIFICACION character
No. IDENTIFICACION numeric
GENERO character
COD. INFRACCION numeric
NOM.INFRACCION character
COMPARENDO character
FECHA DE COMPARENDO POSIXct
AÑO numeric
MES numeric
NOM MES character
DIA numeric
NOM DIA character
PLACA DE VEHICULO character
VEHICULO character
VALOR numeric


Cantidad de registros de cada tipo de genero

genero_registros <- BD_COMPARENDOS %>%
  count(GENERO, name = 'CANTIDAD') 


kable(genero_registros)
GENERO CANTIDAD
EMPRESA 467
HOMBRE 683
MUJER 970


Cantidad de cada uno de los tipos de vehiculos

vehiculo_cantidad <- BD_COMPARENDOS %>% 
  count(VEHICULO, name = 'CANTIDAD')

kable(vehiculo_cantidad)
VEHICULO CANTIDAD
AUTO 1938
MOTO 182


4. Análisis exploratorio

En esta sección se realizarán seis análisis exploratorios con el propósito de identificar patrones y comportamientos relevantes en los comparendos de tránsito registrados durante el periodo de estudio. Se examinará el valor económico asociado a las infracciones, su distribución temporal y la participación de cada tipo de comparendo en el costo total.

Los análisis estarán orientados a los siguientes aspectos:

Top 10 ejecutados

identificar los diez ejecutados que representan el mayor valor económico acumulado.

top_10_ejecutados <- BD_COMPARENDOS %>%
  group_by(EJECUTADO) %>% 
  summarise(TOTAL = sum(VALOR)) %>%
  arrange(desc(TOTAL)) %>%
  slice_head(n = 10)


windowsFonts("Garamond" = windowsFont("Garamond"))


ggplot(top_10_ejecutados, aes(x = TOTAL, y = reorder(EJECUTADO,TOTAL))) +
  geom_col(fill = '#9ECAE1') +
  geom_text(aes(label = format(TOTAL, big.mark = ".",decimal.mark = ",")), hjust = 0.85, vjust = 0.18) +
  labs(title = 'TOP 10 EJECUTADOS CON MAYOR VALOR ADEUDADO', x = 'TOTAL', y = 'EJECUTADO') +
  theme_minimal(base_family = 'Garamond') +
  theme(plot.title = element_text(size = 12, face = 'bold', hjust = 1))

ejecutados_4 <- top_10_ejecutados %>%
  arrange(desc(TOTAL)) %>%
  slice_head(n = 4) %>%
  summarise(TOTAL = sum(TOTAL))


top10_total <- top_10_ejecutados %>%
  summarise(TOTAL = sum(TOTAL))


total_empresa <- top_10_ejecutados %>%
  filter(EJECUTADO != 'LILIANA ROZO PINZON',
         EJECUTADO != 'ENRIQUE JESUS ARRIETA JIMENEZ') %>%
  summarise(TOTAL = sum(TOTAL))


total_personas <- top_10_ejecutados %>%
  filter(EJECUTADO %in% c('LILIANA ROZO PINZON',
                          'ENRIQUE JESUS ARRIETA JIMENEZ')) %>%
  summarise(TOTAL = sum(TOTAL))


porc_4 <- ejecutados_4$TOTAL / top10_total$TOTAL * 100

porc_empresa <- total_empresa$TOTAL / top10_total$TOTAL * 100

En este análisis se puede observar que los ejecutados más destacados son empresas. En primer lugar se encuentra LEASING BANCOLOMBIA S.A. C.F., seguido de TRANSPORTES MST Y CIA S EN C, FINANCIERA INTERNACIONAL S.A. y LEASING DE OCCIDENTE S.A. C.F. En total, estos cuatro ejecutados suman un valor adeudado de 53.817.500, que equivale al 67% del valor adeudado del top 10. Esto podría deberse a que las empresas tienen numerosos vehículos circulando diariamente, recorren grandes distancias y permanecen más tiempo en las vías, lo que aumenta la probabilidad de cometer infracciones. Por ejemplo, TRANSPORTES MST Y CIA S EN C, que ocupa el segundo lugar, podría estar relacionada con el transporte de pasajeros, lo que implicaría una circulación frecuente de vehículos y una mayor exposición a infracciones.

En el quinto lugar se destaca LILIANA ROZO PINZON, con un valor adeudado de 7.467.500, superando a varias empresas. Esto podría indicar que tiene varios vehículos a su nombre o que sus vehículos han acumulado numerosas infracciones. En los últimos puestos se encuentran ENRIQUE JESUS ARRIETA JIMENEZ, con 2.832.500, y BENEMOTORES S.A.S., con 2.575.000.

Dentro del top 10, las empresas presentan el mayor valor adeudado, con un total de 70.040.000, que equivale al 87,2%, mientras que las personas registran 10.300.000. En conjunto, ambos grupos acumulan 80.340.000. Estos resultados permiten identificar que, dentro del top 10, las empresas concentran una mayor cantidad de dinero adeudado que las personas.


Comportamiento diario y mensual

analizar cómo se distribuyen los registros a lo largo de los días de ambos meses.

comparendos_diarios_mes <- BD_COMPARENDOS %>%
  mutate(`NOM DIA` = factor(`NOM DIA`, levels = c("LUNES", "MARTES", "MIÉRCOLES",
                                                  "JUEVES", "VIERNES", "SÁBADO", "DOMINGO"))) %>%
  group_by(`NOM MES`,`NOM DIA`) %>%
  summarise(TOTAL = sum(VALOR), .groups = "drop")


ggplot(comparendos_diarios_mes, aes(x = `NOM DIA`, y = TOTAL, color = `NOM MES`, group = `NOM MES`)) +
  geom_line(linewidth = 0.5) +
  geom_point(size = 2) +
  geom_text(aes(label = format(TOTAL, big.mark = ".", decimal.mark = ",")), color = 'black', 
                                                                            vjust = -0.7, 
                                                                            size = 3.3) +
  scale_y_continuous(labels = label_number(big.mark = ".", decimal.mark = ",")) +
  coord_cartesian(ylim = c(0, 100000000)) +
  labs(title = 'COMPARTAMIENTO DIARIO DE LOS COMPARENDOS DE CADA MES', x ='DIA', 
                                                                       y = 'TOTAL', 
                                                                       color = 'MES') +
  theme_minimal(base_family = 'Garamond') +
  theme(plot.title = element_text(size = 12, face = 'bold', hjust = 0.90),
         legend.text = element_text(size = 9))

# Formula para calcular la suma total de cada mes, su promedio y porcentaje 
resumen_mes <- comparendos_diarios_mes %>%
  rename(MES = `NOM MES`) %>%
  group_by(MES) %>%
  summarise(
    SUMA = sum(TOTAL),
    PROMEDIO = mean(TOTAL)) %>%
  mutate(
    PORCENTAJE = SUMA / sum(SUMA) * 100)


diferencias_mes <- resumen_mes %>%
  summarise(
    DIFERENCIA_TOTAL = SUMA[MES == 'MAYO'] - SUMA[MES == 'ABRIL'],
    DIFERENCIA_PROMEDIO = PROMEDIO[MES == 'MAYO'] - PROMEDIO[MES == 'ABRIL'])

En este análisis se observa que el mes de MAYO presentó el mayor valor adeudado, con un total de 427.192.500. Por su parte, ABRIL registró el menor valor adeudado, con un total de 218.875.000.

En el mes de MAYO, el día con el menor valor adeudado fue el VIERNES, con un valor de 43.260.000. En contraste, el día con el mayor valor adeudado fue el DOMINGO, con un valor de 88.322.500.

Por otro lado, en ABRIL, el día con el menor valor adeudado fueron el JUEVES y el SÁBADO, ambos con un valor de 26.780.000. Mientras que el día con el mayor valor adeudado fue el VIERNES, con un valor de 38.625.000.

En cuanto al promedio diario del valor adeudado, ABRIL registró un promedio de 31.267.857, mientras que MAYO alcanzó un promedio de 61.027.500.

Al comparar ambos meses, MAYO presentó un incremento de 208.317.500 en el valor total adeudado con respecto a ABRIL. Asimismo, la diferencia entre los promedios diarios fue de 29.759.643, lo que evidencia un mayor valor adeudado por día durante MAYO.

Finalmente, en cuanto a la participación porcentual sobre el valor total adeudado durante ambos meses, ABRIL representó el 33,88% del total, mientras que MAYO representó el 66,12%. Esto permite identificar la participación de cada mes en el valor acumulado de los comparendos analizados.


Tipos de comparendo(%) por mes

determinar qué proporción del costo total corresponde a cada infracción durante abril y mayo.

Participacion_costo <- BD_COMPARENDOS %>%
  group_by(NOM.INFRACCION, `NOM MES`) %>%
  summarise(TOTAL = sum(VALOR), .groups = 'drop') %>%
  mutate(PARTICIPACION = TOTAL / sum(TOTAL) * 100)

ggplot(Participacion_costo, aes(x = `NOM MES`, y = PARTICIPACION, fill = NOM.INFRACCION)) +
  geom_col(position = 'dodge') +
  geom_text(aes(label = paste0(format(round(PARTICIPACION, 1), decimal.mark = ','), '%')),
            position = position_dodge(width = 0.9),
            vjust = -0.3,
            size = 3.3) +
  scale_fill_manual(values = c("#DCEAF7", "#9ECAE1", "#4292C6", "#B4C6E7")) +
  scale_y_continuous(labels = function(x) paste0(x, '%'),
                     limits = c(0, 50)) +
  labs(title = 'PARTICIPACIÓN DEL COSTO POR INFRACCIÓN Y MES',
       x = 'MES', y = 'PARTICIPACIÓN %', fill = 'INFRACCIÓN') +
  theme_minimal(base_family = 'Garamond') +
  theme(plot.title = element_text(size = 12, face = 'bold', hjust = 0.2),
        legend.text = element_text(size = 11))

resumen_costo_mes <- Participacion_costo %>%
  group_by(MES = `NOM MES`) %>%
  summarise(SUMA_PARTICIPACION = sum(PARTICIPACION))


diferencias_costo <- Participacion_costo %>%
  group_by(NOM.INFRACCION) %>%
  summarise(
    MAYO = sum(PARTICIPACION[`NOM MES` == 'MAYO']),
    ABRIL = sum(PARTICIPACION[`NOM MES` == 'ABRIL']),
    .groups = 'drop'
  ) %>%
  mutate(DIFERENCIA_PP = MAYO - ABRIL)

En este análisis se observa que la infracción velocidad superior a la máxima permitida concentró la mayor participación en el costo en ambos meses, con 21,2% en ABRIL y 43,6% en MAYO. Le sigue no detenerse ante una luz roja o amarilla, con 10,7% en ABRIL y 20,0% en MAYO.

Las infracciones no respetar el paso de peatones 1,7% en ABRIL y 2,5% en MAYO y transitar en sentido contrario 0,3% en ABRIL, sin participación en MAYO presentaron una participación marginal.

Al comparar ambos meses, la velocidad superior a la máxima permitida aumentó 22,5 puntos porcentuales, y no detenerse ante una luz roja o amarilla aumentó 9,3 puntos porcentuales.

Finalmente, la suma de las participaciones de ABRIL fue de 33,88%, mientras que la de MAYO fue de 66,12%. Esto indica que los porcentajes se calcularon sobre el costo total de ambos meses, por lo que el mayor peso de MAYO explica en parte el aumento generalizado en cada infracción.


Adeudado por género y vehículo

comparar los valores acumulados correspondientes a cada género (empresa, hombre y mujer), diferenciando entre automóviles y motocicletas.

adeudado_genero_vehiculo <- BD_COMPARENDOS %>%
  group_by(GENERO,VEHICULO,`NOM MES`) %>%
  summarise(TOTAL = sum(VALOR),.groups = 'drop')


ggplot(adeudado_genero_vehiculo, aes(x = TOTAL, y = interaction(GENERO,VEHICULO, sep = ' -- '), fill = `NOM MES`)) +
         geom_col(position = 'dodge') +
         geom_text(aes(label = format(TOTAL, big.mark = ".", decimal.mark = ",")),
                   position = position_dodge(width = 0.9), hjust = 0.05, size = 3.3) +
         scale_fill_manual(values = c('#DCEAF7','#9ECAE1')) +
         scale_x_continuous(labels = label_number(big.mark = ".", decimal.mark = ","),
                            expand = expansion(mult = c(0, 0.15))) +
         labs(title = 'VALOR ADEUDADO POR GENERO Y TIPO DE VEHICULO', x = 'VALOR ADEUDADO', y = 'GENERO--VEHICULO',
                                                                      fill = 'MES') +
         theme_minimal(base_family = 'Garamond') +
         theme(plot.title = element_text(size = 12, face = 'bold', hjust = 0.5),
               legend.text = element_text(size = 9))

resumen_genero <- adeudado_genero_vehiculo %>%
  group_by(GENERO) %>%
  summarise(SUMA = sum(TOTAL)) %>%
  mutate(PORCENTAJE = SUMA / sum(SUMA) * 100)


resumen_vehiculo <- adeudado_genero_vehiculo %>%
  group_by(VEHICULO) %>%
  summarise(SUMA = sum(TOTAL)) %>%
  mutate(PORCENTAJE = SUMA / sum(SUMA) * 100)


diferencias_genero_vehiculo <- adeudado_genero_vehiculo %>%
  group_by(GENERO, VEHICULO) %>%
  summarise(
    MAYO = sum(TOTAL[`NOM MES` == 'MAYO']),
    ABRIL = sum(TOTAL[`NOM MES` == 'ABRIL']),
    .groups = 'drop'
  ) %>%
  mutate(
    DIFERENCIA = MAYO - ABRIL,
    CRECIMIENTO = DIFERENCIA / ABRIL * 100
  )

En este análisis se observa que el mayor valor adeudado se concentró en MUJER – AUTO en ambos meses, con 75.962.500 en ABRIL y 200.850.000 en MAYO. Le siguen HOMBRE – AUTO, con 65.920.000 en ABRIL y 112.270.000 en MAYO, y EMPRESA – AUTO, con 54.847.500 en ABRIL y 83.430.000 en MAYO. Las motocicletas presentaron valores considerablemente menores, con el máximo en HOMBRE – MOTO, con 11.587.500 en ABRIL y 16.995.000 en MAYO.

Al agrupar los dos meses por género, MUJER acumuló un valor adeudado de 296.640.000, que equivale al 45,9% del total. Le sigue HOMBRE, con 206.772.500, equivalente al 32%, y EMPRESA, con 142.655.000, equivalente al 22,1%.

Por tipo de vehículo, los AUTOMÓVILES representaron el 91,8% del valor adeudado, mientras que las MOTOCICLETAS representaron el 8,2%.

Finalmente, al comparar ambos meses, MUJER – AUTO presentó el mayor incremento, con un aumento de 124.887.500 en el valor adeudado, equivalente a un crecimiento del 164,4% respecto a ABRIL.


Comparendos por identificación

analizar la frecuencia de los comparendos segun el tipo de identificacion para identificar cuales presentan mayor cantidad de registros para cada tipo de identificacion.

identificacion_infraccion <- BD_COMPARENDOS %>%
  count(`TIPO DE IDENTIFICACION`, NOM.INFRACCION, name = 'CANTIDAD')


ggplot(identificacion_infraccion, aes(x = CANTIDAD, y = `TIPO DE IDENTIFICACION`, fill = NOM.INFRACCION)) +
  geom_col(position = position_dodge(width = 0.9)) +
  geom_text(aes(label = format(CANTIDAD, big.mark = ".", decimal.mark = ",", trim = TRUE)),
            position = position_dodge(width = 0.9), hjust = 0.05, size = 3.3) +
  scale_fill_manual(values = c('#DCEAF7','#9ECAE1','#4292C6','#B4C6E7')) +
  scale_x_continuous(labels = label_number(big.mark = ".", decimal.mark = ","),
                                           expand = expansion(mult = c(0,0.20))) +
  labs(title = 'COMPARENDOS POR TIPO DE IDENTIFICACION E INFRACCION', x = 'CANTIDAD', y = 'IDENTIFICACION',
                                                                      fill = 'INFRACCION') +
  theme_minimal(base_family = 'Garamond' ) +
   theme(plot.title = element_text(size = 12, face = 'bold', hjust = 0.2),
         legend.text = element_text(size = 11))

resumen_identificacion <- identificacion_infraccion %>%
  group_by(IDENTIFICACION = `TIPO DE IDENTIFICACION`) %>%
  summarise(TOTAL = sum(CANTIDAD)) %>%
  mutate(PORCENTAJE = TOTAL / sum(TOTAL) * 100)

total_comparendos <- sum(identificacion_infraccion$CANTIDAD)

En este análisis se observa que la Cedula de Ciudadanía concentró la mayor cantidad de comparendos, con un total de 1.647, que equivale al 77,7% del total de 2.120 comparendos. Le sigue el Nit, con 467 comparendos, equivalente al 22%. La Cedula de Extanjería presentó una cantidad muy baja, con solo 6 registros.

Por tipo de infracción, velocidad superior a la máxima permitida fue la más frecuente en los dos grupos principales, con 1.272 comparendos en la Cedula de Ciudadanía y 349 en el Nit. Le sigue no detenerse ante una luz roja o amarilla, con 297 y 87 comparendos, respectivamente. No respetar el paso de peatones registró 74 en la Cedula de Ciudadanía y 31 en el Nit, y transitar en sentido contrario solo apareció en la Cedula de Ciudadanía, con 4 comparendos.


5. Conclusiones

Con el análisis realizado se pudo conocer mejor el comportamiento de los comparendos durante abril y mayo. En total se adeudó un valor de 646.067.500, y mayo concentró la mayor parte, con 427.192.500, que equivale al 66,12% del total. Frente a abril, que registró 218.875.000, el valor adeudado de mayo aumentó un 95,18%, es decir que casi se duplicó. En mayo, el domingo fue el día con mayor valor adeudado, con 88.322.500, mientras que en abril el día más alto fue el viernes, con 38.625.000.

Respecto a las infracciones, la velocidad superior a la máxima permitida fue la de mayor participación en el costo, con 21,2% en abril y 43,6% en mayo. Le sigue no detenerse ante una luz roja o amarilla, con 10,7% y 20,0%. Entre las dos concentran la gran mayoría del costo, mientras que no respetar el paso de peatones y transitar en sentido contrario tuvieron una participación muy baja.

Por género y tipo de vehículo, los automóviles representaron el 91,8% del valor adeudado, y la combinación MUJER – AUTO fue la más alta, con 200.850.000 en mayo y un crecimiento del 164,4% frente a abril. Por género, las mujeres acumularon el 45,9% del total, los hombres el 32,0% y las empresas el 22,1%.

En cuanto a los ejecutados, dentro del top 10 las empresas concentraron el 87,2% del valor adeudado, con LEASING BANCOLOMBIA S.A. C.F. en el primer lugar, con 19.827.500. Por tipo de identificación, la Cedula de Ciudadanía tuvo la mayor cantidad de comparendos, con el 77,7% del total, seguida del Nit, con el 22,0%. En ambos grupos la velocidad superior a la máxima permitida fue la infracción más frecuente.