##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: JULIO JARAMILLO ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####
#### VARIABLE-Liquid Type ####

# ============================================
# 1. CARGAR DATOS
# ============================================
library(readr)
datasetf <- read_csv("datasetf.csv")
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
##   dat <- vroom(...)
##   problems(dat)
## Rows: 2795 Columns: 36
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (18): Accident Date/Time, Operator Name, Pipeline/Facility Name, Pipelin...
## dbl (18): Report Number, Supplemental Number, Accident Year, Operator ID, Ac...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# ============================================
# 2. TABLA DE FRECUENCIAS COMPLETA
# ============================================

# Crear tabla de frecuencias para Liquid Type
tabla_frec <- as.data.frame(table(datasetf$`Liquid Type`))
names(tabla_frec) <- c("Categoria", "ni")

# Calcular hi y hi_porcentual
tabla_frec$hi <- tabla_frec$ni / sum(tabla_frec$ni)
tabla_frec$hi_porcentual <- round(tabla_frec$hi * 100, 2)

# Agregar fila de TOTALES
tabla_completa <- rbind(tabla_frec,
                        data.frame(Categoria = "TOTAL",
                                   ni = sum(tabla_frec$ni),
                                   hi = 1.00,
                                   hi_porcentual = 100.00))

# Mostrar tabla
View(tabla_completa)
tabla_completa
##                                              Categoria   ni           hi
## 1 BIOFUEL / ALTERNATIVE FUEL(INCLUDING ETHANOL BLENDS)    2 0.0007155635
## 2                                 CO2 (CARBON DIOXIDE)   38 0.0135957066
## 3                                            CRUDE OIL 1398 0.5001788909
## 4           HVL OR OTHER FLAMMABLE OR TOXIC FLUID, GAS  418 0.1495527728
## 5   REFINED AND/OR PETROLEUM PRODUCT (NON-HVL), LIQUID  939 0.3359570662
## 6                                                TOTAL 2795 1.0000000000
##   hi_porcentual
## 1          0.07
## 2          1.36
## 3         50.02
## 4         14.96
## 5         33.60
## 6        100.00
# ============================================
# 3. CREAR NOMBRES MUY CORTOS ESPECÍFICOS
# ============================================

# Definir nombres cortos EXACTAMENTE como los especificaste
nombres_muy_cortos <- c(
  "CRUDE OIL" = "CRUDE",
  "REFINED AND/OR PETROLEUM PRODUCT (NON-HVL), LIQUID" = "PETROLEUM",
  "HVL OR OTHER FLAMMABLE OR TOXIC FLUID, GAS" = "HVL GAS", 
  "CO2 (CARBON DIOXIDE)" = "CO2",
  "BIOFUEL / ALTERNATIVE FUEL(INCLUDING ETHANOL BLENDS)" = "BIOFUEL"
)

# Aplicar los nombres cortos a la tabla
tabla_frec$Categoria_corta <- nombres_muy_cortos[tabla_frec$Categoria]

# Para categorías no mapeadas, usar las primeras 8 letras
sin_mapeo <- is.na(tabla_frec$Categoria_corta)
tabla_frec$Categoria_corta[sin_mapeo] <- substr(tabla_frec$Categoria[sin_mapeo], 1, 8)

# Ordenar por frecuencia absoluta (ni) de mayor a menor
tabla_frec <- tabla_frec[order(-tabla_frec$ni), ]

# ============================================
# 4. GRÁFICO 1: BARPLOT CON NI (local)
# ============================================
barplot(tabla_frec$ni,
        names.arg = tabla_frec$Categoria_corta,
        main = "Gráfica N°1: Distribución de Liquid Type",
        xlab = "Tipo de Líquido",
        ylab = "Cantidad",
        col = "steelblue",
        ylim = c(0, max(tabla_frec$ni) * 1.15),
        las = 2,
        cex.names = 0.7)

# ============================================
# 5. GRÁFICO 2: BARPLOT CON NI (global)
# ============================================
barplot(tabla_frec$ni,
        names.arg = tabla_frec$Categoria_corta,
        main = "Gráfica N°2: Distribución Globales de Liquid Type (Global)",
        xlab = "Tipo de Líquido",
        ylab = "Cantidad",
        col = "steelblue",
        ylim = c(0, max(tabla_frec$ni) * 1.5),
        las = 2,
        cex.names = 0.7)

