##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: Liss Murillo ####
### CARRERA: INGENIERÍA EN PETROLEOS #####
###Grupo 4###


############################################################
# PASO 1: CARGA DE DATOS
############################################################

library(readxl)
Produccio_n_Campo_Sacha_csv <- read_excel("r-graficas/Producción Campo Sacha.csv.xlsx")
## New names:
## • `` -> `...16`
View(Produccio_n_Campo_Sacha_csv)
str(Produccio_n_Campo_Sacha_csv)
## 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 ...
##  $ ...16                 : 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 ...
############################################################
# PASO 2: SELECCIÓN Y DEPURACIÓN DE LA VARIABLE
############################################################

salinidad <- Produccio_n_Campo_Sacha_csv$Salinidad_BE
salinidad <- as.numeric(salinidad)
salinidad <- na.omit(salinidad)

############################################################
# PASO 3: NÚMERO DE INTERVALOS (REGLA DE STURGES)
############################################################

k <- 1 + (3.3 * log10(length(salinidad)))
k <- floor(k)

############################################################
# PASO 4: RANGO, AMPLITUD Y CLASES
############################################################

min <- min(salinidad)
max <- max(salinidad)
R <- max - min
A <- R / k

Li <- round(seq(from = min, to = max - A, by = A), 4)
Ls <- round(seq(from = min + A, to = max, by = A), 4)
MC <- round((Li + Ls) / 2, 2)

############################################################
# PASO 5: FRECUENCIAS (ni, hi y acumuladas)
############################################################

ni <- numeric(length(Li))
for (i in 1:length(Li)) {
  ni[i] <- sum(salinidad >= Li[i] & salinidad < Ls[i])
}
ni[length(Li)] <- sum(salinidad >= Li[length(Li)] & salinidad <= max)

cat("Suma de ni =", sum(ni), "\n")
## Suma de ni = 7705
hi <- ni / sum(ni) * 100
cat("Suma de hi =", sum(hi), "\n")
## Suma de hi = 100
Niasc <- cumsum(ni)
Nidsc <- rev(cumsum(rev(ni)))
Hiasc <- round(cumsum(hi))
Hidsc <- round(rev(cumsum(rev(hi))))

TDFSalinidad <- data.frame(Li, Ls, MC, ni, hi, Niasc, Nidsc, Hiasc, Hidsc)

############################################################
# PASO 6: TABLAS DE DISTRIBUCIÓN DE FRECUENCIAS
############################################################

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
tabla1_sturges <- TDFSalinidad %>%
  gt() %>%
  tab_header(
    title = md("*Tabla 1: Distribución de Frecuencias*"),
    subtitle = md("**Método Sturges - Variable: Salinidad_BE**")
  ) %>%
  tab_source_note(
    source_note = md("Campo Sacha")
  ) %>%
  cols_label(
    Li = "L. Inferior",
    Ls = "L. Superior",
    MC = "Marca Clase",
    ni = "Frec. Abs.",
    hi = "Frec. Rel. %",
    Niasc = "Ni Asc.",
    Nidsc = "Ni Desc.",
    Hiasc = "Hi Asc. %",
    Hidsc = "Hi Desc. %"
  ) %>%
  fmt_number(columns = c(Li, Ls, MC), decimals = 2) %>%
  fmt_number(columns = hi, decimals = 2, pattern = "{x}%")

tabla1_sturges
Tabla 1: Distribución de Frecuencias
Método Sturges - Variable: Salinidad_BE
L. Inferior L. Superior Marca Clase Frec. Abs. Frec. Rel. % Ni Asc. Ni Desc. Hi Asc. % Hi Desc. %
0.00 6,153.85 3,076.92 1515 19.66% 1515 7705 20 100
6,153.85 12,307.69 9,230.77 1360 17.65% 2875 6190 37 80
12,307.69 18,461.54 15,384.62 1278 16.59% 4153 4830 54 63
18,461.54 24,615.38 21,538.46 487 6.32% 4640 3552 60 46
24,615.38 30,769.23 27,692.31 700 9.09% 5340 3065 69 40
30,769.23 36,923.08 33,846.15 392 5.09% 5732 2365 74 31
36,923.08 43,076.92 40,000.00 705 9.15% 6437 1973 84 26
43,076.92 49,230.77 46,153.85 471 6.11% 6908 1268 90 16
49,230.77 55,384.62 52,307.69 348 4.52% 7256 797 94 10
55,384.62 61,538.46 58,461.54 161 2.09% 7417 449 96 6
61,538.46 67,692.31 64,615.38 132 1.71% 7549 288 98 4
67,692.31 73,846.15 70,769.23 92 1.19% 7641 156 99 2
73,846.15 80,000.00 76,923.08 64 0.83% 7705 64 100 1
Campo Sacha
############################################################
# PASO 7: HISTOGRAMA Y TABLA CON INTERVALOS AUTOMÁTICOS
############################################################

