La base de datos BD_Comparendos contiene información sobre las infracciones de tránsito registradas en la ciudad de Barranquilla durante los meses de abril y mayo de 2010. En ella se documentan los comparendos impuestos a conductores de automóviles, motocicletas y empresas que incumplieron las normas de tránsito vigentes.
Las infracciones registradas incluyen conductas como conducir a velocidad superior a la permitida, no detenerse ante un semáforo en rojo o amarillo, no respetar el paso de peatones y transitar en sentido contrario. El objetivo de este informe es identificar patrones en las infracciones cometidas, el perfil de los infractores, los tipos de vehículos involucrados y los costos económicos que generaron las multas durante el período analizado.
df <- read_excel("BD_Comparendos_OK__-_TAD__1__jaider___2_.xlsx",
sheet = "Data Original (2)")
names(df) <- c("mandamiento", "fecha_mandamiento", "ejecutado",
"tipo_id", "num_id", "genero", "cod_infraccion",
"nom_infraccion", "comparendo", "fecha_comparendo",
"dia", "nom_dia", "mes", "nom_mes", "anio",
"placa", "vehiculo_raw", "costo",
"extra1", "extra2", "extra3", "extra4", "extra5", "extra6")
df <- df %>%
mutate(
vehiculo = case_when(
grepl("[A-Za-z]$", trimws(placa)) ~ "Moto",
grepl("[0-9]$", trimws(placa)) ~ "Auto",
TRUE ~ "Desconocido"
),
nom_mes = case_when(
mes == 4 ~ "Abril",
mes == 5 ~ "Mayo",
TRUE ~ as.character(mes)
),
costo = as.numeric(costo)
) %>%
filter(!is.na(comparendo), !is.na(genero))La base de datos cuenta con 2.120 registros y 18 variables. A continuación se muestra una muestra de los primeros registros para conocer la estructura de la información.
## Total de registros: 2120
## Variables: 19
df %>%
select(ejecutado, genero, nom_infraccion, nom_mes, vehiculo, costo) %>%
head(8) %>%
kable(caption = "Primeros registros de la base de datos")| ejecutado | genero | nom_infraccion | nom_mes | vehiculo | costo |
|---|---|---|---|---|---|
| AARON JOSE SANTIAGO DULCE | HOMBRE | Conducir un vehículo a velocidad superior a la máxima permitida. | Abril | Auto | 257500 |
| AARON JOSE SANTIAGO DULCE | HOMBRE | Conducir un vehículo a velocidad superior a la máxima permitida. | Mayo | Auto | 257500 |
| ACADEMIA DE CONDUCCION DEL LIT | EMPRESA | Conducir un vehículo a velocidad superior a la máxima permitida. | Abril | Auto | 257500 |
| ACADEMIA DE CONDUCCION DEL LIT | EMPRESA | Conducir un vehículo a velocidad superior a la máxima permitida. | Mayo | Auto | 257500 |
| ACGUTIERREZ Y CIA SCA | EMPRESA | Conducir un vehículo a velocidad superior a la máxima permitida. | Mayo | Auto | 257500 |
| ACOLCHADOS Y LENCERIAS DE LA | EMPRESA | Conducir un vehículo a velocidad superior a la máxima permitida. | Mayo | Auto | 257500 |
| ADA MARIA RUIZ MARIN | MUJER | Conducir un vehículo a velocidad superior a la máxima permitida. | Mayo | Auto | 257500 |
| ADA MARIA RUIZ MARIN | MUJER | Conducir un vehículo a velocidad superior a la máxima permitida. | Mayo | Auto | 257500 |
En esta sección se identifican los tipos de infracciones más cometidas. La tabla y el gráfico muestran que la infracción predominante es conducir a velocidad superior a la máxima permitida, representando más del 76% de los comparendos registrados, seguida por no detenerse ante un semáforo en rojo o amarillo.
df %>%
# count() cuenta cuántos comparendos hay por cada tipo de infracción.
# sort = TRUE los ordena de mayor a menor cantidad.
count(nom_infraccion, sort = TRUE) %>%
# rename() cambia los nombres de las columnas para la tabla.
rename(Infracción = nom_infraccion, Cantidad = n) %>%
# kable() convierte el resultado en una tabla HTML dentro del informe.
kable(caption = "Cantidad de comparendos por tipo de infracción")| Infracción | Cantidad |
|---|---|
| Conducir un vehículo a velocidad superior a la máxima permitida. | 1626 |
| No detenerse ante una luz roja o amarilla de semáforo | 385 |
| No respetar el paso de peatones | 105 |
| Transitar en sentido contrario al estipulado para la vía | 4 |
df %>%
# Cuenta los comparendos agrupados por tipo de infracción.
count(nom_infraccion, sort = TRUE) %>%
# reorder() ordena las barras de menor a mayor para que se lean mejor.
# fill asigna un color distinto a cada tipo de infracción.
ggplot(aes(x = reorder(nom_infraccion, n), y = n, fill = nom_infraccion)) +
# geom_col() dibuja las barras con la altura igual a la cantidad (n).
geom_col(show.legend = FALSE) +
# geom_text() escribe el número exacto al final de cada barra.
# hjust = -0.3 lo desplaza ligeramente hacia afuera para que no tape la barra.
geom_text(aes(label = n), hjust = -0.3, size = 3.5) +
# expansion() agrega espacio extra en el extremo derecho para las etiquetas.
scale_y_continuous(expand = expansion(mult = c(0, 0.12))) +
# coord_flip() voltea el gráfico para que las barras queden horizontales.
coord_flip() +
# scale_fill_brewer() aplica una paleta de colores predefinida de RColorBrewer.
scale_fill_brewer(palette = "Dark2") +
labs(title = "Comparendos por tipo de infracción",
x = NULL, y = "Cantidad") +
theme_minimal()Se analiza la distribución de comparendos según el género del infractor. Los resultados muestran que las mujeres concentran el mayor número de infracciones entre los infractores individuales, seguidas por los hombres. Las empresas también representan una parte significativa de los registros, ya que los vehículos a su nombre acumularon varias multas.
df %>%
# Cuenta los comparendos registrados para cada categoría de género.
count(genero, sort = TRUE) %>%
# mutate() agrega una nueva columna con el porcentaje de cada género.
# round(..., 1) deja un decimal; paste0() le añade el símbolo % al final.
mutate(Porcentaje = paste0(round(n / sum(n) * 100, 1), "%")) %>%
# Cambia los nombres de las columnas para presentar la tabla.
rename(Género = genero, Cantidad = n) %>%
kable(caption = "Comparendos por género del infractor")| Género | Cantidad | Porcentaje |
|---|---|---|
| MUJER | 970 | 45.8% |
| HOMBRE | 683 | 32.2% |
| EMPRESA | 467 | 22% |
df %>%
# Cuenta los registros de cada categoría de género.
count(genero) %>%
# x = "" crea una sola barra apilada que luego se convierte en torta.
ggplot(aes(x = "", y = n, fill = genero)) +
# geom_col() apila los segmentos uno sobre otro con altura proporcional.
geom_col(width = 1) +
# geom_text() escribe la cantidad en el centro de cada segmento.
# position_stack(vjust = 0.5) centra verticalmente cada etiqueta.
geom_text(aes(label = n), position = position_stack(vjust = 0.5), size = 4) +
# coord_polar() convierte la barra apilada en un gráfico de torta.
coord_polar(theta = "y") +
# Asigna un color específico a cada categoría de género.
scale_fill_manual(values = c("HOMBRE" = "#264653",
"MUJER" = "#E76F51",
"EMPRESA"= "#2A9D8F")) +
labs(title = "Comparendos por género", fill = "Género") +
# theme_void() elimina ejes y fondo para que solo se vea la torta.
theme_void()El gráfico refleja que la mayoría de las infracciones fueron cometidas por conductores de automóviles, lo cual es coherente con la mayor proporción de este tipo de vehículo en circulación. Las motocicletas representan una minoría dentro de los registros.
df %>%
# Cuenta cuántos comparendos corresponden a cada tipo de vehículo.
count(vehiculo) %>%
# Calcula el porcentaje de cada tipo sobre el total de comparendos.
mutate(Porcentaje = paste0(round(n / sum(n) * 100, 1), "%")) %>%
# Renombra las columnas para que la tabla sea más legible.
rename(Vehículo = vehiculo, Cantidad = n) %>%
kable(caption = "Comparendos por tipo de vehículo")| Vehículo | Cantidad | Porcentaje |
|---|---|---|
| Auto | 1939 | 91.5% |
| Moto | 181 | 8.5% |
df %>%
# Cuenta los registros de cada categoría de vehículo.
count(vehiculo) %>%
# x = vehiculo coloca cada tipo en el eje horizontal; y = n la cantidad.
ggplot(aes(x = vehiculo, y = n, fill = vehiculo)) +
# width = 0.5 hace las barras más delgadas para mejor presentación visual.
# show.legend = FALSE oculta la leyenda porque el eje ya identifica cada barra.
geom_col(width = 0.5, show.legend = FALSE) +
# vjust = -0.5 coloca la etiqueta justo encima de cada barra.
geom_text(aes(label = n), vjust = -0.5, size = 4) +
# Deja espacio en la parte superior para que las etiquetas no queden cortadas.
scale_y_continuous(expand = expansion(mult = c(0, 0.12))) +
# Asigna azul a los autos y naranja a las motos.
scale_fill_manual(values = c("Auto" = "#3A5A98", "Moto" = "#F4A261")) +
labs(title = "Comparendos por tipo de vehículo",
x = "Tipo de vehículo", y = "Cantidad") +
theme_minimal()Al comparar los dos meses registrados, se observa que mayo concentra un mayor número de comparendos que abril. Esto puede deberse a que el período de registro en mayo abarca más días dentro de la base de datos.
df %>%
# Cuenta cuántos comparendos se registraron en cada mes.
count(nom_mes) %>%
# Renombra las columnas para presentar la tabla de forma clara.
rename(Mes = nom_mes, Cantidad = n) %>%
kable(caption = "Comparendos por mes")| Mes | Cantidad |
|---|---|
| Abril | 712 |
| Mayo | 1408 |
df %>%
# Cuenta los comparendos de cada mes para construir el gráfico.
count(nom_mes) %>%
# fill = nom_mes asigna un color diferente a cada mes.
ggplot(aes(x = nom_mes, y = n, fill = nom_mes)) +
# width = 0.6 hace las barras un poco más angostas que el valor por defecto.
# show.legend = FALSE oculta la leyenda porque el eje ya indica el mes.
geom_col(width = 0.6, show.legend = FALSE) +
# Escribe la cantidad exacta encima de cada barra.
geom_text(aes(label = n), vjust = -0.5, size = 4) +
# Aplica morado claro para Abril y morado oscuro para Mayo.
scale_fill_manual(values = c("Abril" = "#B8A1D9", "Mayo" = "#7353A6")) +
# Deja espacio superior para que los números no queden cortados.
scale_y_continuous(expand = expansion(mult = c(0, 0.12))) +
labs(title = "Comparendos por mes",
x = "Mes", y = "Cantidad") +
theme_minimal()Se analizan los valores económicos de las multas impuestas. Existen únicamente dos valores posibles: $257.500 para infracciones de menor gravedad como exceso de velocidad y no respetar el paso de peatones, y $515.000 para infracciones graves como saltarse un semáforo. El gráfico de distribución confirma que la mayoría de las multas corresponden al valor menor, en línea con la infracción más frecuente.
df %>%
# summarise() colapsa todo el dataframe en una sola fila con los resúmenes.
summarise(
# min() obtiene el costo más bajo; na.rm = TRUE ignora valores vacíos.
# dollar() formatea el número como moneda con el símbolo $.
`Mínimo` = dollar(min(costo, na.rm = TRUE), prefix = "$"),
# max() obtiene el costo más alto registrado.
`Máximo` = dollar(max(costo, na.rm = TRUE), prefix = "$"),
# mean() calcula el promedio de todos los costos.
`Promedio`= dollar(mean(costo, na.rm = TRUE), prefix = "$"),
# sum() suma todos los costos para obtener el total acumulado.
`Total` = dollar(sum(costo, na.rm = TRUE), prefix = "$")
) %>%
kable(caption = "Resumen de costos de comparendos")| Mínimo | Máximo | Promedio | Total |
|---|---|---|---|
| $257,500 | $515,000 | $304,749 | $646,067,500 |
df %>%
# group_by() agrupa los datos por tipo de infracción.
# Los cálculos de summarise() se aplican dentro de cada grupo.
group_by(nom_infraccion) %>%
summarise(
# n() cuenta cuántos comparendos hay en cada grupo.
Cantidad = n(),
# Calcula el costo promedio dentro de cada tipo de infracción.
`Costo promedio` = dollar(mean(costo, na.rm = TRUE), prefix = "$"),
# Suma los costos de cada tipo para obtener el total por infracción.
`Costo total` = dollar(sum(costo, na.rm = TRUE), prefix = "$")
) %>%
# arrange(desc()) ordena la tabla de mayor a menor cantidad de comparendos.
arrange(desc(Cantidad)) %>%
kable(caption = "Costos por tipo de infracción")| nom_infraccion | Cantidad | Costo promedio | Costo total |
|---|---|---|---|
| Conducir un vehículo a velocidad superior a la máxima permitida. | 1626 | $257,500 | $418,695,000 |
| No detenerse ante una luz roja o amarilla de semáforo | 385 | $515,000 | $198,275,000 |
| No respetar el paso de peatones | 105 | $257,500 | $27,037,500 |
| Transitar en sentido contrario al estipulado para la vía | 4 | $515,000 | $2,060,000 |
df %>%
# Cuenta cuántas multas hay para cada valor de costo.
count(costo) %>%
# factor(costo) trata los valores numéricos como categorías en el eje x.
ggplot(aes(x = factor(costo), y = n, fill = factor(costo))) +
# Dibuja las barras; show.legend = FALSE elimina la leyenda redundante.
geom_col(show.legend = FALSE) +
# Escribe la cantidad exacta encima de cada barra.
geom_text(aes(label = n), vjust = -0.5, size = 4) +
# Asigna verde azulado al valor menor y coral al valor mayor.
scale_fill_manual(values = c("257500" = "#2A9D8F", "515000" = "#E76F51")) +
# Deja espacio en la parte superior para las etiquetas de cantidad.
scale_y_continuous(expand = expansion(mult = c(0, 0.12))) +
# scale_x_discrete() reemplaza los números por etiquetas con formato de moneda.
scale_x_discrete(labels = c("257500" = "$257.500", "515000" = "$515.000")) +
labs(title = "Distribución de valores de comparendos",
x = "Valor del comparendo", y = "Cantidad") +
theme_minimal()La tabla muestra los 10 infractores con mayor número de comparendos acumulados. Se destacan tanto personas naturales como empresas que acumularon múltiples multas durante el período analizado, lo que sugiere una reincidencia en el incumplimiento de las normas de tránsito.
df %>%
# count() cuenta los comparendos por nombre del infractor.
# sort = TRUE los ordena de mayor a menor número de comparendos.
count(ejecutado, sort = TRUE) %>%
# head(10) conserva únicamente los diez primeros del listado.
head(10) %>%
# Renombra las columnas para que la tabla sea más comprensible.
rename(`Nombre` = ejecutado, `N° comparendos` = n) %>%
kable(caption = "Top 10 infractores con más comparendos")| Nombre | N° comparendos |
|---|---|
| LEASING BANCOLOMBIAA SA CF | 61 |
| FINANCIERA INTERNACIONAL SA | 32 |
| TRANSPORTES MST Y CIA SENC | 31 |
| LEASING DE OCCIDENTE SA CF | 28 |
| LILIANA ROZO PINZON | 27 |
| GMAC FINANCIERA DE COLOMBIA | 21 |
| LEASING DE CREDITO SA | 21 |
| TRANSPORTES MST Y CIA S EN C | 17 |
| UINON FAMILIAR CHARRIS SEN C | 13 |
| ELVIRA DEL CARMEN GARRIDO AREVALO | 10 |
La infracción más común es el exceso de velocidad, presente en más del 76% de los casos.
Los automóviles son el tipo de vehículo con más comparendos.
Mayo registró más infracciones que abril.
Las multas se concentran en el valor de $257.500, correspondiente a infracciones de menor gravedad.
Algunos infractores acumularon varios comparendos, evidenciando reincidencia en las infracciones.
La infracción más frecuente es exceder la velocidad máxima permitida (más del 76% de los casos).
Las mujeres representan el mayor grupo de infractores individuales, seguidas por hombres y empresas.
La gran mayoría de los comparendos corresponden a automóviles.
El mes de mayo concentra más comparendos que abril.
Existen dos valores de multa: $257.500 (infracciones leves) y $515.000 (más graves como semáforo en rojo).