library(readxl)
Produccio_n_Campo_Sacha_csv <- read_excel("Producción Campo Sacha.csv.xlsx")
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 ...
## $ 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 ...
# Buscar columna de amperaje
col_amperaje <- grep("amper|ampere|corriente|current",
colnames(Produccio_n_Campo_Sacha_csv),
ignore.case = TRUE,
value = TRUE)[1]
if(!is.na(col_amperaje)) {
Produccio_n_Campo_Sacha_csv$Amperaje <- Produccio_n_Campo_Sacha_csv[[col_amperaje]]
cat("✅ Amperaje extraído de:", col_amperaje, "\n")
} else {
cat("⚠️ No se encontró columna de amperaje\n")
cat("Columnas disponibles:\n")
print(colnames(Produccio_n_Campo_Sacha_csv))
stop("Selecciona manualmente la columna de amperaje")
}
## ✅ Amperaje extraído de: Amperaje
# Preparar vector
Amperaje <- as.numeric(Produccio_n_Campo_Sacha_csv$Amperaje)
Amperaje <- na.omit(Amperaje)
n <- length(Amperaje)
cat("\n📊 RESUMEN AMPERAJE:\n")
##
## 📊 RESUMEN AMPERAJE:
cat("• Muestra (n):", n, "\n")
## • Muestra (n): 7705
cat("• Mínimo:", min(Amperaje), "A\n")
## • Mínimo: 0 A
cat("• Máximo:", max(Amperaje), "A\n")
## • Máximo: 116 A
cat("• Media:", mean(Amperaje), "A\n")
## • Media: 32.95817 A
# Definir número de intervalos
k <- min(ceiling(log2(n)) + 1, 15)
if(n > 1000) k <- 12
cat("\n", rep("=", 60), "\n", sep = "")
##
## ============================================================
cat("CONSTRUYENDO TABLA DE DISTRIBUCIÓN\n")
## CONSTRUYENDO TABLA DE DISTRIBUCIÓN
cat(rep("=", 60), "\n\n", sep = "")
## ============================================================
cat("• Tamaño de muestra (n):", n, "\n")
## • Tamaño de muestra (n): 7705
cat("• Número de intervalos sugerido:", k, "\n")
## • Número de intervalos sugerido: 12
# Calcular estadísticas
rango <- max(Amperaje) - min(Amperaje)
media_a <- mean(Amperaje)
sd_a <- sd(Amperaje)
cv <- sd_a / media_a * 100
cat("• Coeficiente de variación:", round(cv, 1), "%\n")
## • Coeficiente de variación: 43 %
# Método de construcción
if(cv < 50 && n > 100) {
cat("• Método seleccionado: Límites basados en percentiles\n")
percentiles <- quantile(Amperaje, probs = seq(0, 1, length.out = k + 1))
lim_inf <- as.numeric(percentiles)
lim_inf[1] <- max(0, floor(lim_inf[1]))
lim_inf[k + 1] <- ceiling(lim_inf[k + 1])
} else {
cat("• Método seleccionado: Amplitud constante\n")
amplitud <- 3.5 * sd_a / (n^(1/3))
amplitud <- round(amplitud)
if(amplitud < 5) amplitud <- 5
if(amplitud > 20) amplitud <- 20
cat("• Amplitud de clase:", amplitud, "A\n")
inicio <- 0
lim_inf <- seq(from = inicio, by = amplitud, length.out = k + 1)
if(lim_inf[k + 1] < max(Amperaje)) {
lim_inf <- c(lim_inf, lim_inf[k + 1] + amplitud)
k <- k + 1
}
}
## • Método seleccionado: Límites basados en percentiles
# Crear intervalos y calcular frecuencias
intervalos <- cut(Amperaje, breaks = lim_inf, include.lowest = TRUE, right = FALSE)
frecuencia <- table(intervalos)
frecuencia_rel <- frecuencia / n
frecuencia_acum <- cumsum(frecuencia)
frecuencia_rel_acum <- cumsum(frecuencia_rel)
marca_clase_tabla <- (lim_inf[1:k] + lim_inf[2:(k+1)]) / 2
# Crear tabla
TDF_Amperaje <- data.frame(
Li = round(lim_inf[1:k], 1),
Ls = round(lim_inf[2:(k+1)], 1),
MC = round(marca_clase_tabla, 1),
"ni (FA)" = as.numeric(frecuencia),
"hi (FR)" = round(as.numeric(frecuencia_rel), 4),
"Ni (FAA)" = as.numeric(frecuencia_acum),
"Hi (FRA)" = round(as.numeric(frecuencia_rel_acum), 4)
)
cat("\n", rep("=", 70), "\n", sep = "")
##
## ======================================================================
cat("TABLA 1: DISTRIBUCIÓN DE FRECUENCIAS DEL AMPERAJE\n")
## TABLA 1: DISTRIBUCIÓN DE FRECUENCIAS DEL AMPERAJE
cat(rep("=", 70), "\n\n", sep = "")
## ======================================================================
print(TDF_Amperaje)
## Li Ls MC ni..FA. hi..FR. Ni..FAA. Hi..FRA.
## 1 0 18 9.0 559 0.0726 559 0.0726
## 2 18 21 19.5 617 0.0801 1176 0.1526
## 3 21 24 22.5 666 0.0864 1842 0.2391
## 4 24 25 24.5 432 0.0561 2274 0.2951
## 5 25 27 26.0 768 0.0997 3042 0.3948
## 6 27 29 28.0 643 0.0835 3685 0.4783
## 7 29 32 30.5 684 0.0888 4369 0.5670
## 8 32 35 33.5 629 0.0816 4998 0.6487
## 9 35 39 37.0 721 0.0936 5719 0.7422
## 10 39 47 43.0 597 0.0775 6316 0.8197
## 11 47 57 52.0 740 0.0960 7056 0.9158
## 12 57 116 86.5 649 0.0842 7705 1.0000
# Resumen
indice_modal <- which.max(frecuencia)
cat("\nRESUMEN DE LA DISTRIBUCIÓN:\n")
##
## RESUMEN DE LA DISTRIBUCIÓN:
cat(rep("-", 40), "\n", sep = "")
## ----------------------------------------
cat("• Intervalo modal:", names(frecuencia)[indice_modal], "\n")
## • Intervalo modal: [25,27)
cat("• Frecuencia absoluta:", max(frecuencia), "\n")
## • Frecuencia absoluta: 768
cat("• Frecuencia relativa:", round(100 * max(frecuencia_rel), 1), "%\n")
## • Frecuencia relativa: 10 %
# Preparar variables para gráficas
frec_acum <- as.numeric(frecuencia_acum)
marca_clase <- marca_clase_tabla
hist(Amperaje,
breaks = lim_inf,
col = "#2196F3",
border = "white",
main = "Histograma de Amperaje",
xlab = "Amperaje (A)",
ylab = "Cantidad",
las = 1)
Figura 1: Histograma de Amperaje
boxplot(Amperaje,
horizontal = TRUE,
col = "#FF9800",
main = "Diagrama de Caja",
xlab = "Amperaje (A)",
las = 1)
Figura 2: Diagrama de Caja
categorias <- cut(Amperaje,
breaks = quantile(Amperaje, probs = seq(0, 1, 0.25)),
include.lowest = TRUE)
barplot(table(categorias),
col = c("#E3F2FD", "#BBDEFB", "#90CAF9", "#64B5F6"),
main = "Distribución por Cuartiles",
xlab = "",
ylab = "Cantidad",
las = 2)
Figura 3: Distribución por Cuartiles
plot(marca_clase, frec_acum,
type = "b",
pch = 19,
col = "#00796B",
main = "Ojiva Acumulada",
xlab = "Marca de Clase (A)",
ylab = "Cantidad",
las = 1)
grid()
abline(h = n/2, col = "red", lty = 2)
abline(h = n * 0.8, col = "blue", lty = 2)
Figura 4: Ojiva Acumulada
if(!require(e1071)) install.packages("e1071", quiet = TRUE)
library(e1071)
cat("\n", rep("=", 70), "\n", sep = "")
##
## ======================================================================
cat("TABLA 2: RESUMEN DE ESTADÍSTICOS DESCRIPTIVOS\n")
## TABLA 2: RESUMEN DE ESTADÍSTICOS DESCRIPTIVOS
cat(rep("=", 70), "\n\n", sep = "")
## ======================================================================
# Calcular estadísticos
estadisticos <- list(
"Tamaño de muestra" = n,
"Media" = mean(Amperaje),
"Mediana" = median(Amperaje),
"Moda aproximada*" = as.numeric(names(sort(table(round(Amperaje, 1)), decreasing = TRUE)[1])),
"Desviación estándar" = sd(Amperaje),
"Varianza" = var(Amperaje),
"Coeficiente de variación" = (sd(Amperaje)/mean(Amperaje)) * 100,
"Mínimo" = min(Amperaje),
"Máximo" = max(Amperaje),
"Rango" = max(Amperaje) - min(Amperaje),
"Primer cuartil (Q1)" = quantile(Amperaje, 0.25),
"Tercer cuartil (Q3)" = quantile(Amperaje, 0.75),
"Rango intercuartílico (IQR)" = IQR(Amperaje),
"Asimetría (Skewness)" = skewness(Amperaje),
"Curtosis (Kurtosis)" = kurtosis(Amperaje)
)
# Mostrar tabla simple
for(i in seq_along(estadisticos)) {
nombre <- names(estadisticos)[i]
valor <- estadisticos[[i]]
if(nombre == "Coeficiente de variación") {
cat(sprintf("%-25s: %6.1f %%\n", nombre, valor))
} else if(nombre == "Tamaño de muestra") {
cat(sprintf("%-25s: %6.0f\n", nombre, valor))
} else if(nombre %in% c("Asimetría (Skewness)", "Curtosis (Kurtosis)")) {
cat(sprintf("%-25s: %6.4f\n", nombre, valor))
} else {
cat(sprintf("%-25s: %6.2f A\n", nombre, valor))
}
}
## Tamaño de muestra : 7705
## Media : 32.96 A
## Mediana : 29.00 A
## Moda aproximada* : 24.00 A
## Desviación estándar : 14.19 A
## Varianza : 201.26 A
## Coeficiente de variación: 43.0 %
## Mínimo : 0.00 A
## Máximo : 116.00 A
## Rango : 116.00 A
## Primer cuartil (Q1) : 24.00 A
## Tercer cuartil (Q3) : 39.00 A
## Rango intercuartílico (IQR): 15.00 A
## Asimetría (Skewness) : 1.0685
## Curtosis (Kurtosis) : 1.4962
cat("\n* Moda aproximada (redondeada a 1 decimal)\n")
##
## * Moda aproximada (redondeada a 1 decimal)
cat("\n", rep("=", 50), "\n", sep = "")
##
## ==================================================
cat("CONCLUSIONES\n")
## CONCLUSIONES
cat(rep("=", 50), "\n\n", sep = "")
## ==================================================
promedio_a <- mean(Amperaje)
cv_a <- sd(Amperaje)/mean(Amperaje) * 100
cat("1. NIVEL DE AMPERAJE:\n")
## 1. NIVEL DE AMPERAJE:
cat(" • Promedio:", round(promedio_a, 1), "A\n")
## • Promedio: 33 A
cat(" • Rango típico:", round(quantile(Amperaje, 0.25), 1), "-",
round(quantile(Amperaje, 0.75), 1), "A\n\n")
## • Rango típico: 24 - 39 A
cat("2. ESTABILIDAD:\n")
## 2. ESTABILIDAD:
cat(" • Coeficiente de variación:", round(cv_a, 1), "%\n")
## • Coeficiente de variación: 43 %
if(cv_a > 30) {
cat(" • Clasificación: ALTA VARIABILIDAD\n")
} else if(cv_a > 15) {
cat(" • Clasificación: VARIABILIDAD MODERADA\n")
} else {
cat(" • Clasificación: BAJA VARIABILIDAD\n")
}
## • Clasificación: ALTA VARIABILIDAD
cat("\n", rep("-", 50), "\n", sep = "")
##
## --------------------------------------------------
cat("Análisis completado\n", sep = "")
## Análisis completado
cat(rep("-", 50), "\n", sep = "")
## --------------------------------------------------