##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: LEONARDO RUIZ ####
### CARRERA: INGENIERÍA EN PETROLEOS #####


##1. Carga de Datos
library(readxl)
datos <- read_excel("C:/Users/LEO/Documents/Producción Campo Sacha.csv.xlsx")
str(datos)
## tibble [8,344 × 31] (S3: tbl_df/tbl/data.frame)
##  $ mes                   : chr [1:8344] "Ene" "Ene" "Ene" "Ene" ...
##  $ día                   : num [1:8344] 1 1 1 1 1 1 1 1 1 1 ...
##  $ Pozo                  : chr [1:8344] "SACHA-001A" "SACHA-019A" "SACHA-052B" "SACHA-083A" ...
##  $ Campo                 : chr [1:8344] "SACHA" "SACHA" "SACHA" "SACHA" ...
##  $ Reservorio            : chr [1:8344] "U" "U" "U INFERIOR" "HOLLIN INFERIOR" ...
##  $ Bpd                   : num [1:8344] NA 53 249 139 186 136 NA 456 161 164 ...
##  $ Bppd_BH               : num [1:8344] 159 NA NA NA NA NA 155 NA NA NA ...
##  $ Bfpd_BE               : num [1:8344] NA 534 346 1158 1163 ...
##  $ Bfpd_BH               : num [1:8344] 695 NA NA NA NA NA 441 NA NA NA ...
##  $ Bapd_BE               : num [1:8344] NA 481 97 1019 977 ...
##  $ Bapd_BH               : num [1:8344] 536 NA NA NA NA NA 286 NA NA NA ...
##  $ Bsw_BE                : num [1:8344] NA 90.1 28 88 84 ...
##  $ Bsw_BH                : num [1:8344] 77.1 NA NA NA NA ...
##  $ Api_BE                : num [1:8344] NA 26.7 27.8 27.7 24 20.5 NA 28.5 29.9 26.3 ...
##  $ Api_BH                : num [1:8344] 27.8 NA NA NA NA NA 23.2 NA NA NA ...
##  $ Gas_BE                : num [1:8344] NA 10.76 50.55 1.11 27.9 ...
##  $ Gas_BH                : num [1:8344] 32.3 NA NA NA NA ...
##  $ Salinidad_BE          : num [1:8344] NA 15920 30227 1600 13000 ...
##  $ Salinidad_BH          : num [1:8344] 10800 NA NA NA NA NA 3800 NA NA NA ...
##  $ Rgl_BE                : num [1:8344] NA 20.15 146.1 0.96 23.99 ...
##  $ Rgl_BH                : num [1:8344] 46.5 NA NA NA NA ...
##  $ Gor_BE                : num [1:8344] NA 203.02 203.01 7.99 150 ...
##  $ Gor_BH                : num [1:8344] 203 NA NA NA NA ...
##  $ Horas_BE              : num [1:8344] NA 4 5 4 4 10 NA 4 10 10 ...
##  $ Horas_BH              : num [1:8344] 4 NA NA NA NA NA 4 NA NA NA ...
##  $ Bomba_BE              : chr [1:8344] NA "SF-320|SF-320|SF-900|SFGH2500/520/180/9259" "RC 1000|RC 1000|RC 1000/300/120/9250" "P23/68/30/7000" ...
##  $ Bomba_BH              : chr [1:8344] "JET  12K/0//0" NA NA NA ...
##  $ Frecuencia Operaciones: num [1:8344] NA 65 62 46 59 52 NA 58.5 57 54 ...
##  $ Voltaje               : num [1:8344] NA 479 457 364 440 452 NA 475 455 439 ...
##  $ Amperaje              : num [1:8344] NA 29 35 14 59 30 NA 23 35 34 ...
##  $ Presión Intake        : num [1:8344] NA 484 406 0 345 162 NA 546 338 0 ...
##2.Extraer la variable continua 
Gas_BH <- datos$Gas_BH
Gas_BH <- as.numeric(Gas_BH)
Gas_BH <- na.omit(Gas_BH)

##3. Cálculo de intervalos (sturges)
R <- max(Gas_BH) - min(Gas_BH)
k <- floor(1 + (3.3 * log10(length(Gas_BH))))
A <- R / k

liminf <- seq(from = min(Gas_BH), 
              by = A, 
              length.out = k)

limsup <- liminf + A
limsup[k] <- max(Gas_BH)

