Esta sección está dedicada al estudio de las variables de tipo cualitativo nominal. El Grupo 2 utilizará tablas de frecuencia y gráficos de barras para resumir la información y destacar las clases o grupos más recurrentes en el conjunto de datos.

1 Operator Name

# 1. CARGAR DATOS (Por seguridad)
database <- read.csv("database.csv", header=TRUE, sep=",", dec=".")

# 2. PREPARACIÓN DE DATOS
# Buscamos la columna "Operator" automáticamente
col_operador <- grep("Operator", names(database), value = TRUE)[1]
raw_operador <- database[[col_operador]]

# 3. CÁLCULOS
Tabla_Op <- as.data.frame(table(raw_operador))
colnames(Tabla_Op) <- c("Operador", "Freq")

# Ordenar de mayor a menor (Vital para que se vea la curva de distribución)
Tabla_Op <- Tabla_Op[order(-Tabla_Op$Freq), ]

# 4. GRÁFICO GIGANTE
# Usamos toda la tabla 'Tabla_Op' sin recortar
par(mar=c(5, 14, 4, 2)) # Margen izquierdo amplio

barplot(Tabla_Op$Freq,
        names.arg = Tabla_Op$Operador,
        col = "darkblue",
        horiz = TRUE,   
        las = 2,        
        main = "Todos los Operadores Registrados",
        xlab = "Número de Accidentes",
        cex.names = 0.3, # Letra diminuta para que intenten caber todos
        border = NA)     # Sin bordes para que se vea más limpio

2 Pipeline/Facility Name

# 1. CARGAR DATOS (Por seguridad, para que no falle el bloque)
database <- read.csv("database.csv", header=TRUE, sep=",", dec=".")

# 2. PREPARACIÓN DE DATOS
# Buscamos la columna "Facility" automáticamente
col_tuberia <- grep("Facility", names(database), value = TRUE)[1]
raw_tuberias <- database[[col_tuberia]]

# 3. CÁLCULOS
Tabla_Pipe <- as.data.frame(table(raw_tuberias))
colnames(Tabla_Pipe) <- c("Nombre", "Freq")

# Ordenar de mayor a menor (Vital)
Tabla_Pipe <- Tabla_Pipe[order(-Tabla_Pipe$Freq), ]

# 4. GRÁFICO GIGANTE
# Usamos toda la tabla 'Tabla_Pipe' directamente (sin head)
Datos_A_Graficar <- Tabla_Pipe 

# Margen izquierdo muy amplio (16) y letra diminuta
par(mar=c(5, 16, 4, 2)) 

barplot(Datos_A_Graficar$Freq,
        names.arg = Datos_A_Graficar$Nombre,
        col = "forestgreen", 
        horiz = TRUE,        
        las = 2,             
        main = "Todas las Tuberías Registradas",
        xlab = "Número de Accidentes",
        cex.names = 0.3,     # Letra EXTRA pequeña (0.3) para que quepan
        border = NA)         # Sin bordes para que se vea más limpio

3 Pipeline Location

# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura
col_target <- grep("Shutdown", names(database), value = TRUE)[1]
raw_shut <- database[[col_target]]

# Limpiamos datos vacíos
raw_shut <- raw_shut[raw_shut != ""]

# 2. CÁLCULOS
frecuencias_shut <- table(raw_shut)
frecuencias_shut_ordenadas <- sort(frecuencias_shut, decreasing = TRUE)

# 3. PREPARACIÓN DE COLORES (Tu paleta)
mis_colores <- c("salmon", "mediumturquoise")

# Reciclamos los colores para asegurar que cubran todas las barras
colores_finales <- rep(mis_colores, length.out = length(frecuencias_shut_ordenadas))

# 4. GRÁFICO
par(mar=c(5, 5, 4, 2)) 

barplot(frecuencias_shut_ordenadas,
        main = "Pipeline Shutdown",
        xlab = "Cierre de Tubería",
        ylab = "Frecuencia",
        col = colores_finales,   
        border = "white",
        las = 1,                 
        cex.names = 0.9)

4 Pipeline Type

# 1. PREPARACIÓN DE DATOS
# Buscamos la columna "Pipeline Type" (o Pipeline.Type) automáticamente
cols_pipe <- grep("Pipeline", names(database), value = TRUE)
col_target <- grep("Type", cols_pipe, value = TRUE)[1]
raw_type <- database[[col_target]]

