Carga de Datos
# Cargar archivo
rondas <- read_excel(params$archivo_rondas)
# Revisar nombres de columnas
colnames(rondas)
## [1] "Empresa" "Cód. Ronda" "Nombre Ronda"
## [4] "Correlativo Ronda" "IMEI" "Nombre Dispositivo"
## [7] "CECOS" "Cliente" "Sector"
## [10] "Instalación" "Inicio Ronda" "Fin Ronda"
## [13] "Duración en minutos" "Observación" "Total Puntos"
## [16] "Puntos Realizados" "Puntos Omitidos" "Distancia Recorrida"
## [19] "Usuario Ronda" "Flog" "Nombre Usuario Ronda"
## [22] "Cargo Usuario Ronda"
Preparación de Datos
# Convertir fechas y extraer campos de interés
rondas <- rondas %>%
mutate(
Fecha = as.Date(`Inicio Ronda`),
Mes = format(Fecha, "%Y-%m"),
Día = weekdays(Fecha),
Vigilante = `Usuario Ronda`,
Puntos_Realizados = as.numeric(`Puntos Realizados`)
) %>%
filter(!is.na(Fecha))
KPI: Total de Rondas por Día
kpi_diario <- rondas %>%
count(Fecha)
ggplot(kpi_diario, aes(x = Fecha, y = n)) +
geom_line(color = "steelblue") +
geom_point() +
labs(title = "Rondas por Día", x = "Fecha", y = "Cantidad de Rondas") +
theme_minimal()

KPI: Total de Rondas por Mes
kpi_mensual <- rondas %>%
count(Mes)
ggplot(kpi_mensual, aes(x = Mes, y = n)) +
geom_col(fill = "darkgreen") +
labs(title = "Rondas por Mes", x = "Mes", y = "Cantidad") +
theme_minimal() +
coord_flip()

Rondas por Vigilante
rondas_vigilante <- rondas %>%
count(Vigilante, sort = TRUE)
datatable(rondas_vigilante, colnames = c("Vigilante", "Cantidad de Rondas"))
Porcentaje de Cumplimiento (Puntos Realizados / Total Puntos)
rondas <- rondas %>%
mutate(Cumplimiento = round((`Puntos Realizados` / `Total Puntos`) * 100, 1))
cumplimiento_vigilante <- rondas %>%
group_by(Vigilante) %>%
summarise(
Media_Cumplimiento = mean(Cumplimiento, na.rm = TRUE),
Rondas = n()
) %>%
arrange(desc(Media_Cumplimiento))
datatable(cumplimiento_vigilante)
Gráfico de Cumplimiento Promedio por Vigilante
ggplot(cumplimiento_vigilante, aes(x = reorder(Vigilante, Media_Cumplimiento), y = Media_Cumplimiento)) +
geom_col(fill = "orange") +
coord_flip() +
labs(title = "Cumplimiento Promedio por Vigilante", x = "Vigilante", y = "% de Cumplimiento") +
theme_minimal()