histo_Salinidad <- hist(salinidad,
                        main = "Gráfica: Distribución de la Salinidad_BE\nCampo Sacha",
                        xlab = "Salinidad_BE",
                        ylab = "Cantidad",
                        col = "lightblue",
                        border = "darkblue",
                        las = 1)

Limites <- histo_Salinidad$breaks
LimInf <- Limites[1:(length(Limites)-1)]
LimSup <- Limites[2:length(Limites)]
Mc <- histo_Salinidad$mids
ni_R <- histo_Salinidad$counts

cat("Suma de ni (R automático) =", sum(ni_R), "\n")
## Suma de ni (R automático) = 7705
hi_R <- ni_R / sum(ni_R) * 100
cat("Suma de hi (R automático) =", sum(hi_R), "\n")
## Suma de hi (R automático) = 100
Ni_asc <- cumsum(ni_R)
Ni_dsc <- rev(cumsum(rev(ni_R)))
Hi_asc <- round(cumsum(hi_R), 2)
Hi_dsc <- round(rev(cumsum(rev(hi_R))), 2)

TDF_Salinidad_R <- data.frame(LimInf, LimSup, Mc, ni_R, hi_R,
                              Ni_asc, Ni_dsc, Hi_asc, Hi_dsc)

tabla3_R_auto <- TDF_Salinidad_R %>%
  gt() %>%
  tab_header(
    title = md("*Tabla 3: Distribución - Intervalos R*"),
    subtitle = md("**Método Automático de R - Variable: Salinidad_BE**")
  ) %>%
  tab_source_note(
    source_note = md("Intervalos generados automáticamente por hist()")
  ) %>%
  cols_label(
    LimInf = "L. Inferior",
    LimSup = "L. Superior",
    Mc = "Marca Clase",
    ni_R = "Frec. Abs.",
    hi_R = "Frec. Rel. %",
    Ni_asc = "Ni Asc.",
    Ni_dsc = "Ni Desc.",
    Hi_asc = "Hi Asc. %",
    Hi_dsc = "Hi Desc. %"
  ) %>%
  fmt_number(columns = c(hi_R, Hi_asc, Hi_dsc),
             decimals = 2,
             pattern = "{x}%")

tabla3_R_auto
Tabla 3: Distribución - Intervalos R
Método Automático de R - Variable: Salinidad_BE
L. Inferior L. Superior Marca Clase Frec. Abs. Frec. Rel. % Ni Asc. Ni Desc. Hi Asc. % Hi Desc. %
0 5000 2500 1201 15.59% 1201 7705 15.59% 100.00%
5000 10000 7500 1085 14.08% 2286 6504 29.67% 84.41%
10000 15000 12500 1210 15.70% 3496 5419 45.37% 70.33%
15000 20000 17500 853 11.07% 4349 4209 56.44% 54.63%
20000 25000 22500 297 3.85% 4646 3356 60.30% 43.56%
25000 30000 27500 412 5.35% 5058 3059 65.65% 39.70%
30000 35000 32500 530 6.88% 5588 2647 72.52% 34.35%
35000 40000 37500 664 8.62% 6252 2117 81.14% 27.48%
40000 45000 42500 272 3.53% 6524 1453 84.67% 18.86%
45000 50000 47500 504 6.54% 7028 1181 91.21% 15.33%
50000 55000 52500 228 2.96% 7256 677 94.17% 8.79%
55000 60000 57500 157 2.04% 7413 449 96.21% 5.83%
60000 65000 62500 94 1.22% 7507 292 97.43% 3.79%
65000 70000 67500 74 0.96% 7581 198 98.39% 2.57%
70000 75000 72500 91 1.18% 7672 124 99.57% 1.61%
75000 80000 77500 33 0.43% 7705 33 100.00% 0.43%
Intervalos generados automáticamente por hist()
############################################################
# PASO 8: GRÁFICAS, MEDIDAS ESTADÍSTICAS Y CONCLUSIÓN
############################################################