# Limpiamos datos vacíos
raw_type <- raw_type[raw_type != ""]

# 2. CÁLCULOS
frecuencias_pipeline <- table(raw_type)
frecuencias_pipeline_ordenadas <- sort(frecuencias_pipeline, decreasing = TRUE)

# 3. GRÁFICO (Con tus colores por nombre)
barplot(frecuencias_pipeline_ordenadas,
        main = "Distribución de Pipeline Types",
        xlab = "Tipo de Pipeline",
        ylab = "Frecuencia",
        # Colores cambiados a nombres en inglés:
        col = c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite"),
        border = "white",
        cex.names = 0.8)

5 liquid Type

# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura
cols_liq <- grep("Liquid", names(database), value = TRUE)
col_target <- grep("Type", cols_liq, value = TRUE)[1]
raw_liquid <- database[[col_target]]

# Limpiamos vacíos
raw_liquid <- raw_liquid[raw_liquid != ""]

# 2. TABLA Y ORDENAMIENTO
frecuencias_liquid <- table(raw_liquid)
frecuencias_liquid_ordenadas <- sort(frecuencias_liquid, decreasing = TRUE)

# 3. RENOMBRAR CATEGORÍAS
# Definimos el "diccionario" de traducción
nuevos_nombres_liquid <- c(
  "HVL OR OTHER FLAMMABLE OR TOXIC FLUID, GAS" = "Gas VAF / Tóxico",
  "CRUDE OIL" = "Crudo",
  "REFINED AND/OR PETROLEUM PRODUCT (NON-HVL), LIQUID" = "Producto Refinado",
  "CO2 (CARBON DIOXIDE)" = "CO2",
  "BIOFUEL / ALTERNATIVE FUEL (INCLUDING ETHANOL BLENDS)" = "Biocombustible"
)

# Aplicamos los nombres con seguridad:
nombres_actuales <- names(frecuencias_liquid_ordenadas)

# Buscamos el nombre nuevo en el diccionario
labels_nuevos <- nuevos_nombres_liquid[nombres_actuales]

# Si alguno no estaba en la lista (sale NA), le dejamos el nombre original
labels_nuevos[is.na(labels_nuevos)] <- nombres_actuales[is.na(labels_nuevos)]

# Asignamos los nombres finales
names(frecuencias_liquid_ordenadas) <- labels_nuevos

# 4. GRÁFICO HORIZONTAL
par(mar = c(5, 12, 4, 2))  # Margen izquierdo amplio para que quepan los textos

barplot(frecuencias_liquid_ordenadas,
        horiz = TRUE,
        main = "Distribución de Liquid Types",
        xlab = "Frecuencia",
        # Aquí aplicamos la paleta de colores para todos los tipos
        col = c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite"),
        las = 1,
        cex.names = 0.8,  
        border = "white",
        font.main = 2)

6 liquid Subtype

# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura (Liquid Subtype)
cols_liq <- grep("Liquid", names(database), value = TRUE)
col_target <- grep("Subtype", cols_liq, value = TRUE)[1]
raw_subtype <- database[[col_target]]

# Limpiamos vacíos (Importante para que no salga una barra sin nombre)
raw_subtype <- raw_subtype[raw_subtype != ""]

# 2. CÁLCULOS
frecuencias_subtype <- table(raw_subtype)
frecuencias_subtype_ordenadas <- sort(frecuencias_subtype, decreasing = TRUE)

# 3. RENOMBRAR CATEGORÍAS (Tu lógica)
# Diccionario de traducción
nuevos_nombres <- c(
  "BIODIESEL" = "BIODIESEL",
  "LPG (LIQUEFIED PETROLEUM GAS)" = "LPG",
  "GASOLINE (NON-ETHANOL)" = "GASOLINA SIN ETANOL",
  "DIESEL, FUEL OIL, KEROSENE, JET FUEL" = "COMBUSTIBLES VARIOS",
  "ANHYDROUS AMMONIA" = "AMONÍACO ANHIDRO", 
  "OTHER HVL" = "OTROS HVL",
  "MIXTURE OF REFINED PRODUCTS (TRANSMIX OR OTHER MIXTURE)" = "MEZCLAS REFINADAS",
  "OTHER" = "OTROS"
)