MC <- (liminf + limsup) / 2

##4.Tabla de distribución de frecuencias
#4.1 Frecuencia absoluta
ni <- numeric(k)
for (i in 1:k) {
  if (i == k) {
    ni[i] <- sum(Gas_BH >= liminf[i] & Gas_BH <= limsup[i])
  } else {
    ni[i] <- sum(Gas_BH >= liminf[i] & Gas_BH < limsup[i])
  }
}

#4.2 Frecuencias relativas y acumuladas
hi <- (ni / length(Gas_BH)) * 100
Niasc <- cumsum(ni)
Nidsc <- rev(cumsum(rev(ni)))
Hiasc <- cumsum(hi)
Hidsc <- rev(cumsum(rev(hi)))

#4.3 Tabla de frecuencias
tabla_Gas_BH <- data.frame(
  Límite_Inferior = round(liminf, 2),
  Límite_Superior = round(limsup, 2),
  Marca_Clase = round(MC, 2),
  ni = ni,
  hi_porc = round(hi, 2),
  Ni_asc = Niasc,
  Ni_dsc = Nidsc,
  Hiasc_porc = round(Hiasc, 2),
  Hidsc_porc = round(Hidsc, 2))

# TABLA 1 CON GT()
library(gt)
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(e1071)
tabla_Gas_BH %>%
  gt() %>%
  tab_header(
    title = md("**Tabla 1: Distribución de Frecuencias de Gas_BH**"),
    subtitle = md("Campo Sacha | Método Sturges")  
  ) %>%
  tab_source_note(
    source_note = md("**Campo Sacha**")
  ) %>%  # ¡SOLO UN PARÉNTESIS AQUÍ!
  cols_label(
    Límite_Inferior = "L. Inferior",
    Límite_Superior = "L. Superior", 
    Marca_Clase = "Marca Clase",
    hi_porc = "hi %",
    Ni_asc = "Ni Asc.",
    Ni_dsc = "Ni Desc.",
    Hiasc_porc = "Hi Asc. %",
    Hidsc_porc = "Hi Desc. %"
  ) %>%
  fmt_number(
    columns = c(Límite_Inferior, Límite_Superior, Marca_Clase),
    decimals = 2
  ) %>%
  fmt_number(
    columns = c(hi_porc, Hiasc_porc, Hidsc_porc),
    decimals = 2,
    pattern = "{x}%"
  )
Tabla 1: Distribución de Frecuencias de Gas_BH
Campo Sacha | Método Sturges
L. Inferior L. Superior Marca Clase ni hi % Ni Asc. Ni Desc. Hi Asc. % Hi Desc. %
1.20 20.49 10.85 108 16.90% 108 639 16.90% 100.00%
20.49 39.79 30.14 271 42.41% 379 531 59.31% 83.10%
39.79 59.08 49.43 93 14.55% 472 260 73.87% 40.69%
59.08 78.37 68.73 118 18.47% 590 167 92.33% 26.13%
78.37 97.66 88.02 41 6.42% 631 49 98.75% 7.67%
97.67 116.96 107.31 2 0.31% 633 8 99.06% 1.25%
116.96 136.25 126.60 1 0.16% 634 6 99.22% 0.94%
136.25 155.54 145.90 3 0.47% 637 5 99.69% 0.78%
155.54 174.84 165.19 0 0.00% 637 2 99.69% 0.31%
174.84 194.13 184.48 2 0.31% 639 2 100.00% 0.31%
Campo Sacha
##5. Gráficos
#5.1 Histograma
hist(Gas_BH,
     main = "Gráfica No.1: Distribución de Gas_BH - Campo Sacha",
     breaks = seq(min(Gas_BH), max(Gas_BH) + A, by = A),
     xlab = "Gas_BH",
     ylab = "Cantidad",
     col = "lightblue",
     border = "darkblue",
     xaxt = "n")  # IMPORTANTE: Suprimir eje X automático

# Eje X personalizado con MARCAS DE CLASE
axis(1, at = MC,  # Posiciones: Marcas de Clase
     labels = round(MC, 2),  # Etiquetas: valores redondeados
     las = 1)  # Etiquetas horizontales

#5.2 Ojivas
x_asc <- c(min(liminf), limsup)
y_asc <- c(0, Niasc)
x_desc <- c(liminf, max(limsup))
y_desc <- c(Nidsc, 0)
x_range <- range(c(x_asc, x_desc))
y_range <- c(0, max(c(y_asc, y_desc)))

