knitr::include_graphics("logoSena.png")

1 Introducción

En este documento se realiza una breve exploración de la base de datos Comparendos, que contiene información relacionada con infracciones de tránsito en la ciudad de Barranquilla, en el periodo Abril-Mayo del año 2010. Con el fin de obtener una visión general de la situación presentada, se realizarón gráficos que muestran la cantidad de comparendos reportados con respecto al tipo de infracción, el tipo de vehiculo, los meses registrados, el sexo del infractor, etc.Se utilizarán herramientas básicas de R para importar, visualizar y analizar los datos. A continuación se muestra la información brindada por la base de datos elegida.
names(Comparendos)
##  [1] "No..MANDAMIENTO.DE.PAGO"   "FECHA.MANDAMIENTO.DE.PAGO"
##  [3] "EJECUTADO"                 "TIPO.DE.IDENTIFICACION"   
##  [5] "No..IDENTIFICACION"        "SEXO"                     
##  [7] "COD..INFRACCION"           "COMPARENDO"               
##  [9] "FECHA.DE.COMPARENDO"       "FECHA"                    
## [11] "AÑO"                       "DIA"                      
## [13] "MES"                       "NOMBRE.DEL.MES"           
## [15] "PACA.DE.VEHICULO"          "TIPO.DE.VEHICULO"         
## [17] "VALOR_A_PAGAR"

1.1 Diccionario de variables

Este resumen ofrece una descripción general de las variables numéricas y categóricas del conjunto de datos.
#
Comparendos %>%
  summarise(across(everything(), class)) %>%  # Obtener clase de cada columna
  pivot_longer(
    everything(),
    names_to = "Variable",
    values_to = "Clase"
  ) %>%
  mutate(Descripcion = case_when(
    Variable == "No..MANDAMIENTO.DE.PAGO" ~ "Número del mandamiento de pago",
    Variable == "FECHA.MANDAMIENTO.DE.PAGO" ~ "Fecha del mandamiento de pago",
    Variable == "EJECUTADO" ~ "Estado del comparendo",
    Variable == "TIPO.DE.IDENTIFICACION" ~ "Tipo de documento del infractor",
    Variable == "No..IDENTIFICACION" ~ "Número de identificación del infractor",
    Variable == "SEXO" ~ "Sexo del infractor (F, M, Empresa, Cédula nueva)",
    Variable == "COD..INFRACCION" ~ "Código de la infracción cometida",
    Variable == "COMPARENDO" ~ "Número del comparendo",
    Variable == "FECHA.DE.COMPARENDO" ~ "Fecha de emisión del comparendo (YYYYMMDD)",
    Variable == "FECHA" ~ "Fecha en formato caracter",
    Variable == "AÑO" ~ "Año de la infracción",
    Variable == "DIA" ~ "Día de la infracción",
    Variable == "MES" ~ "Mes de la infracción",
    Variable == "NOMBRE.DEL.MES" ~ "Nombre del mes de la infracción",
    Variable == "PACA.DE.VEHICULO" ~ "Placa del vehículo",
    Variable == "TIPO.DE.VEHICULO" ~ "Tipo de vehículo",
    Variable == "VALOR_A_PAGAR" ~ "Valor monetario a pagar",
    TRUE ~ ""  # Por si hay variables adicionales
  )) %>%
  kable(caption = "Clases y descripción de cada variable en el dataset")
Clases y descripción de cada variable en el dataset
Variable Clase Descripcion
No..MANDAMIENTO.DE.PAGO character Número del mandamiento de pago
FECHA.MANDAMIENTO.DE.PAGO character Fecha del mandamiento de pago
EJECUTADO character Estado del comparendo
TIPO.DE.IDENTIFICACION character Tipo de documento del infractor
No..IDENTIFICACION numeric Número de identificación del infractor
SEXO character Sexo del infractor (F, M, Empresa, Cédula nueva)
COD..INFRACCION integer Código de la infracción cometida
COMPARENDO character Número del comparendo
FECHA.DE.COMPARENDO integer Fecha de emisión del comparendo (YYYYMMDD)
FECHA character Fecha en formato caracter
AÑO integer Año de la infracción
DIA integer Día de la infracción
MES integer Mes de la infracción
NOMBRE.DEL.MES character Nombre del mes de la infracción
PACA.DE.VEHICULO character Placa del vehículo
TIPO.DE.VEHICULO character Tipo de vehículo
VALOR_A_PAGAR character Valor monetario a pagar

1.2 Control de calidad de los datos