# --- LÓGICA DE SEGURIDAD ---
# Intentamos traducir los nombres
nombres_actuales <- names(frecuencias_subtype_ordenadas)
labels_finales <- nuevos_nombres[nombres_actuales]

# Si algún nombre no estaba en tu lista (sale NA), usamos el nombre original
# Esto evita que el gráfico falle si hay un dato nuevo
labels_finales[is.na(labels_finales)] <- nombres_actuales[is.na(labels_finales)]

# Aplicamos los nombres
names(frecuencias_subtype_ordenadas) <- labels_finales

# 4. GRÁFICO HORIZONTAL (Tu diseño exacto)
par(mar = c(5, 12, 4, 2)) 

barplot(frecuencias_subtype_ordenadas,
        horiz = TRUE,
        main = "Distribución de Liquid Subtypes",
        xlab = "Frecuencia",
        col = "lightblue",
        las = 1,  
        cex.names = 0.8, 
        border = "white",
        font.main = 2)

7 liquid Name

# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura (Liquid Name)
cols_liq <- grep("Liquid", names(database), value = TRUE)
col_target <- grep("Name", cols_liq, value = TRUE)[1]
raw_name <- database[[col_target]]

# Limpiamos vacíos
raw_name <- raw_name[raw_name != ""]

# 2. CÁLCULOS
frecuencias_name <- table(raw_name)
frecuencias_name_ordenadas <- sort(frecuencias_name, decreasing = TRUE)

# NOTA: Se eliminó la línea "head" para incluir TODOS los registros.

# 3. RENOMBRAR CATEGORÍAS
# Traducimos los líquidos más comunes
nuevos_nombres_liq <- c(
  "CRUDE OIL" = "CRUDO",
  "GASOLINE (NON-ETHANOL)" = "GASOLINA (SIN ETANOL)",
  "REFINED AND/OR PETROLEUM PRODUCT (NON-HVL), LIQUID" = "PRODUCTO REFINADO",
  "HVL OR OTHER FLAMMABLE OR TOXIC FLUID, GAS" = "GAS INFLAMABLE/TÓXICO",
  "DIESEL, FUEL OIL, KEROSENE, JET FUEL" = "DIESEL / KEROSENO",
  "CO2 (CARBON DIOXIDE)" = "DIÓXIDO DE CARBONO (CO2)",
  "BIOFUEL / ALTERNATIVE FUEL (INCLUDING ETHANOL BLENDS)" = "BIOCOMBUSTIBLE",
  "LPG (LIQUEFIED PETROLEUM GAS)" = "GAS LICUADO (LPG)",
  "ANHYDROUS AMMONIA" = "AMONÍACO ANHIDRO"
)

# --- LÓGICA DE SEGURIDAD ---
nombres_actuales <- names(frecuencias_name_ordenadas)
labels_finales <- nuevos_nombres_liq[nombres_actuales]

# Si aparece un líquido raro no traducido, usamos el original
labels_finales[is.na(labels_finales)] <- nombres_actuales[is.na(labels_finales)]

# Aplicamos los nombres
names(frecuencias_name_ordenadas) <- labels_finales

# 4. GRÁFICO HORIZONTAL COMPLETO
# Margen izquierdo amplio (14 o más) para nombres largos
par(mar = c(5, 14, 4, 2))  

barplot(frecuencias_name_ordenadas,
        horiz = TRUE,
        main = "Todos los Líquidos (Liquid Name)",
        xlab = "Frecuencia",
        # Usamos tu paleta personalizada que se recicla automáticamente
        col = c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite"),
        las = 1,
        cex.names = 0.6, # Letra un poco más pequeña para que quepan todos
        border = "white",
        font.main = 2)

8 Accident City

library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)

# --- 1. PREPARACIÓN DE DATOS ---
# Buscamos la columna "Accident City" automáticamente
col_city <- grep("City", names(database), value = TRUE)[1]

# Creamos la tabla con TODAS las ciudades
todas_ciudades <- database %>%
  count(Ciudad = .[[col_city]], sort = TRUE) %>% 
  rename(Recuento = n) %>%
  filter(Ciudad != "") # Filtramos vacíos para limpiar el gráfico

# Definimos tu paleta de colores
mis_colores <- c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite")

