1 Carga de Librerías

# Si no las tienes instaladas: install.packages(c("dplyr","gt"))
library(dplyr)
library(gt)

2 Carga de Datos

Datos <- read.csv("produccin-de-pozos-de-gas-y-petrleo-no-convencional.csv",
                   sep = ";", fileEncoding = "UTF-8", stringsAsFactors = FALSE)
str(Datos)
## 'data.frame':    400759 obs. of  40 variables:
##  $ idempresa             : chr  "YSUR" "YSUR" "YSUR" "YSUR" ...
##  $ anio                  : int  2018 2015 2017 2018 2015 2017 2018 2016 2017 2018 ...
##  $ mes                   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ idpozo                : int  132771 131719 145330 132770 136137 131430 132769 135206 131429 132738 ...
##  $ prod_pet              : chr  "7.212" "5.240" "0.00" "3.322" ...
##  $ prod_gas              : chr  "510.173" "1.879.820" "0.00" "101.733" ...
##  $ prod_agua             : chr  "0.34" "1.590" "0.00" "14.2" ...
##  $ iny_agua              : chr  "0" "0.000" "0.00" "0" ...
##  $ iny_gas               : chr  "0" "0.000" "0.00" "0" ...
##  $ iny_co2               : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ iny_otro              : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ tef                   : chr  "30.15" "31.000" "0.00" "31" ...
##  $ vida_util             : chr  "" "" "" "" ...
##  $ tipoextraccion        : chr  "Surgencia Natural" "Surgencia Natural" "Sin Sistema de Extracción" "Surgencia Natural" ...
##  $ tipoestado            : chr  "Extracción Efectiva" "Extracción Efectiva" "En Estudio" "Extracción Efectiva" ...
##  $ tipopozo              : chr  "Gasífero" "Gasífero" "Otro tipo" "Gasífero" ...
##  $ observaciones         : chr  "" "" "" "" ...
##  $ fechaingreso          : chr  "2018-02-10 08:37:14.717426" "2015-02-26 13:35:35.533458" "2017-02-16 13:45:37.233373" "2018-02-10 08:37:14.717426" ...
##  $ rectificado           : chr  "f" "f" "f" "f" ...
##  $ habilitado            : chr  "t" "t" "t" "t" ...
##  $ idusuario             : int  444 5 444 444 5 444 444 5 444 444 ...
##  $ empresa               : chr  "YSUR ENERGÍA ARGENTINA S.R.L." "YSUR ENERGÍA ARGENTINA S.R.L." "YSUR ENERGÍA ARGENTINA S.R.L." "YSUR ENERGÍA ARGENTINA S.R.L." ...
##  $ sigla                 : chr  "APA.RN.EFO-126(d)" "AEA.NQ.Gu-1176d" "APA.Nq.Hua.x-1" "APA.RN.EFO-122(d)" ...
##  $ formprod              : chr  "LAJA" "PREC" "VMUT" "LAJA" ...
##  $ profundidad           : chr  "3820" "2592" "4100" "3814" ...
##  $ formacion             : chr  "lajas" "precuyo" "vaca muerta" "lajas" ...
##  $ idareapermisoconcesion: chr  "FEO" "NDD" "X009" "FEO" ...
##  $ areapermisoconcesion  : chr  "ESTACION FERNANDEZ ORO" "AL NORTE DE LA DORSAL" "HUACALERA" "ESTACION FERNANDEZ ORO" ...
##  $ idareayacimiento      : chr  "Z155" "GUA" "Y325" "Z155" ...
##  $ areayacimiento        : chr  "ESTACION FERNANDEZ ORO" "GUANACO" "HUACALERA" "ESTACION FERNANDEZ ORO" ...
##  $ cuenca                : chr  "NEUQUINA" "NEUQUINA" "NEUQUINA" "NEUQUINA" ...
##  $ provincia             : chr  "Rio Negro" "Neuquén" "Neuquén" "Rio Negro" ...
##  $ coordenadax           : chr  "-6.783.808.193" "-6.924.999.839" "-6.979.045.203" "-6.786.739.055" ...
##  $ coordenaday           : chr  "-3.901.910.996" "-3.886.503.323" "-3.820.704.866" "-3.900.716.726" ...
##  $ tipo_de_recurso       : chr  "NO CONVENCIONAL" "NO CONVENCIONAL" "NO CONVENCIONAL" "NO CONVENCIONAL" ...
##  $ proyecto              : chr  "GAS PLUS" "GAS PLUS" "Sin Proyecto" "GAS PLUS" ...
##  $ clasificacion         : chr  "EXPLOTACION" "EXPLOTACION" "EXPLORACION" "EXPLOTACION" ...
##  $ subclasificacion      : chr  "DESARROLLO" "DESARROLLO" "EXPLORACION" "DESARROLLO" ...
##  $ sub_tipo_recurso      : chr  "TIGHT" "TIGHT" "SHALE" "TIGHT" ...
##  $ fecha_data            : chr  "31/1/2018" "31/1/2015" "31/1/2017" "31/1/2018" ...