Antes de realizar el análisis, se verifico la integridad de los datos teniendo en cuenta las siguientes caracteristicas:

  • Valores faltantes: Ninguna variable critica tiene NA significativos.

  • Variables categoricas incosistentes: Se identifico que la columna SEXO incluye categorias incorrectas como “EMPRESA” y “CEDULA NUEVA”.

  • Formatos de variables: Se convirtieron fechas a formato Date y el valor_a_pagar a formato numerico.

1.3 Librerias utilizadas

Para realizar este informe se hizo uso de las siguientes librerias:

  • knitr: Es una libreria que convierte los resultados de R en formatos bonitos dentro de los documentos Markdown, HTML, word o PDF.

  • readr: Forma parde del tidyverse y ayuda a importar datos desde archivos de texto (CSV, TSV, etc)

  • dplyr: Una de las librerias más importantes del tidyverse, sirve para manipular y transformar datos de manera eficiente.

  • ggplot2: Libreria para visualización de datos basada en la gramatica de los gráficos.

  • tidyverse: Conjunto de paquetes diseñados para trabajar juntos de manera coherente en el flujo de analisis de datos (lectura, manipulación, visualización).

2 Consultas a la base de datos

2.1 Total de registros

Se realiza la consulta del total de registros en la base de datos importada con el fin de verificar la integridad de los datos, es decir, que todos se hayan importado correctamente. Del mismo modo ayuda a contextualizar los resultados obtenidos y comprender la magnitud del analisis realizado. En este caso, el analisis se realizó 2.120 comparendos registrados entre abril y mayo del año 2010.
nrow(Comparendos)
## [1] 2120

2.2 Conteo por tipo de infracción

En esta consulta se muestran la cantidad de comparendos registrados según el tipo de infracción cometida, puede consultar las tarifas actualizadas en la ciudad de Barranquilla aqui. En el gráfico se logra observar una clara desigualdad en la distribución de infracciones, siendo el codigo 64 la que presenta mayoria de casos y el cual corresponde a infracciones por exceso de velocidad.
Comparendos %>%
  count(COD..INFRACCION) %>%                    # Cuenta las infracciones
  arrange(desc(n)) %>%                           # Ordena de mayor a menor
  head(10) %>%                                  # Toma las 10 primeras filas
  ggplot(aes(x = reorder(COD..INFRACCION, n), y = n)) +  # Gráfico con eje x reordenado
  geom_col(fill = "#4CAF50", width = 0.6) +    # Barras verdes y un poco más delgadas
  coord_flip() +                                # Barras horizontales
  labs(title = "Cantidad de infracciones por tipos",
       x = "Tipo de infraccion",
       y = "Cantidad") +
  theme_minimal(base_size = 13) +               # Tema minimal con tamaño base 13
  theme(
    plot.title = element_text(face = "bold", color = "#006400", hjust = 0.5),  # Título verde oscuro, centrado y en negrita
    axis.title = element_text(color = "#228B22"),    # Títulos ejes en verde
    axis.text = element_text(color = "#004d00")      # Texto de ejes en verde oscuro
  ) +
  geom_text(aes(label = n), 
            vjust = 0.5, hjust = 1,               # Texto dentro de la barra, centrado verticalmente y a la izquierda
            color = "#004d00",                     # Color verde oscuro para el texto
            size = 5)

2.3 Comparendos por mes

En este gráfico se muestra la cantidad de comparendos registrados por mes, en el cual se observa un aumento del doble de registros en el mes de mayo con respecto al mes de abril.
Comparendos %>%
  count(NOMBRE.DEL.MES)  %>% 
  arrange((n)) %>%
  ggplot(aes(x = NOMBRE.DEL.MES, y = n, fill = NOMBRE.DEL.MES)) +
  geom_col(width = 0.6, show.legend = FALSE) +  # gráfico de columnas
  scale_fill_manual(values = c("#4CAF50", "#2E8B57")) +  # colores personalizados
  labs(title = "Numero de comparendos por mes",
       x = "Mes",
       y = "Cantidad de comparendos") +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", color = "#006400", hjust = 0.5),
    axis.title = element_text(color = "#228B22"),
    axis.text = element_text(color = "#004d00")
  ) +
  geom_text(aes(label = n), vjust = -0.2, color = "#004d00", size = 5)

2.4 Comparendos por sexo