# ============================================
# 6. GRÁFICO 3: BARPLOT CON HI
# ============================================
barplot(tabla_frec$hi,
        names.arg = tabla_frec$Categoria_corta,
        main = "Gráfica N°3: Distribución de Liquid Type (hi)",
        xlab = "Tipo de Líquido",
        ylab = "Cantidad",
        col = "steelblue",
        ylim = c(0, max(tabla_frec$hi) * 1.15),
        las = 2,
        cex.names = 0.7)

# ============================================
# 7. GRÁFICO 4: BARPLOT CON HI_PORCENTUAL
# ============================================
barplot(tabla_frec$hi_porcentual,
        names.arg = tabla_frec$Categoria_corta,
        main = "Gráfica N°4: Distribución Porcentual de Liquid Type (%)",
        xlab = "Tipo de Líquido",
        ylab = "cantidad",
        col = "steelblue",
        ylim = c(0, max(tabla_frec$hi_porcentual) * 1.5),
        las = 2,
        cex.names = 0.7)

# ============================================
# 8. GRÁFICO 5: CIRCULAR MEJORADO - SIN SUPERPOSICIONES
# ============================================

# Opción A: Pastel con porcentajes dentro y leyenda clara (RECOMENDADO)
tabla_frec_pastel <- tabla_frec[order(-tabla_frec$hi_porcentual), ]

# Crear degradado de azules
colores_degradado <- colorRampPalette(c("lightblue", "darkblue"))(nrow(tabla_frec_pastel))

# Calcular coordenadas
porcentajes <- tabla_frec_pastel$hi_porcentual
angulos <- cumsum(c(0, porcentajes))
angulos_medios <- (angulos[-length(angulos)] + angulos[-1]) / 2
angulos_rad <- angulos_medios * 2 * pi / 100

# Dibujar pastel SIN etiquetas iniciales
pie(tabla_frec_pastel$hi_porcentual,
    labels = NA,  # Sin etiquetas para evitar superposición
    main = "Gráfica N°5: Distribución Porcentual de Liquid Type (%)",
    col = colores_degradado,
    border = "white",
    radius = 0.9)

# Añadir porcentajes SOLO en segmentos grandes (> 10%)
for (i in 1:nrow(tabla_frec_pastel)) {
  if (tabla_frec_pastel$hi_porcentual[i] > 10) {
    # Posición dentro del segmento (70% del radio)
    x_texto <- 0.45 * cos(angulos_rad[i])
    y_texto <- 0.45 * sin(angulos_rad[i])
    
    text(x_texto, y_texto, 
         labels = paste0(tabla_frec_pastel$hi_porcentual[i], "%"),
         cex = 0.8, font = 2, col = "white")
  }
}

# Crear leyenda ordenada y clara
leyenda_ordenada <- paste0(tabla_frec_pastel$Categoria_corta, " (", 
                           tabla_frec_pastel$hi_porcentual, "%)")

# Posicionar leyenda fuera del gráfico
legend(x = 1.0, y = 0.9,
       legend = leyenda_ordenada,
       fill = colores_degradado,
       cex = 0.55,
       title = "Liquid Type",
       bty = "n",
       xpd = TRUE)  # Permite dibujar fuera del área del gráfico

# ============================================
# 9. CÁLCULO DE LA MODA 
# ============================================
tabla <- table(datasetf$`Liquid Type`)
moda <- names(tabla)[which.max(tabla)]

# Encontrar el nombre corto de la moda
moda_corta <- ifelse(moda %in% names(nombres_muy_cortos), 
                     nombres_muy_cortos[moda], 
                     substr(moda, 1, 8))

cat("\nMEDIDA DE TENDENCIA CENTRAL\n")
## 
## MEDIDA DE TENDENCIA CENTRAL
cat("============================\n")
## ============================
cat("La moda es:", moda, "\n")
## La moda es: CRUDE OIL
cat("Nombre corto:", moda_corta, "\n")
## Nombre corto: CRUDE
cat("Aparece", max(tabla), "veces\n")
## Aparece 1398 veces
cat("Porcentaje:", round(max(tabla)/nrow(datasetf)*100, 2), "%\n")
## Porcentaje: 50.02 %
cat("Número total de muestras:", nrow(datasetf), "\n")
## Número total de muestras: 2795
cat("La variable Pipeline Location, de tipo nominal, presenta como valor más frecuente “CRUDE OIL”")
## La variable Pipeline Location, de tipo nominal, presenta como valor más frecuente “CRUDE OIL”