3 Extracción de la Variable

# Variable cuantitativa CONTINUA: profundidad del pozo (metros)
Profundidad <- as.numeric(Datos$profundidad)
Profundidad <- Profundidad[!is.na(Profundidad) & Profundidad > 0]

# Se eliminan errores de carga extremos (mismo criterio que en el proyecto de
# regresión): se conservan los valores hasta el percentil 99
p99 <- quantile(Profundidad, 0.99)
Profundidad <- Profundidad[Profundidad <= p99]

4 Conteo

n <- length(Profundidad)
n
## [1] 391597
summary(Profundidad)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##    2.454 2876.000 3252.000 3640.471 4531.000 6605.000
# --- Regla de Sturges ---
k_sturges <- 1 + 3.322 * log10(n)
k <- round(k_sturges)
amplitud <- (max(Profundidad) - min(Profundidad)) / k
cat("Numero de clases (Sturges): k =", round(k_sturges, 2), "-> se usan", k, "clases\n")
## Numero de clases (Sturges): k = 19.58 -> se usan 20 clases
cat("Amplitud de clase:", round(amplitud, 2), "\n")
## Amplitud de clase: 330.13

5 Tabla de Frecuencia

# Tabla de clases simplificada, generada directamente en R con cut()
# Se definen los cortes manualmente (redondeados, sin notación científica)
minv <- floor(min(Profundidad))
maxv <- ceiling(max(Profundidad))
cortes <- round(seq(minv, maxv, length.out = k + 1))
cortes[1] <- minv          # se evita cualquier extensión negativa
cortes[length(cortes)] <- maxv

Clases <- cut(Profundidad, breaks = cortes, include.lowest = TRUE, right = FALSE, dig.lab = 10)
TDF_prof <- table(Clases)

# Punto medio de cada clase (para usar como etiqueta simple y derecha en las gráficas)
limites <- gsub("\\[|\\]|\\(|\\)", "", names(TDF_prof))
limites <- strsplit(limites, ",")
puntos_medios <- sapply(limites, function(x) round(mean(as.numeric(x))))

tabla_prof <- as.data.frame(TDF_prof)
colnames(tabla_prof)[1] <- "Clase"

tabla_resumen <- tabla_prof %>%
  rename(ni = Freq) %>%
  mutate(`hi (%)` = round(ni / sum(ni) * 100, 2))

#### Fila de totales ####
totales <- data.frame(Clase = "TOTAL",
                       ni = sum(tabla_resumen$ni),
                       `hi (%)` = sum(tabla_resumen$`hi (%)`),
                       check.names = FALSE)
tabla_final <- rbind(data.frame(lapply(tabla_resumen, as.character), check.names = FALSE), totales)

tabla_final_gt <- tabla_final %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°1 de Distribución de Frecuencias de Profundidad**")
  ) %>%
  tab_source_note(source_note = "Autor: Mayerli Nazareno") %>%
  cols_label(
    Clase = "Clase (m)",
    ni = "Frecuencia (ni)",
    `hi (%)` = "Porcentaje (hi%)"
  ) %>%
  tab_options(
    heading.title.font.size = px(16),
    column_labels.background.color = "#F0F0F0"
  )