# --- 2. CREAR EL GRÁFICO ---
grafico_ciudades <- todas_ciudades %>%
  ggplot(aes(x = reorder(Ciudad, Recuento), y = Recuento)) +
  # Usamos rep() para reciclar tus colores exactos a lo largo de todas las barras
  geom_col(fill = rep(mis_colores, length.out = nrow(todas_ciudades))) +                 
  coord_flip() + 
  labs(
    title = "Accidentes por Ciudad (Lista Completa)",
    x = "Ciudad",
    y = "Recuento de Accidentes"
  ) +
  theme_minimal() +                              
  theme(
    # Texto muy pequeño (4) para intentar mostrar tantos nombres
    axis.text.y = element_text(size = 4),
    panel.grid.major.y = element_blank() # Quitamos líneas horizontales para limpiar visualmente
  )

# --- 3. MOSTRAR EL GRÁFICO ---
print(grafico_ciudades)

9 Accident State

# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura (Accident State)
col_target <- grep("State", names(database), value = TRUE)[1]
raw_state <- database[[col_target]]

# Limpiamos vacíos
raw_state <- raw_state[raw_state != ""]

# 2. CÁLCULOS
frecuencias_state <- table(raw_state)
frecuencias_state_ordenadas <- sort(frecuencias_state, decreasing = TRUE)

# NOTA: He eliminado la restricción de "Top 10" para que salgan todos.

# 3. RENOMBRAR CATEGORÍAS (Diccionario de Traducción)
# Traducimos las abreviaturas más comunes.
# (Los estados que no estén aquí saldrán con su abreviatura original: NY, FL, etc.)
nuevos_nombres_state <- c(
  "TX" = "TEXAS",
  "LA" = "LUISIANA",
  "CA" = "CALIFORNIA",
  "OK" = "OKLAHOMA",
  "PA" = "PENSILVANIA",
  "IL" = "ILLINOIS",
  "OH" = "OHIO",
  "KS" = "KANSAS",
  "MN" = "MINNESOTA",
  "NM" = "NUEVO MÉXICO"
)

# --- LÓGICA DE SEGURIDAD ---
nombres_actuales <- names(frecuencias_state_ordenadas)
labels_finales <- nuevos_nombres_state[nombres_actuales]

# Si aparece un estado que no está en la lista (sale NA), usamos su abreviatura original
labels_finales[is.na(labels_finales)] <- nombres_actuales[is.na(labels_finales)]

# Aplicamos los nombres
names(frecuencias_state_ordenadas) <- labels_finales

# 4. GRÁFICO HORIZONTAL COMPLETO
# Ajustamos márgenes para ver bien los nombres
par(mar = c(5, 8, 4, 2))  

barplot(frecuencias_state_ordenadas,
        horiz = TRUE,
        main = "Todos los Estados Registrados",
        xlab = "Frecuencia",
        # Tu paleta de colores personalizada:
        col = c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite"),
        las = 1,
        cex.names = 0.6, # Letra más pequeña para que quepan todos
        border = "white",
        font.main = 2)

10 Cause category

# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura (Cause Category)
cols_cause <- grep("Cause", names(database), value = TRUE)
col_target <- grep("Category", cols_cause, value = TRUE)[1]
raw_cause <- database[[col_target]]

# Limpiamos vacíos
raw_cause <- raw_cause[raw_cause != ""]

# 2. CÁLCULOS
frecuencias_cause <- table(raw_cause)
frecuencias_cause_ordenadas <- sort(frecuencias_cause, decreasing = TRUE)

# NOTA: Al no usar head(), se graficarán TODAS las categorías existentes.

# 3. RENOMBRAR CATEGORÍAS (Diccionario de Traducción)
nuevos_nombres_causa <- c(
  "CORROSION" = "CORROSIÓN",
  "EXCAVATION DAMAGE" = "DAÑO POR EXCAVACIÓN",
  "INCORRECT OPERATION" = "OPERACIÓN INCORRECTA",
  "MATERIAL/WELD/EQUIP FAILURE" = "FALLA MATERIAL/EQUIPO",
  "NATURAL FORCE DAMAGE" = "FUERZAS NATURALES",
  "OTHER OUTSIDE FORCE DAMAGE" = "DAÑO EXTERNO",
  "ALL OTHER CAUSES" = "OTRAS CAUSAS"
)

# --- LÓGICA DE SEGURIDAD ---
# Intentamos traducir los nombres
nombres_actuales <- names(frecuencias_cause_ordenadas)
labels_finales <- nuevos_nombres_causa[nombres_actuales]

