##### 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
Salinidad_BH <- datos$Salinidad_BH
Salinidad_BH <- as.numeric(Salinidad_BH)
Salinidad_BH <- na.omit(Salinidad_BH)
##3. Cálculo de intervalos (sturges)
R <- max(Salinidad_BH) - min(Salinidad_BH)
k <- floor(1 + (3.3 * log10(length(Salinidad_BH))))
A <- R / k
liminf <- seq(from = min(Salinidad_BH),
by = A,
length.out = k)
limsup <- liminf + A
limsup[k] <- max(Salinidad_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(Salinidad_BH >= liminf[i] & Salinidad_BH <= limsup[i])
} else {
ni[i] <- sum(Salinidad_BH >= liminf[i] & Salinidad_BH < limsup[i])
}
}
#4.2 Frecuencias relativas y acumuladas
hi <- (ni / length(Salinidad_BH)) * 100
Niasc <- cumsum(ni)
Nidsc <- rev(cumsum(rev(ni)))
Hiasc <- cumsum(hi)
Hidsc <- rev(cumsum(rev(hi)))
#4.3 Tabla de frecuencias
tabla_Salinidad_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_Salinidad_BH %>%
gt() %>%
tab_header(
title = md("**Tabla 1: Distribución de Frecuencias de Salinidad_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 Salinidad_BH |
| Campo Sacha | Método Sturges |
| L. Inferior |
L. Superior |
Marca Clase |
ni |
hi % |
Ni Asc. |
Ni Desc. |
Hi Asc. % |
Hi Desc. % |
| 0.00 |
5,080.00 |
2,540.00 |
96 |
15.02% |
96 |
639 |
15.02% |
100.00% |
| 5,080.00 |
10,160.00 |
7,620.00 |
162 |
25.35% |
258 |
543 |
40.38% |
84.98% |
| 10,160.00 |
15,240.00 |
12,700.00 |
168 |
26.29% |
426 |
381 |
66.67% |
59.62% |
| 15,240.00 |
20,320.00 |
17,780.00 |
67 |
10.49% |
493 |
213 |
77.15% |
33.33% |
| 20,320.00 |
25,400.00 |
22,860.00 |
25 |
3.91% |
518 |
146 |
81.06% |
22.85% |
| 25,400.00 |
30,480.00 |
27,940.00 |
21 |
3.29% |
539 |
121 |
84.35% |
18.94% |
| 30,480.00 |
35,560.00 |
33,020.00 |
70 |
10.95% |
609 |
100 |
95.31% |
15.65% |
| 35,560.00 |
40,640.00 |
38,100.00 |
13 |
2.03% |
622 |
30 |
97.34% |
4.69% |
| 40,640.00 |
45,720.00 |
43,180.00 |
4 |
0.63% |
626 |
17 |
97.97% |
2.66% |
| 45,720.00 |
50,800.00 |
48,260.00 |
13 |
2.03% |
639 |
13 |
100.00% |
2.03% |
| Campo Sacha |
##5. Gráficos
#5.1 Histograma
hist(Salinidad_BH,
main = "Gráfica No.1: Distribución de Salinidad_BH - Campo Sacha",
breaks = seq(min(Salinidad_BH), max(Salinidad_BH) + A, by = A),
xlab = "Salinidad_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 Salinidad_BH",
xlab = "Salinidad_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(Salinidad_BH,
horizontal = TRUE,
col = "steelblue",
main = "Gráfica No.3: Distribución de Salinidad_BH - Campo Sacha",
xlab = "Salinidad_BH",
xaxt = "n")
axis(1, at = pretty(Salinidad_BH),
labels = format(pretty(Salinidad_BH), scientific = FALSE))

# Outliers
outliers <- boxplot.stats(Salinidad_BH)$out
cat("\nNúmero de outliers:", length(outliers), "\n")
##
## Número de outliers: 100
if(length(outliers) > 0) {
cat("Outliers:", round(outliers, 2), "\n")
}
## Outliers: 50800 35000 31900 50800 31900 35000 35000 35000 31900 35000 35000 35000 31900 31900 35000 31900 35000 38500 38500 31900 35000 38500 35000 35000 31900 38500 38500 31900 31900 38500 31900 35000 38500 35000 35000 31900 40200 40200 40200 31900 40200 35000 31900 32000 32000 32000 32000 35000 31900 31750 31900 40500 31900 31750 31900 31750 31750 31900 40500 31900 31900 31900 31900 31900 31900 31900 31900 31900 31900 31900 50800 31900 50800 44000 44000 31900 44000 50800 31900 31900 50800 31900 44000 50800 31900 50800 31900 31900 50800 31900 50800 31900 50800 50800 31900 31900 31900 31900 50800 31900
##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_BH)
mediana <- median(Salinidad_BH)
moda_intervalo <- get_mode_interval()
desv <- sd(Salinidad_BH)
varianza <- var(Salinidad_BH)
cv <- (desv / media) * 100
asim <- skewness(Salinidad_BH)
curt <- kurtosis(Salinidad_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(Salinidad_BH), 2), round(max(Salinidad_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 Salinidad_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 Salinidad_BH |
| Indicador |
Valor |
| Mínimo |
0 |
| Máximo |
50800 |
| Media |
14378.23 |
| Mediana |
11200 |
| Moda (intervalo) |
[10160, 15240] |
| Desviación Estándar |
11290.35 |
| Varianza |
127472090.83 |
| Coef. Variación (%) |
78.52 |
| Asimetría |
1.3 |
| Curtosis |
1.07 |
| N° Outliers |
100 |
| Campo Sacha |
##7. Conclusión
#La variable Salinidad_BH fluctúa entre 0.00 y 50800.00 y sus valores están en torno a los 11200.00 (media = 14378.23 ), con una desviación estándar de 11290.35 siendo un conjunto de valores extremadamente heterogéneos (CV = 78.52%) cuyos valores se concentran en el intervalo modal [10160, 15240] y con distribución leptocúrtica (K = 1.07) y sesgo pronunciado hacia la derecha (As = 1.3) a excepción de los 100 valores atípicos identificados, por lo tanto el comportamiento de la variable indica un proceso mayoritariamente inestable con mediciones consistentes en el rango principal, aunque con presencia significativa de lecturas extremas que requieren análisis particular.