tabla_final_gt
Tabla N°1 de Distribución de Frecuencias de Profundidad
Clase (m) Frecuencia (ni) Porcentaje (hi%)
[2,332) 969 0.25
[332,662) 545 0.14
[662,992) 237 0.06
[992,1323) 255 0.07
[1323,1653) 14356 3.67
[1653,1983) 26958 6.88
[1983,2313) 11119 2.84
[2313,2643) 13953 3.56
[2643,2973) 44530 11.37
[2973,3304) 87856 22.44
[3304,3634) 18127 4.63
[3634,3964) 39240 10.02
[3964,4294) 24490 6.25
[4294,4624) 14228 3.63
[4624,4954) 21651 5.53
[4954,5284) 15331 3.91
[5284,5615) 19036 4.86
[5615,5945) 20152 5.15
[5945,6275) 10870 2.78
[6275,6605] 7694 1.96
TOTAL 391597 100
Autor: Mayerli Nazareno

6 Gráficas

6.1 Diagramas de Barras de Cantidad

par(mar = c(7, 6, 4, 2))
barplot(TDF_prof,
        main = "", xlab = "", ylab = "",
        col = "darkorange", las = 1, cex.names = 0.8,
        names.arg = puntos_medios)
mtext("Cantidad de Pozos", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Profundidad (m) - punto medio de clase", side = 1, line = 5)
mtext("Gráfica N°1: Cantidad de Pozos por Clase de Profundidad",
      side = 3, line = 2, adj = 0.5, cex = 0.9, font = 2)

6.2 Diagramas de Barras Porcentual

hi_valores <- as.numeric(tabla_resumen$`hi (%)`)
par(mar = c(7, 6, 4, 2))
bp <- barplot(hi_valores,
              main = "", xlab = "", ylab = "",
              col = "darkorange",
              ylim = c(0, max(hi_valores) * 1.3),
              names.arg = puntos_medios,
              las = 1, cex.names = 0.8)
mtext("Porcentaje %", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Profundidad (m) - punto medio de clase", side = 1, line = 5)
mtext("Gráfica N°2: Distribución Porcentual por Clase de Profundidad",
      side = 3, line = 2, adj = 0.5, cex = 0.9, font = 2)

6.3 Diagrama de Cajas (Boxplot)

par(mar = c(4, 6, 4, 2))
boxplot(Profundidad,
        main = "", ylab = "Profundidad (m)",
        col = "lightgreen")
mtext("Gráfica N°3: Diagrama de Caja de Profundidad",
      side = 3, line = 2, adj = 0.5, cex = 0.9, font = 2)

6.4 Ojiva

Fi <- cumsum(as.numeric(TDF_prof))
limites_sup <- sapply(limites, function(x) as.numeric(x[2]))
par(mar = c(5, 6, 4, 2))
plot(limites_sup, Fi, type = "o", pch = 19, col = "purple",
     main = "", xlab = "Profundidad (m)", ylab = "Frecuencia Acumulada (Fi)")
mtext("Gráfica N°4: Ojiva - Frecuencia Acumulada de Profundidad",
      side = 3, line = 2, adj = 0.5, cex = 0.9, font = 2)

7 Indicadores Estadísticos

media_prof   <- mean(Profundidad)
mediana_prof <- median(Profundidad)
sd_prof      <- sd(Profundidad)
min_prof     <- min(Profundidad)
max_prof     <- max(Profundidad)
cv_prof      <- sd_prof / media_prof * 100

# Para una variable continua agrupada, la "moda" se reporta como la clase modal
clase_modal <- names(TDF_prof)[which.max(TDF_prof)]

skewness <- function(x) {
  n <- length(x)
  (sum((x - mean(x))^3) / n) / (sd(x)^3)
}
kurtosis <- function(x) {
  n <- length(x)
  m4 <- sum((x - mean(x))^4) / n
  m2 <- sum((x - mean(x))^2) / n
  m4 / m2^2 - 3
}
as_prof <- skewness(Profundidad)
k_prof  <- kurtosis(Profundidad)

bp_stats   <- boxplot.stats(Profundidad)
atipicos   <- bp_stats$out
n_atipicos <- length(atipicos)

tabla_indicadores <- data.frame(
  "Variable"        = "Profundidad",
  "Rango"           = paste(round(min_prof, 1), "-", round(max_prof, 1), "m"),
  "Media (Mx)"      = round(media_prof, 2),
  "Mediana (Me)"    = round(mediana_prof, 2),
  "Moda (Mo)"       = clase_modal,
  "Varianza (V)"    = round(sd_prof^2, 2),
  "Desv. Est. (Sd)" = round(sd_prof, 2),
  "C.V. (%)"        = round(cv_prof, 2),
  "Asimetria (As)"  = round(as_prof, 3),
  "Curtosis (K)"    = round(k_prof, 3),
  check.names = FALSE
)

tabla_indicadores_gt <- tabla_indicadores %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°2 de Indicadores de Profundidad**")
  ) %>%
  tab_source_note(source_note = "Autor: Mayerli Nazareno") %>%
  tab_options(
    heading.title.font.size = px(16),
    column_labels.background.color = "#F0F0F0"
  )

tabla_indicadores_gt
Tabla N°2 de Indicadores de Profundidad
Variable Rango Media (Mx) Mediana (Me) Moda (Mo) Varianza (V) Desv. Est. (Sd) C.V. (%) Asimetria (As) Curtosis (K)
Profundidad 2.5 - 6605 m 3640.47 3252 [2973,3304) 1615391 1270.98 34.91 0.344 -0.519
Autor: Mayerli Nazareno

8 Conclusiones

tendencia    <- if (abs(media_prof - mediana_prof) / mediana_prof > 0.05) "mediana" else "media"
valor_tend   <- if (tendencia == "media") round(media_prof, 2) else round(mediana_prof, 2)
homogeneidad <- if (cv_prof <= 33) "homogéneo" else "heterogéneo"
agrupamiento <- if (abs(as_prof) < 0.5) "débilmente" else if (abs(as_prof) < 1) "medianamente" else "fuertemente"
zona         <- if (as_prof > 0.5) "baja" else if (as_prof < -0.5) "alta" else "media"
atipicos_txt <- if (n_atipicos == 0) "sin valores atípicos" else
  paste0("con ", n_atipicos, " valores atípicos (por ejemplo: ",
         paste(round(head(sort(atipicos, decreasing = TRUE), 3), 1), collapse = ", "), " ...)")

cat(paste0(
  "Los valores de profundidad fluctúan entre ", round(min_prof, 1), " y ", round(max_prof, 1),
  " metros y giran en torno a la ", tendencia, " (", valor_tend, " m), ",
  "con una desviación estándar de ", round(sd_prof, 2), " m, ",
  atipicos_txt, ", siendo un conjunto de datos **", homogeneidad, "**, ",
  "cuyos valores se agrupan ", agrupamiento, " en la parte ", zona, " de profundidad. ",
  "Por lo anterior, el comportamiento es *[defina 'beneficioso' o 'perjudicial' según el ",
  "contexto: mayores profundidades suelen implicar mayores costos de perforación, lo que ",
  "podría interpretarse como perjudicial para la rentabilidad]*."
))

Los valores de profundidad fluctúan entre 2.5 y 6605 metros y giran en torno a la mediana (3252 m), con una desviación estándar de 1270.98 m, con 1117 valores atípicos (por ejemplo: 350, 350, 350 …), siendo un conjunto de datos heterogéneo, cuyos valores se agrupan débilmente en la parte media de profundidad. Por lo anterior, el comportamiento es [defina ‘beneficioso’ o ‘perjudicial’ según el contexto: mayores profundidades suelen implicar mayores costos de perforación, lo que podría interpretarse como perjudicial para la rentabilidad].