A continuación, se muestra la proporción de comparendos por sexo, en la que se aprecia que las mujeres tienen una proporción de comparendos más alta, seguidas por los hombres y empresas. Sin embargo se debe resaltar la definicion de esta categoria debido a la inclusión de "empresa" y "cedula nueva", y estas no deberian corresponder como tal al apartado de sexo.
# Gráfico: Distribución de comparendos por sexo
Comparendos %>%
  count(SEXO) %>%
  mutate(porcentaje = round(100 * n / sum(n), 1)) %>%
  ggplot(aes(x = reorder(SEXO, -n), y = n, fill = SEXO)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = paste0(porcentaje, "%")), 
            vjust = -0.5, color = "#006400", size = 4, fontface = "bold") +
  scale_fill_manual(values = c("#2E8B57", "#66BB6A", "#A5D6A7", "#B9F6CA")) +
  labs(title = "Distribucion de comparendos por sexo",
       x = "Sexo",
       y = "Cantidad de comparendos") +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", color = "#006400", size = 15, hjust = 0.5),
    axis.title = element_text(color = "#228B22"),
    axis.text = element_text(color = "#004d00")
  )

2.5 Tipo de infracciones cometidas por mujeres

Con el fin de visualizar mejor el comportamiento de infracciones femeninas, se hace la consulta de la distribucion de infracciones cometidas por mujeres, en esta observamos que la infracción con codigo 64 es por mucho la mas comun, representando tres cuartas partes del total de comparendos registrados a mujeres. Mientras, la infraccion 76 sigue siendo casi inexistente, representando apenas un 0.1% del total.
Comparendos %>%
  filter(SEXO == "MUJER", !is.na(COD..INFRACCION)) %>%
  mutate(COD..INFRACCION = factor(COD..INFRACCION)) %>%  # <-- Convertimos a factor
  count(COD..INFRACCION) %>%
  mutate(porcentaje = round(100 * n / sum(n), 1)) %>%
  ggplot(aes(x = reorder(COD..INFRACCION, -n), y = n, fill = COD..INFRACCION)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = paste0(porcentaje, "%")), 
            vjust = -0.5, color = "#006400", size = 4, fontface = "bold") +
  scale_fill_brewer(palette = "Set2") +
  labs(title = "Tipos de infracciones cometidas por mujeres",
       x = "Tipo de infraccion",
       y = "Cantidad de comparendos") +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", color = "#006400", size = 15, hjust = 0.5),
    axis.title = element_text(color = "#228B22"),
    axis.text = element_text(color = "#004d00"),
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

2.6 Cantidad de comparendos por tipo de vehiculo

En este grafico pastel se muestra la distribución de comparendos por tipo de vehiculo, se puede observar que hay una alta concentración de infracciones en los automoviles, lo que puede implicar un mayor numero de carros circulando en la ciudad.
Comparendos %>%
  count(TIPO.DE.VEHICULO) %>%
  mutate(porcentaje = round(100 * n / sum(n), 1),
         etiqueta = paste0(TIPO.DE.VEHICULO, " (", porcentaje, "%)")) %>%
  ggplot(aes(x = "", y = porcentaje, fill = TIPO.DE.VEHICULO)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  scale_fill_manual(values = c("#2E8B57", "#66BB6A", "#A5D6A7", "#B9F6CA", "#81C784")) +
  geom_text(aes(label = paste0(porcentaje, "%")),
            position = position_stack(vjust = 0.5), color = "#006400", size = 4) +
  labs(title = "Distribucion de comparendos por tipo de vehiculo",
       fill = "Tipo de vehiculo") +
  theme_void() +
  theme(
    plot.title = element_text(face = "bold", color = "#006400", size = 15, hjust = 0.5),
    legend.title = element_text(color = "#228B22", face = "bold"),
    legend.text = element_text(color = "#004d00")
  )

3 Conclusiones

  • El tipo de infracción 64 es, con diferencia, el más frecuente, representando una gran mayoría del total de infracciones. Esto sugiere que hay un tipo de infracción dominante que podría requerir atención prioritaria en campañas de prevención o control.

  • Las mujeres encabezan la cantidad de comparendos con alrededor del 44%, seguidas por los hombres (29%).

  • Los vehiculos con mayores numeros de comparendos son los carros, representando un 91.4% de los registros totales.

3.1 Limitaciones del análisis

La base de datos cubre solamente dos meses del año 2010, lo que genera un limitante para un analisis completo, la variable SEXO cuenta con registros incorrectos o mal categorizados y, del mismo modo, la variable valor_a_pagar requiere una limpieza para generar un analisis financiero completo.