# Si aparece una causa rara que no está en la lista, usamos su nombre original
labels_finales[is.na(labels_finales)] <- nombres_actuales[is.na(labels_finales)]

# Aplicamos los nombres finales
names(frecuencias_cause_ordenadas) <- labels_finales

# 4. GRÁFICO HORIZONTAL COMPLETO
# Margen izquierdo amplio (14) para que quepan los textos largos
par(mar = c(5, 14, 4, 2))  

barplot(frecuencias_cause_ordenadas,
        horiz = TRUE,
        main = "Todas las Causas Principales",
        xlab = "Frecuencia",
        # Aplicamos tu paleta de colores personalizada
        col = c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite"),
        las = 1,  # Etiquetas horizontales
        cex.names = 0.8, # Tamaño de letra
        border = "white",
        font.main = 2)

11 Cause Subcategory

# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura. Primero "Cause", luego "Sub" (Subcategory)
cols_cause <- grep("Cause", names(database), value = TRUE)
col_target <- grep("Sub", cols_cause, value = TRUE)[1] 
raw_sub <- database[[col_target]]

# Limpiamos vacíos
raw_sub <- raw_sub[raw_sub != ""]

# 2. CÁLCULOS
frecuencias_sub <- table(raw_sub)
frecuencias_sub_ordenadas <- sort(frecuencias_sub, decreasing = TRUE)

# NOTA: No usamos head() para incluir TODAS las subcausas.

# 3. RENOMBRAR CATEGORÍAS (Diccionario Ampliado)
# Traducción de subcausas comunes en la industria (PHMSA/DOT)
nuevos_nombres_sub <- c(
  "INTERNAL CORROSION" = "CORROSIÓN INTERNA",
  "EXTERNAL CORROSION" = "CORROSIÓN EXTERNA",
  "THIRD PARTY EXCAVATION DAMAGE" = "EXCAVACIÓN (TERCEROS)",
  "OPERATOR EXCAVATION DAMAGE" = "EXCAVACIÓN (OPERADOR)",
  "PREVIOUS DAMAGE DUE TO EXCAVATION" = "DAÑO PREVIO POR EXCAVACIÓN",
  "EARTH MOVEMENT" = "MOVIMIENTO DE TIERRA",
  "HEAVY RAINS/FLOODS" = "LLUVIAS / INUNDACIONES",
  "LIGHTNING" = "RAYOS",
  "TEMPERATURE" = "TEMPERATURA EXTREMA",
  "HIGH WINDS" = "VIENTOS FUERTES",
  "BODY OF PIPE" = "CUERPO DE LA TUBERÍA",
  "COMPONENT" = "COMPONENTE",
  "BUTT WELD" = "SOLDADURA A TOPE",
  "FILLET WELD" = "SOLDADURA DE FILETE",
  "PIPE GIRTH WELD" = "SOLDADURA CIRCUNFERENCIAL",
  "THREADED CONNECTION" = "CONEXIÓN ROSCADA",
  "VALVE" = "VÁLVULA",
  "PUMP OR COMPRESSOR" = "BOMBA O COMPRESOR",
  "TANK/VESSEL" = "TANQUE / VASIJA",
  "MISCELLANEOUS" = "MISCELÁNEOS",
  "UNKNOWN" = "DESCONOCIDO",
  "HUMAN ERROR" = "ERROR HUMANO",
  "OVERPRESSURE" = "SOBREPRESIÓN",
  "EQUIPMENT FAILURE" = "FALLA DE EQUIPO"
)

# --- LÓGICA DE SEGURIDAD ---
nombres_actuales <- names(frecuencias_sub_ordenadas)
labels_finales <- nuevos_nombres_sub[nombres_actuales]

# Si aparece una subcausa que no está en la lista, usamos el nombre original
labels_finales[is.na(labels_finales)] <- nombres_actuales[is.na(labels_finales)]

# Aplicamos los nombres
names(frecuencias_sub_ordenadas) <- labels_finales

# 4. GRÁFICO HORIZONTAL COMPLETO
# Aumentamos el margen izquierdo (16) porque las subcategorías suelen tener nombres largos
par(mar = c(5, 16, 4, 2))  

