##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: JULIO JARAMILLO ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####
#### VARIABLE-Pipeline 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
tabla_frec <- as.data.frame(table(datasetf$`Pipeline 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 hi_porcentual
## 1     ABOVEGROUND 1475 0.531148722         53.11
## 2            TANK  301 0.108390349         10.84
## 3 TRANSITION AREA   16 0.005761613          0.58
## 4     UNDERGROUND  985 0.354699316         35.47
## 5           TOTAL 2777 1.000000000        100.00
# ============================================
# 3. GRÁFICO 1: BARPLOT CON NI (local)
# ============================================
barplot(tabla_frec$ni,
        names.arg = tabla_frec$Categoria,
        main = "Gráfica N°1: Distribución de Pipeline Type",
        xlab = "Tipo",
        ylab = "Cantidad",
        col = "steelblue",
        ylim = c(0, max(tabla_frec$ni) * 1.15),
        las = 1)

# ============================================
# 4. GRÁFICO 2: BARPLOT CON NI (global)
# ============================================
barplot(tabla_frec$ni,
        names.arg = tabla_frec$Categoria,
        main = "Gráfica N°2: Distribución Global de Pipeline Type",
        xlab = "Tipo",
        ylab = "Cantidad",
        col = "steelblue",
        ylim = c(0, max(tabla_frec$ni) * 1.5),
        las = 1)

# ============================================
# 5. GRÁFICO 3: BARPLOT CON HI
# ============================================
barplot(tabla_frec$hi,
        names.arg = tabla_frec$Categoria,
        main = "Gráfica N°3: Distribución de Pipeline Type",
        xlab = "Tipo",
        ylab = "Cantidad",
        col = "steelblue",
        ylim = c(0, max(tabla_frec$hi) * 1.15),
        las = 1)

# ============================================
# 6. GRÁFICO 4: BARPLOT CON HI_PORCENTUAL
# ============================================
barplot(tabla_frec$hi_porcentual,
        names.arg = tabla_frec$Categoria,
        main = "Gráfica N°4: Distribución Porcentual de Pipeline Type",
        xlab = "Tipo",
        ylab = "Cantidad",
        col = "steelblue",
        ylim = c(0, max(tabla_frec$hi_porcentual) * 1.5),
        las = 1)

# ============================================
# GRÁFICO DE CIRCULAR CON ETIQUETAS EXTERNAS
# ============================================

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

# Calcular coordenadas para las etiquetas
porcentajes <- tabla_frec$hi_porcentual
angulos <- cumsum(c(0, porcentajes))  # Acumular porcentajes
angulos_medios <- (angulos[-length(angulos)] + angulos[-1]) / 2  # Ángulos medios

# Convertir a radianes
angulos_rad <- angulos_medios * 2 * pi / 100

# Dibujar el gráfico de pastel (inicialmente sin etiquetas)
pie(tabla_frec$hi_porcentual,
    labels = NA,
    main = "Gráfica N°5: Distribución Porcentual de Pipeline Type",
    col = colores_degradado,
    border = "white",
    cex = 0.8)

# Calcular posiciones para etiquetas externas
radio_etiquetas <- 1.15  # Radio para posicionar etiquetas

# Agregar líneas y etiquetas
for (i in 1:nrow(tabla_frec)) {
  # Calcular coordenadas del punto en el borde del pastel
  x0 <- cos(angulos_rad[i]) * 0.5
  y0 <- sin(angulos_rad[i]) * 0.5
  
  # Calcular coordenadas del punto externo para la etiqueta
  x1 <- cos(angulos_rad[i]) * radio_etiquetas
  y1 <- sin(angulos_rad[i]) * radio_etiquetas
  
  # Dibujar línea desde el pastel hasta la etiqueta
  segments(x0, y0, x1, y1, col = "gray50", lwd = 1)
  
  # Posicionar etiqueta según cuadrante
  if (x1 > 0) {
    # Lado derecho - alinear a la izquierda
    text(x1, y1, 
         labels = paste0(tabla_frec$Categoria[i], " (", tabla_frec$hi_porcentual[i], "%)"),
         pos = 4, cex = 0.7, font = 2)
  } else {
    # Lado izquierdo - alinear a la derecha
    text(x1, y1, 
         labels = paste0(tabla_frec$Categoria[i], " (", tabla_frec$hi_porcentual[i], "%)"),
         pos = 2, cex = 0.7, font = 2)
  }
}

# Opción alternativa con leyenda compacta
legend("topright",
       legend = paste0(tabla_frec$Categoria, ": ", tabla_frec$hi_porcentual, "%"),
       fill = colores_degradado,
       cex = 0.7,
       title = "Pipeline Type",
       bty = "n")

# ============================================
# 8. CÁLCULO DE LA MODA 
# ============================================
# Encontrar la moda 
tabla <- table(datasetf$`Pipeline Type`)
moda <- names(tabla)[which.max(tabla)]
cat("La moda es:", moda, "\n")
## La moda es: ABOVEGROUND
cat("Aparece", max(tabla), "veces\n")
## Aparece 1475 veces
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 “ABOVEGROUND”")
## La variable Pipeline Location, de tipo nominal, presenta como valor más frecuente “ABOVEGROUND”