plot(x_asc, y_asc, type = "o", col = "skyblue",
     main = "Gráfica No.2: Ojivas Ascendente y Descendente de Gas_BH",
     xlab = "Gas_BH",
     ylab = "Frecuencia acumulada",
     xlim = x_range, ylim = y_range,
     xaxt = "n", pch = 16, lwd = 2)

axis(1, at = pretty(x_range), 
     labels = format(pretty(x_range), scientific = FALSE))
axis(2, at = pretty(y_range))

lines(x_desc, y_desc, type = "o", col = "steelblue4", pch = 17, lwd = 2)

legend("right", 
       legend = c("Ojiva Ascendente", "Ojiva Descendente"),
       col = c("skyblue", "steelblue4"), 
       pch = c(16, 17), 
       lty = 1, 
       lwd = 2,
       cex = 0.8)

#5.3 Diagramas de cajas
boxplot(Gas_BH, 
        horizontal = TRUE, 
        col = "steelblue",
        main = "Gráfica No.3: Distribución de Gas_BH - Campo Sacha",
        xlab = "Gas_BH",
        xaxt = "n")

axis(1, at = pretty(Gas_BH), 
     labels = format(pretty(Gas_BH), scientific = FALSE))

# Outliers

outliers <- boxplot.stats(Gas_BH)$out
cat("\nNúmero de outliers:", length(outliers), "\n")
## 
## Número de outliers: 7
if(length(outliers) > 0) {
  cat("Outliers:", round(outliers, 2), "\n")
}
## Outliers: 114 118 194.13 138.4 138.4 142.3 182.4
##6. Indicadores estadísticos 
get_mode_interval <- function() {
  idx <- which.max(ni)
  return(paste0("[", round(liminf[idx], 2), ", ", round(limsup[idx], 2), "]"))
}

media <- mean(Gas_BH)
mediana <- median(Gas_BH)
moda_intervalo <- get_mode_interval()
desv <- sd(Gas_BH)
varianza <- var(Gas_BH)
cv <- (desv / media) * 100
asim <- skewness(Gas_BH)
curt <- kurtosis(Gas_BH)     

# CREAR DATA.FRAME DE INDICADORES (¡ESTA PARTE FALTABA!)
indicadores <- data.frame(
  Indicador = c("Mínimo", "Máximo", "Media", "Mediana", "Moda (intervalo)",
                "Desviación Estándar", "Varianza", "Coef. Variación (%)",
                "Asimetría", "Curtosis", "N° Outliers"),
  Valor = c(round(min(Gas_BH), 2), round(max(Gas_BH), 2),
            round(media, 2), round(mediana, 2), moda_intervalo,
            round(desv, 2), round(varianza, 2), round(cv, 2),
            round(asim, 2), round(curt, 2), length(outliers))
)

# TABLA 2 CON GT()
indicadores %>%
  gt() %>%
  tab_header(
    title = md("**Tabla 2: Indicadores Estadísticos de Gas_BH**")
  ) %>%
  tab_source_note(
    source_note = md("**Campo Sacha**")
  ) %>%
  cols_label(
    Indicador = "Indicador",
    Valor = "Valor"
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(columns = Indicador)
  )
Tabla 2: Indicadores Estadísticos de Gas_BH
Indicador Valor
Mínimo 1.2
Máximo 194.13
Media 42.54
Mediana 34.73
Moda (intervalo) [20.49, 39.79]
Desviación Estándar 24.81
Varianza 615.59
Coef. Variación (%) 58.32
Asimetría 1.16
Curtosis 3.58
N° Outliers 7
Campo Sacha
##7. Conclusión 
#La variable Gas_BH fluctúa entre 1.2  y 194.13  y sus valores están en torno a los 34.73  (media = 42.54 ), con una desviación estándar de 24.81 siendo un conjunto de valores heterogéneos  (CV = 58.32%) cuyos valores se concentran en el intervalo modal [20.49, 39.79]  y con distribución leptocúrtica (K = 3.58) y sesgo pronunciado hacia la derecha (As = 1.16) a excepción de los 7 valores atípicos identificados, por lo tanto el comportamiento de la variable indica un proceso de variabilidad moderada-alta con mediciones consistentes en el rango principal, aunque con presencia significativa de lecturas extremas que requieren análisis particular.