barplot(TDFSalinidad$ni,
        space = 0,
        main = "Frecuencia Absoluta Local\nSalinidad_BE",
        col = "blue",
        xlab = "Marca de Clase",
        ylab = "ni",
        names.arg = TDFSalinidad$MC)

barplot(TDFSalinidad$Niasc,
        space = 0,
        main = "Frecuencia Absoluta Global\nSalinidad_BE",
        col = "steelblue",
        ylab = "Ni",
        names.arg = round(TDFSalinidad$MC,2),
        las = 2)

barplot(TDFSalinidad$hi,
        space = 0,
        col = "blue",
        xlab = "Marca de Clase",
        ylab = "Porcentaje (%)",
        names.arg = TDFSalinidad$MC)

barplot(TDFSalinidad$Hiasc,
        space = 0,
        main = "Porcentaje Acumulado\nSalinidad_BE",
        col = "lightblue",
        border = "darkblue",
        ylab = "Porcentaje (%)",
        names.arg = round(TDFSalinidad$MC,2),
        ylim = c(0,100),
        las = 2)

plot(TDFSalinidad$Ls, TDFSalinidad$Niasc,
     type = "o",
     col = "blue",
     main = "Ojivas Combinadas (ni)\nSalinidad_BE",
     xlab = "Salinidad_BE",
     ylab = "Frecuencia Acumulada")

lines(TDFSalinidad$Li, TDFSalinidad$Nidsc,
      type = "o",
      col = "red")

plot(TDFSalinidad$Ls, TDFSalinidad$Hiasc,
     type = "o",
     col = "darkgreen",
     main = "Ojivas Combinadas (%)\nSalinidad_BE",
     xlab = "Salinidad_BE",
     ylab = "Porcentaje Acumulado",
     ylim = c(0,100))

lines(TDFSalinidad$Li, TDFSalinidad$Hidsc,
      type = "o",
      col = "orange")

abline(h = 50, col = "red", lty = 2)

boxplot(salinidad,
        horizontal = TRUE,
        col = "blue",
        main = "Diagrama de Caja\nSalinidad_BE",
        xlab = "Salinidad_BE")

outliers <- boxplot.stats(salinidad)$out
num_outliers <- length(outliers)

x <- mean(salinidad)
Me <- median(salinidad)

intervalo_modal <- which.max(TDFSalinidad$ni)
li_modal <- TDFSalinidad$Li[intervalo_modal]
ls_modal <- TDFSalinidad$Ls[intervalo_modal]

ri <- min(salinidad)
rs <- max(salinidad)

varianza <- var(salinidad)
s <- sd(salinidad)
CV <- (s / x) * 100

library(e1071)
As <- skewness(salinidad)
K <- kurtosis(salinidad)

TablaIndicadores <- data.frame(
  Variable = "Salinidad_BE",
  minimo = round(ri,2),
  maximo = round(rs,2),
  x = round(x,2),
  Me = round(Me,2),
  Moda = paste0("[",round(li_modal,2),", ",round(ls_modal,2),"]"),
  sd = round(s,2),
  Cv = round(CV,2),
  As = round(As,2),
  K = round(K,2),
  Outliers = num_outliers
)

TablaIndicadores %>%
  gt() %>%
  tab_header(
    title = md("*Tabla: Indicadores estadísticos*"),
    subtitle = md("**Variable: Salinidad_BE**")
  ) %>%
  tab_source_note(
    source_note = md("Campo Sacha")
  )
Tabla: Indicadores estadísticos
Variable: Salinidad_BE
Variable minimo maximo x Me Moda sd Cv As K Outliers
Salinidad_BE 0 80000 22946.26 17000 [0, 6153.85] 18369.11 80.05 0.78 -0.26 0
Campo Sacha
# CONCLUSIÓN
# La variable Salinidad_BE fluctúa entre 0 y 80 000, con valores concentrados alrededor de 17 000 (mediana) y una media de 22 946,26, presentando una desviación estándar de 18 369,11, lo que evidencia una alta dispersión (CV = 80,05 %). Los valores se concentran en la parte baja de la variable (intervalo modal: 0 – 6 153,85), con asimetría positiva moderada (0,78), distribución platicúrtica (K = −0,26) y ausencia de valores atípicos, indicando un comportamiento heterogéneo de la salinidad en el Campo Sacha.