library(knitr)
library(kableExtra)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following object is masked from 'package:kableExtra':
## 
##     group_rows
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
TDF_frecuencia <- as.data.frame(table(datos$Operator.Name))
colnames(TDF_frecuencia) <- c("Empresa", "ni")

TDF_categoria <- TDF_frecuencia %>%
  mutate(
    Clasificacion_Impacto = case_when(
      ni >= 100 ~ "Alto Impacto (ni >= 100)", 
      ni >= 25 & ni < 100 ~ "Medio Impacto (25 <= ni < 100)",
      ni < 25 ~ "Bajo Impacto (ni < 25)",
      TRUE ~ "FALTANTE"
    )
  )

datos_con_impacto <- datos %>%
  left_join(TDF_categoria %>% select(Empresa, Clasificacion_Impacto), 
            by = c("Operator.Name" = "Empresa"))

tabla_pura_impacto <- table(datos_con_impacto$Clasificacion_Impacto)
Nombres  <- names(tabla_pura_impacto)
ni       <- as.numeric(tabla_pura_impacto)
ni_total <- sum(ni)

hi_num   <- (ni / ni_total) * 100
hi_red   <- round(hi_num, 2) 

TDF_base <- data.frame(Categoria = Nombres, ni = ni, hi = hi_red)
orden_categorias <- c("Alto Impacto (ni >= 100)", 
                      "Medio Impacto (25 <= ni < 100)", 
                      "Bajo Impacto (ni < 25)")

TDF_ordenada <- TDF_base %>%
  mutate(Categoria = factor(Categoria, levels = orden_categorias)) %>%
  arrange(Categoria) %>%
  mutate(Categoria = as.character(Categoria)) 
Sumatoria <- data.frame(Categoria = "TOTAL", ni = ni_total, hi = 100.00)
TDF_final <- bind_rows(TDF_ordenada, Sumatoria)
TDF_final$hi <- sprintf("%.2f", TDF_final$hi)
colnames(TDF_final) <- c("Clasificacion de Impacto", "ni", "hi (%)")
kable(TDF_final, align = 'c',
      col.names = c("Clasificacion de Impacto", "ni", "hi (%)"), 
      caption = "Tabla de frecuencia por Impacto") %>%
  kable_styling(full_width = FALSE, position = "center",
                bootstrap_options = c("striped", "hover", "condensed"))
Tabla de frecuencia por Impacto
Clasificacion de Impacto ni hi (%)
Alto Impacto (ni >= 100) 1077 38.53
Medio Impacto (25 <= ni < 100) 959 34.31
Bajo Impacto (ni < 25) 759 27.16
TOTAL 2795 100.00
library(dplyr)
library(ggplot2)

#Gráfico de barras
TDF_categoria <- TDF_frecuencia %>%
  mutate(Clasificacion_Impacto = case_when(
      ni >= 100 ~ "Alto Impacto (ni ≥ 100)",
      ni >= 25 & ni < 100 ~ "Medio Impacto (25 ≤ ni < 100)",
      ni < 25 ~ "Bajo Impacto (ni < 25)",
      TRUE ~ "FALTANTE"
  ))

datos_con_impacto <- datos %>%
  left_join(TDF_categoria %>% select(Empresa, Clasificacion_Impacto), 
            by = c("Operator.Name" = "Empresa"))

datos_grafico <- as.data.frame(table(datos_con_impacto$Clasificacion_Impacto))
colnames(datos_grafico) <- c("Clasificacion", "ni")

datos_grafico$Clasificacion <- reorder(datos_grafico$Clasificacion, datos_grafico$ni)

ggplot(datos_grafico, aes(x = Clasificacion, y = ni, fill = Clasificacion)) +
  geom_bar(stat = "identity", color = "black", width = 0.6, alpha = 0.5) + 
  scale_fill_manual(values = c(
      "Alto Impacto (ni ≥ 100)" = "red", 
      "Medio Impacto (25 ≤ ni < 100)" = "red", 
      "Bajo Impacto (ni < 25)" = "red"
  )) +
  labs(title = "Gráfica 2 Accidentes por Nivel de Impacto",
       y = "Cantidad de Accidentes", x = "") +
  theme_minimal() +
  theme(legend.position = "none") 

library(ggplot2)
library(dplyr)
datos_grafico <- TDF_ordenada %>%
  mutate(
    ni = as.numeric(ni),
    Etiqueta_Leyenda = paste0(Categoria, " (", hi, "%)"),
    Etiqueta_Leyenda = factor(Etiqueta_Leyenda, levels = unique(Etiqueta_Leyenda))
  )
ggplot(datos_grafico, aes(x = "", y = ni, fill = Etiqueta_Leyenda)) +
  geom_bar(stat = "identity", width = 1, color = "white", alpha = 0.6) + 
  
  coord_polar("y", start = 0) +
  theme_void() + 
  theme(
    legend.position = "right",             
    legend.text = element_text(size = 8),   
    legend.title = element_text(size = 10, face = "bold") 
  ) +
  
  labs(title = "Gráfico 3 Distribución de Accidentes por Impacto",
       fill = "Leyenda") +
  scale_fill_brewer(palette = "Oranges", direction = -1)

#Gráfico de barras
TDF_categoria <- TDF_frecuencia %>%
  mutate(Clasificacion_Impacto = case_when(
      ni >= 100 ~ "Alto Impacto (ni ≥ 100)",
      ni >= 25 & ni < 100 ~ "Medio Impacto (25 ≤ ni < 100)",
      ni < 25 ~ "Bajo Impacto (ni < 25)",
      TRUE ~ "FALTANTE"
  ))

datos_con_impacto <- datos %>%
  left_join(TDF_categoria %>% select(Empresa, Clasificacion_Impacto), 
            by = c("Operator.Name" = "Empresa"))

datos_grafico <- as.data.frame(table(datos_con_impacto$Clasificacion_Impacto))
colnames(datos_grafico) <- c("Clasificacion", "ni")
datos_grafico$Clasificacion <- reorder(datos_grafico$Clasificacion, datos_grafico$ni)
ggplot(datos_grafico, aes(x = Clasificacion, y = ni, fill = Clasificacion)) +
  geom_bar(stat = "identity", color = "black", width = 0.6, alpha = 0.6) + 
  scale_fill_manual(values = c(
      "Alto Impacto (ni ≥ 100)" = "orange",   
      "Medio Impacto (25 ≤ ni < 100)" = "orange", 
      "Bajo Impacto (ni < 25)" = "pink"     
  )) +
  scale_y_continuous(limits = c(0, 5000)) + 
  
  labs(title = "Gráfica 3 Distribución General por Impacto",
       y = "Cantidad de Accidentes", x = "") +
  theme_minimal() +
  theme(legend.position = "none")