Este informe desarrolla un análisis exploratorio de los registros de comparendos incluidos en el archivo suministrado. Se utiliza la hoja Data Original (2) porque contiene 17 variables, entre ellas género o tipo de ejecutado, descripción de la infracción, fecha, día de la semana y tipo de vehículo.
El documento está diseñado para que el código pueda consultarse y ejecutarse. Cada bloque de código dispone de una explicación funcional y una nota de interpretación. Los gráficos permanecen fijos, sin controles para ampliar o reducir la vista, y muestran etiquetas numéricas directamente sobre las barras o columnas para facilitar la lectura. Cuando corresponde, también se pueden consultar detalles al pasar el cursor; las tablas permiten buscar, ordenar y recorrer registros.
Alcance: la base analizada contiene registros fechados entre abril y mayo de 2010. Por tanto, los resultados describen exclusivamente ese periodo y no representan todo el año ni otros años.
Enfoque del análisis: El informe tiene un alcance descriptivo: caracteriza los registros, identifica frecuencias y compara categorías. Los resultados no permiten establecer causas ni atribuir responsabilidades; se limitan a la información contenida en el archivo.
Carga las bibliotecas que permiten importar Excel, transformar los datos, construir gráficos interactivos y presentar tablas con opciones de búsqueda. Si alguna biblioteca no está instalada, el código la instala automáticamente.
# Lista de bibliotecas necesarias para importar, transformar y visualizar los datos.
paquetes <- c("readxl", "dplyr", "ggplot2", "plotly", "DT", "knitr", "scales", "lubridate", "stringr", "tidyr", "htmltools")
faltantes <- paquetes[!paquetes %in% rownames(installed.packages())]
if (length(faltantes) > 0) {
install.packages(faltantes, repos = "https://cloud.r-project.org")
}
invisible(lapply(paquetes, library, character.only = TRUE))
Función de las bibliotecas: Las bibliotecas amplían
las funciones de R utilizadas en el proyecto: readxl
importa libros de Excel; dplyr transforma y resume tablas;
ggplot2 construye gráficos; plotly añade
consulta interactiva; y DT presenta tablas con búsqueda y
filtros. El bloque verifica e instala los paquetes que no estén
disponibles.
Lee la hoja Data Original (2) del libro de Excel. Si el archivo no está en la carpeta de trabajo de R, se debe seleccionar o copiar allí. Luego muestra las primeras filas para comprobar que la importación se realizó correctamente.
# Obtiene el nombre del Excel indicado en los parámetros del informe.
archivo <- params$archivo
if (!file.exists(archivo)) {
message("Selecciona el archivo Excel de comparendos")
archivo <- file.choose()
}
base_original <- readxl::read_excel(archivo, sheet = params$hoja)
cat("Filas:", nrow(base_original), "| Columnas:", ncol(base_original))
## Filas: 2120 | Columnas: 17
knitr::kable(head(base_original, 6), caption = "Primeros seis registros importados")
| No. MANDAMIENTO DE PAGO | FECHA MANDAMIENTO DE PAGO | EJECUTADO | TIPO DE IDENTIFICACION | No. IDENTIFICACION | GENERO | COD. INFRACCION | NOM.INFRACCION | COMPARENDO | FECHA DE COMPARENDO | AÑO | MES | NOM MES | DIA | NOM DIA | PLACA DE VEHICULO | VEHICULO |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| F00001478 | 19/08/2010 | ZULLY PATRICIA IBARRA DONADO | Cedula de Ciudadanía | 22617126 | MUJER | 64 | velocidad superior a la maxima permitida | F00014049 | 2010-05-22 | 2010 | 5 | MAYO | 22 | SÁBADO | UZD459 | AUTO |
| F00002105 | 19/08/2010 | ZULIMA DEL CARMEN HENNESSEY CLAVIJO | Cedula de Ciudadanía | 32770170 | MUJER | 67 | No respetar el paso de peatones | F00014095 | 2010-05-22 | 2010 | 5 | MAYO | 22 | SÁBADO | UYM861 | AUTO |
| F00003509 | 19/08/2010 | ZOOCRIADERO COLOMBIAN CROCO LI | Nit | 800120048 | EMPRESA | 64 | velocidad superior a la maxima permitida | F00013652 | 2010-05-20 | 2010 | 5 | MAYO | 20 | JUEVES | QHI400 | AUTO |
| F00003510 | 19/08/2010 | ZOOCRIADERO COLOMBIAN CROCO LI | Nit | 800120048 | EMPRESA | 64 | velocidad superior a la maxima permitida | F00009388 | 2010-05-08 | 2010 | 5 | MAYO | 8 | SÁBADO | QHI400 | AUTO |
| F00003511 | 19/08/2010 | ZOOCRIADERO COLOMBIAN CROCO LI | Nit | 800120048 | EMPRESA | 64 | velocidad superior a la maxima permitida | F00010959 | 2010-05-12 | 2010 | 5 | MAYO | 12 | MIÉRCOLES | QHI400 | AUTO |
| F00003512 | 19/08/2010 | ZOOCRIADERO COLOMBIAN CROCO LI | Nit | 800120048 | EMPRESA | 64 | velocidad superior a la maxima permitida | F00007540 | 2010-05-03 | 2010 | 5 | MAYO | 3 | LUNES | QHI400 | AUTO |
Criterio de importación: La función
read_excel() carga la hoja definida en los parámetros del
informe. La revisión de dimensiones y de las primeras filas permite
comprobar que la lectura se realizó correctamente y que se importaron
las variables previstas.
Consulta los nombres y tipos de columnas, cuenta los valores faltantes y detecta registros duplicados. La revisión no elimina filas automáticamente: primero informa los hallazgos para que la decisión de depuración sea transparente.
# Normalizar espacios sobrantes en los nombres de las columnas para evitar errores al referenciar variables
names(base_original) <- trimws(names(base_original))
# Resumen de dimensiones y tipos de variables
cat("Número de registros:", nrow(base_original), "\n")
## Número de registros: 2120
cat("Número de variables:", ncol(base_original), "\n\n")
## Número de variables: 17
str(base_original)
## tibble [2,120 × 17] (S3: tbl_df/tbl/data.frame)
## $ No. MANDAMIENTO DE PAGO : chr [1:2120] "F00001478" "F00002105" "F00003509" "F00003510" ...
## $ FECHA MANDAMIENTO DE PAGO: chr [1:2120] "19/08/2010" "19/08/2010" "19/08/2010" "19/08/2010" ...
## $ EJECUTADO : chr [1:2120] "ZULLY PATRICIA IBARRA DONADO" "ZULIMA DEL CARMEN HENNESSEY CLAVIJO" "ZOOCRIADERO COLOMBIAN CROCO LI" "ZOOCRIADERO COLOMBIAN CROCO LI" ...
## $ TIPO DE IDENTIFICACION : chr [1:2120] "Cedula de Ciudadanía" "Cedula de Ciudadanía" "Nit" "Nit" ...
## $ No. IDENTIFICACION : num [1:2120] 2.26e+07 3.28e+07 8.00e+08 8.00e+08 8.00e+08 ...
## $ GENERO : chr [1:2120] "MUJER" "MUJER" "EMPRESA" "EMPRESA" ...
## $ COD. INFRACCION : num [1:2120] 64 67 64 64 64 64 64 64 64 64 ...
## $ NOM.INFRACCION : chr [1:2120] "velocidad superior a la maxima permitida" "No respetar el paso de peatones" "velocidad superior a la maxima permitida" "velocidad superior a la maxima permitida" ...
## $ COMPARENDO : chr [1:2120] "F00014049" "F00014095" "F00013652" "F00009388" ...
## $ FECHA DE COMPARENDO : POSIXct[1:2120], format: "2010-05-22" "2010-05-22" ...
## $ AÑO : num [1:2120] 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
## $ MES : num [1:2120] 5 5 5 5 5 5 5 5 5 5 ...
## $ NOM MES : chr [1:2120] "MAYO" "MAYO" "MAYO" "MAYO" ...
## $ DIA : num [1:2120] 22 22 20 8 12 3 23 2 27 18 ...
## $ NOM DIA : chr [1:2120] "SÁBADO" "SÁBADO" "JUEVES" "SÁBADO" ...
## $ PLACA DE VEHICULO : chr [1:2120] "UZD459" "UYM861" "QHI400" "QHI400" ...
## $ VEHICULO : chr [1:2120] "AUTO" "AUTO" "AUTO" "AUTO" ...
# Valores vacíos por columna
faltantes <- data.frame(
variable = names(base_original),
valores_faltantes = vapply(base_original, function(x) sum(is.na(x) | trimws(as.character(x)) == ""), numeric(1))
)
DT::datatable(faltantes, rownames = FALSE, options = list(pageLength = 17, searching = FALSE),
caption = "Valores faltantes por variable")
# Duplicados exactos y repetición de identificadores
cat("Filas duplicadas exactas:", sum(duplicated(base_original)), "\n")
## Filas duplicadas exactas: 1
if ("COMPARENDO" %in% names(base_original)) {
cat("Números de comparendo repetidos (filas adicionales):", sum(duplicated(base_original$COMPARENDO)), "\n")
}
## Números de comparendo repetidos (filas adicionales): 18
if ("No. MANDAMIENTO DE PAGO" %in% names(base_original)) {
cat("Mandamientos repetidos (filas adicionales):", sum(duplicated(base_original$`No. MANDAMIENTO DE PAGO`)), "\n")
}
## Mandamientos repetidos (filas adicionales): 1
Control de calidad: La inspección de estructura
identifica los tipos de variables; el conteo de valores faltantes señala
campos incompletos; y duplicated() detecta repeticiones
exactas o de identificadores. Los registros repetidos se reportan para
validación y no se eliminan sin comprobar su naturaleza.
Crea una copia de trabajo, elimina espacios sobrantes en los textos, convierte las fechas al formato de fecha de R y convierte las variables numéricas a su tipo correspondiente. También crea una etiqueta de fecha y ordena los meses y días de la semana para que los gráficos aparezcan en secuencia. No elimina duplicados sin autorización.
# Crea una copia de trabajo; la tabla original se conserva sin modificaciones.
base <- base_original %>%
mutate(across(where(is.character), ~ stringr::str_squish(.x))) %>%
mutate(
`FECHA DE COMPARENDO` = as.Date(`FECHA DE COMPARENDO`),
AÑO = as.integer(AÑO),
MES = as.integer(MES),
DIA = as.integer(DIA),
`COD. INFRACCION` = as.integer(`COD. INFRACCION`),
NOM.MES = factor(toupper(`NOM MES`), levels = c("ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE")),
NOM.DIA = factor(toupper(`NOM DIA`), levels = c("LUNES", "MARTES", "MIÉRCOLES", "JUEVES", "VIERNES", "SÁBADO", "DOMINGO"))
)
# Comprobación de fechas y variables principales
summary(base$`FECHA DE COMPARENDO`)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## "2010-04-12" "2010-04-27" "2010-05-06" "2010-05-05" "2010-05-16" "2010-05-27"
summary(base$`COD. INFRACCION`)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 64.00 64.00 64.00 66.53 64.00 77.00
Criterio de transformación: La transformación estandariza espacios y tipos de datos para facilitar los cálculos. Las fechas y variables numéricas se convierten a formatos adecuados, mientras que los meses y días se ordenan cronológicamente. La tabla importada se conserva y las operaciones se realizan sobre una copia de trabajo.
Calcula indicadores básicos a partir de los registros disponibles: total de comparendos, fechas mínima y máxima, cantidad de códigos de infracción y número de tipos de vehículo. Son indicadores descriptivos, no estimaciones para otros periodos.
# Construye una tabla con medidas descriptivas generales de la base.
indicadores <- data.frame(
Indicador = c("Registros analizados", "Fecha inicial", "Fecha final", "Códigos de infracción", "Tipos de vehículo"),
Resultado = c(
format(nrow(base), big.mark = "."),
format(min(base$`FECHA DE COMPARENDO`, na.rm = TRUE), "%d/%m/%Y"),
format(max(base$`FECHA DE COMPARENDO`, na.rm = TRUE), "%d/%m/%Y"),
dplyr::n_distinct(base$`COD. INFRACCION`, na.rm = TRUE),
dplyr::n_distinct(base$VEHICULO, na.rm = TRUE)
)
)
## Warning in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
knitr::kable(indicadores, col.names = c("Indicador", "Resultado"), caption = "Resumen general de la base")
| Indicador | Resultado |
|---|---|
| Registros analizados | 2.120 |
| Fecha inicial | 12/04/2010 |
| Fecha final | 27/05/2010 |
| Códigos de infracción | 4 |
| Tipos de vehículo | 2 |
Lectura de los indicadores: Los indicadores resumen el volumen y el alcance temporal de los registros. El número de filas representa los casos incluidos; las fechas mínima y máxima delimitan el periodo; y los conteos distintos describen la variedad de códigos y tipos de vehículo observados.
Agrupa los registros por código y descripción de la infracción, cuenta cuántas veces aparece cada una y ordena los resultados de mayor a menor. El gráfico incluye etiquetas numéricas al final de cada barra y permite consultar detalles al pasar el cursor, sin mostrar botones de zoom.
| COD. INFRACCION | NOM.INFRACCION | cantidad |
|---|---|---|
| 64 | velocidad superior a la maxima permitida | 1626 |
| 77 | No detenerse ante una luz roja o amarilla | 385 |
| 67 | No respetar el paso de peatones | 105 |
| 76 | Transitar en sentido contrario | 4 |
# Cuenta registros por código y descripción de infracción, de mayor a menor frecuencia.
frecuencia_infracciones <- base %>%
count(`COD. INFRACCION`, `NOM.INFRACCION`, name = "cantidad", sort = TRUE)
knitr::kable(frecuencia_infracciones, caption = "Frecuencia por código y descripción de infracción")
grafico_infracciones <- ggplot(frecuencia_infracciones,
aes(x = reorder(paste0("Código ", `COD. INFRACCION`), cantidad), y = cantidad,
text = paste0("Código: ", `COD. INFRACCION`, "<br>Infracción: ", NOM.INFRACCION,
"<br>Registros: ", cantidad))) +
geom_col(fill = "#176B87", width = 0.7) +
geom_text(aes(label = cantidad), hjust = -0.15, size = 3.5,
color = "#263445", fontface = "bold") +
coord_flip() +
scale_y_continuous(expand = expansion(mult = c(0, 0.15))) +
labs(title = "Infracciones más frecuentes", x = "Código de infracción", y = "Cantidad de comparendos") +
theme_minimal(base_size = 12)
grafico_sin_zoom(grafico_infracciones)
mostrar_codigo("infracciones")¿Cómo funciona? El código agrupa los comparendos por código y nombre de infracción, cuenta los registros y los ordena de mayor a menor. Después construye barras horizontales para facilitar la comparación. Al pasar el cursor sobre una barra se consulta el código, la descripción y la cantidad.
Interpretación de frecuencias: Cada barra representa una combinación de código y descripción de infracción. La longitud de la barra y su etiqueta muestran el número de registros asociados. El orden descendente facilita identificar las categorías más frecuentes; estos conteos no explican las razones de su ocurrencia.
Cuenta los comparendos registrados en cada mes y los representa en un gráfico interactivo. La base disponible contiene abril y mayo de 2010; no se muestran meses sin registros como si fueran cero observados.
| NOM.MES | cantidad |
|---|---|
| ABRIL | 712 |
| MAYO | 1408 |
# Cuenta los comparendos por mes observado en el archivo.
por_mes <- base %>% count(NOM.MES, name = "cantidad") %>% arrange(NOM.MES)
knitr::kable(por_mes, caption = "Comparendos registrados por mes")
g_mes <- ggplot(por_mes, aes(x = NOM.MES, y = cantidad,
text = paste0("Mes: ", NOM.MES, "<br>Comparendos: ", cantidad))) +
geom_col(fill = "#E07A24", width = 0.65) +
geom_text(aes(label = cantidad), vjust = -0.4, fontface = "bold") +
labs(title = "Comparendos por mes", x = "Mes", y = "Cantidad") +
theme_minimal(base_size = 12)
grafico_sin_zoom(g_mes)
mostrar_codigo("comparendos-mes")¿Cómo funciona? Se cuentan los registros de cada mes y se muestran en columnas. Las etiquetas numéricas permiten leer la cantidad sin depender del cursor; al pasar sobre una columna se obtiene el detalle del mes.
Alcance temporal mensual: Las columnas comparan únicamente los meses presentes en el archivo. La altura representa la cantidad de registros de cada mes. La ausencia de otros meses en el gráfico indica que no están incluidos en la fuente, no que hayan tenido cero comparendos.
Agrupa los registros según el día de la semana y conserva el orden de lunes a domingo. Permite identificar qué días concentran más registros dentro del periodo analizado.
| NOM.DIA | cantidad |
|---|---|
| LUNES | 295 |
| MARTES | 264 |
| MIÉRCOLES | 273 |
| JUEVES | 256 |
| VIERNES | 264 |
| SÁBADO | 372 |
| DOMINGO | 396 |
# Cuenta los registros por día de la semana, respetando el orden definido en el factor.
por_dia <- base %>% count(NOM.DIA, name = "cantidad") %>% arrange(NOM.DIA)
knitr::kable(por_dia, caption = "Comparendos por día de la semana")
g_dia <- ggplot(por_dia, aes(x = NOM.DIA, y = cantidad,
text = paste0("Día: ", NOM.DIA, "<br>Comparendos: ", cantidad))) +
geom_col(fill = "#3B7A57", width = 0.7) +
geom_text(aes(label = cantidad), vjust = -0.4, size = 3.5,
color = "#263445", fontface = "bold") +
scale_y_continuous(expand = expansion(mult = c(0, 0.12))) +
labs(title = "Distribución por día de la semana", x = "Día", y = "Cantidad de comparendos") +
theme_minimal(base_size = 12)
grafico_sin_zoom(g_dia)
mostrar_codigo("comparendos-dia")¿Cómo funciona? Se agrupan los comparendos por día de la semana y se conserva el orden de lunes a domingo. La altura de cada barra y su etiqueta numérica representan la cantidad registrada para ese día.
Distribución semanal: El gráfico presenta la cantidad de registros por día de la semana, ordenados de lunes a domingo. Las diferencias observadas describen la distribución de esta muestra y no permiten establecer por sí solas las causas de esa variación.
Cuenta los comparendos por fecha exacta y los presenta en columnas verticales con la cantidad escrita encima de cada una. Así se comparan los días sin una línea que pueda dar una impresión de continuidad o tendencia exagerada.
# Agrupa por fecha exacta y cuenta cuántos comparendos se registraron cada día.
por_fecha <- base %>%
count(`FECHA DE COMPARENDO`, name = "cantidad") %>%
arrange(`FECHA DE COMPARENDO`)
g_fecha <- ggplot(por_fecha, aes(x = `FECHA DE COMPARENDO`, y = cantidad)) +
geom_col(fill = "#176B87", width = 0.78) +
geom_text(aes(label = cantidad), vjust = -0.35, size = 2.8,
color = "#263445", fontface = "bold") +
scale_x_date(date_breaks = "3 days", date_labels = "%d/%m",
expand = expansion(mult = c(0.01, 0.04))) +
scale_y_continuous(expand = expansion(mult = c(0, 0.14))) +
labs(title = "Comparendos registrados por fecha",
subtitle = "Cantidad diaria · abril y mayo de 2010",
x = "Fecha del comparendo", y = "Cantidad de comparendos") +
theme_minimal(base_size = 12) +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
panel.grid.minor = element_blank())
g_fecha
mostrar_codigo("evolucion-diaria")¿Cómo funciona? Se agrupan los registros por fecha y se cuenta cuántos comparendos hubo cada día. Cada columna representa una fecha y el número situado encima indica su cantidad exacta. Las fechas del eje horizontal se muestran de forma espaciada para facilitar la lectura. Este gráfico es fijo: no tiene botones para ampliar, reducir ni desplazar la vista.
Comportamiento por fecha: Cada columna representa una fecha exacta y la etiqueta indica el número de comparendos registrados ese día. La visualización permite comparar fechas dentro de abril y mayo de 2010; no debe interpretarse como una tendencia anual ni como una explicación causal.
Cuenta los registros de la variable GENERO. En esta base
aparecen las categorías MUJER, HOMBRE y EMPRESA; por eso, el resultado
debe interpretarse como una clasificación de la base y no como una
comparación exclusivamente entre personas.
| GENERO | cantidad |
|---|---|
| MUJER | 970 |
| HOMBRE | 683 |
| EMPRESA | 467 |
# Cuenta registros por categoría de género o tipo de ejecutado.
por_genero <- base %>% count(GENERO, name = "cantidad", sort = TRUE)
knitr::kable(por_genero, caption = "Registros por categoría de género o ejecutado")
g_genero <- ggplot(por_genero, aes(x = GENERO, y = cantidad,
text = paste0("Categoría: ", GENERO, "<br>Registros: ", cantidad))) +
geom_col(fill = "#6C5B7B", width = 0.65) +
geom_text(aes(label = cantidad), vjust = -0.4, size = 3.5,
color = "#263445", fontface = "bold") +
scale_y_continuous(expand = expansion(mult = c(0, 0.12))) +
labs(title = "Registros por categoría", x = "Categoría", y = "Cantidad") +
theme_minimal(base_size = 12)
grafico_sin_zoom(g_genero)
mostrar_codigo("genero")¿Cómo funciona? Se cuenta cuántos registros hay en
cada categoría de la columna GENERO. Como la base incluye
la categoría EMPRESA, el gráfico se interpreta como una distribución por
categoría de ejecutado y no solo como comparación entre personas.
Definición de la categoría: La variable
GENERO contiene las categorías MUJER, HOMBRE y EMPRESA.
Debido a esta clasificación, el resultado se presenta como distribución
por género o tipo de ejecutado y no como una comparación exclusiva entre
hombres y mujeres.
Agrupa los comparendos por tipo de vehículo y calcula su frecuencia. El gráfico permite comparar los tipos registrados en el archivo.
| VEHICULO | cantidad |
|---|---|
| AUTO | 1938 |
| MOTO | 182 |
# Cuenta los registros para cada tipo de vehículo.
por_vehiculo <- base %>% count(VEHICULO, name = "cantidad", sort = TRUE)
knitr::kable(por_vehiculo, caption = "Comparendos por tipo de vehículo")
g_vehiculo <- ggplot(por_vehiculo, aes(x = VEHICULO, y = cantidad,
text = paste0("Vehículo: ", VEHICULO, "<br>Comparendos: ", cantidad))) +
geom_col(fill = "#345995", width = 0.65) +
geom_text(aes(label = cantidad), vjust = -0.4, size = 3.5,
color = "#263445", fontface = "bold") +
scale_y_continuous(expand = expansion(mult = c(0, 0.12))) +
labs(title = "Comparendos por tipo de vehículo", x = "Tipo de vehículo", y = "Cantidad") +
theme_minimal(base_size = 12)
grafico_sin_zoom(g_vehiculo)
mostrar_codigo("vehiculos")¿Cómo funciona? Se agrupan los registros según el tipo de vehículo y se cuenta su frecuencia. Cada barra representa un tipo de vehículo; su altura y la etiqueta numérica indican el número de comparendos asociados.
Alcance del análisis por vehículo: Las barras comparan la frecuencia de los tipos de vehículo presentes en los registros. El resultado describe la composición de la base, pero no mide el riesgo de infracción de cada tipo, ya que no se dispone del total de vehículos que circulaban.
El análisis de la base de datos permitió examinar 2.120 registros de comparendos correspondientes al año 2010, comprendidos entre el 12 de abril y el 27 de mayo. Mediante el procesamiento de datos en R se identificaron patrones relacionados con los tipos de infracción, la distribución temporal, las características de los ejecutados y las clases de vehículos involucrados.
Los principales resultados fueron los siguientes:
Infracciones: el código 64, correspondiente a exceso de velocidad, registró 1.626 casos, equivalentes al 76,70 % del total. Le siguió el código 77, con 385 casos (18,16 %).
Distribución mensual: mayo concentró 1.408 comparendos (66,42 %), mientras que abril registró 712 (33,58 %).
Días de la semana: el domingo presentó la mayor frecuencia, con 396 registros (18,68 %), seguido del sábado, con 372 (17,55 %).
Categoría del ejecutado: se identificaron 970 registros asociados a mujeres (45,75 %), 683 a hombres (32,22 %) y 467 a empresas (22,03 %).
Tipo de vehículo: los automóviles representaron 1.938 registros (91,42 %), mientras que las motocicletas alcanzaron 182 (8,58 %).
Información económica: el valor acumulado registrado en la columna de costos fue de $646.067.500, con un promedio aproximado de $304.749 por comparendo.
Desde el punto de vista técnico, el uso de R permitió realizar procesos de importación, transformación, agrupación, cálculo de frecuencias y visualización mediante gráficos con etiquetas de datos. Estas herramientas facilitaron la identificación de tendencias y la interpretación de los resultados.
Consideración sobre la calidad de los datos: aunque los 2.120 registros no presentan valores vacíos en la hoja analizada, se identificaron 18 repeticiones en el número de comparendo y un registro completamente duplicado. Por tanto, estos aspectos deben validarse antes de utilizar los resultados como cifras definitivas.
En conclusión, el análisis evidencia una alta concentración de registros en las infracciones por exceso de velocidad y en los vehículos tipo automóvil. Los resultados ofrecen una visión cuantitativa del comportamiento de los comparendos durante el periodo estudiado y demuestran la utilidad de las herramientas de análisis de datos para convertir registros administrativos en información organizada y comprensible.
GENERO incluye la categoría
EMPRESA; por ello se describe como género o tipo de
ejecutado.Limitaciones de la fuente: El análisis se restringe
a los registros comprendidos entre abril y mayo de 2010. La categoría
EMPRESA forma parte de la variable GENERO; los duplicados
requieren validación; y la hoja utilizada no contiene una variable de
costo. En consecuencia, no se estiman recaudos ni valores
monetarios.