##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: Liss Murillo ####
### 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 
Salinidad_BE <- datos$Salinidad_BE
Salinidad_BE <- as.numeric(Salinidad_BE)
Salinidad_BE <- na.omit(Salinidad_BE)

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

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

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

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(Salinidad_BE >= liminf[i] & Salinidad_BE <= limsup[i])
  } else {
    ni[i] <- sum(Salinidad_BE >= liminf[i] & Salinidad_BE < limsup[i])
  }
}

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

#4.3 Tabla de frecuencias
tabla_Salinidad_BE <- 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_Salinidad_BE %>%
  gt() %>%
  tab_header(
    title = md("**Tabla 1: Distribución de Frecuencias de Salinidad_BE"),
    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 Salinidad_BE
Campo Sacha | Método Sturges
L. Inferior L. Superior Marca Clase ni hi % Ni Asc. Ni Desc. Hi Asc. % Hi Desc. %
0.00 6,153.85 3,076.92 1515 19.66% 1515 7705 19.66% 100.00%
6,153.85 12,307.69 9,230.77 1360 17.65% 2875 6190 37.31% 80.34%
12,307.69 18,461.54 15,384.62 1278 16.59% 4153 4830 53.90% 62.69%
18,461.54 24,615.38 21,538.46 487 6.32% 4640 3552 60.22% 46.10%
24,615.38 30,769.23 27,692.31 700 9.09% 5340 3065 69.31% 39.78%
30,769.23 36,923.08 33,846.15 392 5.09% 5732 2365 74.39% 30.69%
36,923.08 43,076.92 40,000.00 705 9.15% 6437 1973 83.54% 25.61%
43,076.92 49,230.77 46,153.85 471 6.11% 6908 1268 89.66% 16.46%
49,230.77 55,384.62 52,307.69 348 4.52% 7256 797 94.17% 10.34%
55,384.62 61,538.46 58,461.54 161 2.09% 7417 449 96.26% 5.83%
61,538.46 67,692.31 64,615.38 132 1.71% 7549 288 97.98% 3.74%
67,692.31 73,846.15 70,769.23 92 1.19% 7641 156 99.17% 2.02%
73,846.15 80,000.00 76,923.08 64 0.83% 7705 64 100.00% 0.83%
Campo Sacha
##5. Gráficos
#5.1 Histograma
hist(Salinidad_BE,
     main = "Gráfica No.1: Distribución de Salinidad_BE - Campo Sacha",
     breaks = seq(min(Salinidad_BE), max(Salinidad_BE) + A, by = A),
     xlab = "Salinidad_BE",
     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 Salinidad_BE",
     xlab = "Salinidad_BE",
     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(Salinidad_BE, 
        horizontal = TRUE, 
        col = "steelblue",
        main = "Gráfica No.3: Distribución de Salinidad_BE - Campo Sacha",
        xlab = "Salinidad_BE",
        xaxt = "n")

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

# Outliers

outliers <- boxplot.stats(Salinidad_BE)$out
cat("\nNúmero de outliers:", length(outliers), "\n")
## 
## Número de outliers: 0
if(length(outliers) > 0) {
  cat("Outliers:", round(outliers, 2), "\n")
}

##6. Indicadores estadísticos 
get_mode_interval <- function() {
  idx <- which.max(ni)
  return(paste0("[", round(liminf[idx], 2), ", ", round(limsup[idx], 2), "]"))
}

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

# 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(Salinidad_BE), 2), round(max(Salinidad_BE), 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 Salinidad_BE**")
  ) %>%
  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 Salinidad_BE
Indicador Valor
Mínimo 0
Máximo 80000
Media 22946.26
Mediana 17000
Moda (intervalo) [0, 6153.85]
Desviación Estándar 18369.11
Varianza 337424380.53
Coef. Variación (%) 80.05
Asimetría 0.78
Curtosis -0.26
N° Outliers 0
Campo Sacha
##7. Conclusión 
#La variable Salinidad_BE fluctúa entre 0 y 80 000 y sus valores están en torno a los 22 946.26 (media = 22 946.26), con una desviación estándar de 18 369.11 siendo un conjunto de valores heterogéneos (CV = 80.05 %) cuyos valores se concentran en el intervalo modal [0, 6 153.85] y con distribución leptocúrtica negativa (K = -0.26) y sesgo pronunciado hacia la derecha (As = 0.78) a excepción de los 0 valores atípicos identificados, por lo tanto el comportamiento de la variable indica un proceso mayoritariamente estable con mediciones consistentes en el rango principal, aunque con presencia de lecturas extremas que requieren análisis particular.