barplot(frecuencias_sub_ordenadas,
        horiz = TRUE,
        main = "Detalle de Subcausas (Cause Subcategory)",
        xlab = "Frecuencia",
        # Tu paleta de colores personalizada (se recicla automáticamente)
        col = c("salmon", "mediumturquoise", "skyblue", "darkseagreen", "navajowhite"),
        las = 1,
        cex.names = 0.6, # Letra pequeña para que quepan todas las opciones
        border = "white",
        font.main = 2)

12 liquid Ignition

# 1. Cargar librerías necesarias
library(ggplot2)

# 2. Seleccionar la columna automáticamente
# Buscamos la columna que tenga la palabra "Ignition" (funciona con espacios o puntos)
nombre_columna <- grep("Ignition", names(database), value = TRUE)[1]

# 3. Graficar con ggplot2
grafica <- ggplot(database, aes(x = .data[[nombre_columna]])) +
  geom_bar(fill = "orangered") + 
  theme_minimal() +
  labs(
    x = "Hubo Ignición?",
    y = "Cantidad de Accidentes",
    title = paste("Frecuencia de:", nombre_columna)
  )

# Mostrar la gráfica en el reporte
print(grafica)

13 Liquid Explosion

# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura (Liquid Explosion)
col_target <- grep("Explosion", names(database), value = TRUE)[1]
raw_explosion <- database[[col_target]]

# Limpiamos vacíos
raw_explosion <- raw_explosion[raw_explosion != ""]

# 2. TABLA Y ORDENAMIENTO
frecuencias_explosion <- table(raw_explosion)
frecuencias_explosion_ordenadas <- sort(frecuencias_explosion, decreasing = TRUE)

# 3. RENOMBRAR CATEGORÍAS
# Diccionario de traducción
nuevos_nombres_explosion <- c(
  "YES" = "Sí",
  "NO" = "No"
)

# Aplicamos los nombres con seguridad:
nombres_actuales <- names(frecuencias_explosion_ordenadas)
labels_nuevos <- nuevos_nombres_explosion[nombres_actuales]
# Si alguno no estaba en la lista, usamos el original
labels_nuevos[is.na(labels_nuevos)] <- nombres_actuales[is.na(labels_nuevos)]

# Asignamos los nombres finales
names(frecuencias_explosion_ordenadas) <- labels_nuevos

# 4. GRÁFICO HORIZONTAL
par(mar = c(5, 12, 4, 2))  # Margen izquierdo amplio

barplot(frecuencias_explosion_ordenadas,
        horiz = TRUE,
        main = "Explosión de Líquido (Liquid Explosion)",
        xlab = "Frecuencia",
        col = "orangered",  
        las = 1,
        cex.names = 1.0,
        border = "white",
        font.main = 2)

14 Pipeline Shutdown

# 1. PREPARACIÓN DE DATOS
# Buscamos la columna de forma segura (Pipeline Shutdown)
# "Shutdown" es la palabra clave única
col_target <- grep("Shutdown", names(database), value = TRUE)[1]
raw_shutdown <- database[[col_target]]

# Limpiamos vacíos
raw_shutdown <- raw_shutdown[raw_shutdown != ""]

# 2. TABLA Y ORDENAMIENTO
frecuencias_shutdown <- table(raw_shutdown)
frecuencias_shutdown_ordenadas <- sort(frecuencias_shutdown, decreasing = TRUE)

# 3. RENOMBRAR CATEGORÍAS 
# Definimos el "diccionario" de traducción
nuevos_nombres_shutdown <- c(
  "YES" = "Sí",
  "NO" = "No"
)

# Aplicamos los nombres con seguridad:
nombres_actuales <- names(frecuencias_shutdown_ordenadas)
# Buscamos el nombre nuevo en el diccionario
labels_nuevos <- nuevos_nombres_shutdown[nombres_actuales]
# Si alguno no estaba en la lista (sale NA), le dejamos el nombre original
labels_nuevos[is.na(labels_nuevos)] <- nombres_actuales[is.na(labels_nuevos)]

# Asignamos los nombres finales
names(frecuencias_shutdown_ordenadas) <- labels_nuevos

# 4. GRÁFICO HORIZONTAL (Tu diseño)
par(mar = c(5, 12, 4, 2))  # Margen izquierdo amplio

barplot(frecuencias_shutdown_ordenadas,
        horiz = TRUE,
        main = "Estado de Pipeline Shutdown",
        xlab = "Frecuencia",
        col = "skyblue",   
        las = 1,
        cex.names = 1.0,   
        border = "white",
        font.main = 2)