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 DISCRETA: mes de producción (1 a 12)
Mes <- as.numeric(Datos$mes)
Mes <- Mes[!is.na(Mes)]

4 Conteo

n <- length(Mes)
n
## [1] 400759
# --- Regla de Sturges (referencia) ---
k_sturges <- 1 + 3.322 * log10(n)
cat("Numero de clases sugerido por Sturges: k =", round(k_sturges, 2), "\n")
## Numero de clases sugerido por Sturges: k = 19.61
cat("NOTA: 'mes' es discreta con solo 12 valores posibles (1 a 12); no se agrupa\n")
## NOTA: 'mes' es discreta con solo 12 valores posibles (1 a 12); no se agrupa
cat("en clases. Se usa la tabla de frecuencia simplificada generada en R con table().\n")
## en clases. Se usa la tabla de frecuencia simplificada generada en R con table().
TDF_mes <- table(Mes)
TDF_mes
## Mes
##     1     2     3     4     5     6     7     8     9    10    11    12 
## 34803 35323 35416 31234 31693 32071 32503 32889 33055 33550 33895 34327

5 Tabla de Frecuencia

tabla_mes <- as.data.frame(TDF_mes)
colnames(tabla_mes)[1] <- "Mes"

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

#### Fila de totales ####
totales <- data.frame(Mes = "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 del Mes de Producción**")
  ) %>%
  tab_source_note(source_note = "Autor: Mayerli Nazareno") %>%
  cols_label(
    Mes = "Mes",
    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 del Mes de Producción
Mes Frecuencia (ni) Porcentaje (hi%)
1 34803 8.68
2 35323 8.81
3 35416 8.84
4 31234 7.79
5 31693 7.91
6 32071 8
7 32503 8.11
8 32889 8.21
9 33055 8.25
10 33550 8.37
11 33895 8.46
12 34327 8.57
TOTAL 400759 100
Autor: Mayerli Nazareno

6 Gráficas

6.1 Diagramas de Barras de Cantidad

par(mar = c(6, 6, 4, 2))
barplot(TDF_mes,
        main = "", xlab = "", ylab = "",
        col = "darkorange")
mtext("Cantidad de Registros", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Mes", side = 1, line = 3)
mtext("Gráfica N°1: Cantidad de Registros por Mes",
      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(6, 6, 4, 2))
bp <- barplot(hi_valores,
              main = "", xlab = "", ylab = "",
              col = "darkorange",
              ylim = c(0, max(hi_valores) * 1.3),
              names.arg = tabla_resumen$Mes)
mtext("Porcentaje %", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Mes", side = 1, line = 3)
mtext("Gráfica N°2: Distribución Porcentual por Mes",
      side = 3, line = 2, adj = 0.5, cex = 0.9, font = 2)
text(x = bp, y = hi_valores, labels = paste0(hi_valores, "%"),
     pos = 3, cex = 0.8, col = "black")

6.3 Diagrama de Cajas (Boxplot)

par(mar = c(4, 6, 4, 2))
boxplot(Mes,
        main = "", ylab = "Mes",
        col = "lightblue", horizontal = TRUE)
mtext("Gráfica N°3: Diagrama de Caja del Mes de Producción",
      side = 3, line = 2, adj = 0.5, cex = 0.9, font = 2)

6.4 Ojiva

valores <- as.numeric(names(TDF_mes))
Fi <- cumsum(as.numeric(TDF_mes))
par(mar = c(5, 6, 4, 2))
plot(valores, Fi, type = "o", pch = 19, col = "purple",
     main = "", xlab = "Mes", ylab = "Frecuencia Acumulada (Fi)")
mtext("Gráfica N°4: Ojiva - Frecuencia Acumulada por Mes",
      side = 3, line = 2, adj = 0.5, cex = 0.9, font = 2)

7 Indicadores Estadísticos

media_mes   <- mean(Mes)
mediana_mes <- median(Mes)
sd_mes      <- sd(Mes)
min_mes     <- min(Mes)
max_mes     <- max(Mes)
cv_mes      <- sd_mes / media_mes * 100

moda_numerica <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}
moda_mes <- moda_numerica(Mes)

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_mes <- skewness(Mes)
k_mes  <- kurtosis(Mes)

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

tabla_indicadores <- data.frame(
  "Variable"        = "Mes",
  "Rango"           = paste(min_mes, "-", max_mes),
  "Media (Mx)"      = round(media_mes, 2),
  "Mediana (Me)"    = mediana_mes,
  "Moda (Mo)"       = moda_mes,
  "Varianza (V)"    = round(sd_mes^2, 2),
  "Desv. Est. (Sd)" = round(sd_mes, 2),
  "C.V. (%)"        = round(cv_mes, 2),
  "Asimetria (As)"  = round(as_mes, 3),
  "Curtosis (K)"    = round(k_mes, 3),
  check.names = FALSE
)

tabla_indicadores_gt <- tabla_indicadores %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°2 de Indicadores del Mes de Producción**")
  ) %>%
  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 del Mes de Producción
Variable Rango Media (Mx) Mediana (Me) Moda (Mo) Varianza (V) Desv. Est. (Sd) C.V. (%) Asimetria (As) Curtosis (K)
Mes 1 - 12 6.48 6 3 12.23 3.5 53.99 0.004 -1.251
Autor: Mayerli Nazareno

8 Conclusiones

tendencia    <- if (abs(media_mes - mediana_mes) / mediana_mes > 0.05) "mediana" else "media"
valor_tend   <- if (tendencia == "media") round(media_mes, 2) else mediana_mes
homogeneidad <- if (cv_mes <= 33) "homogéneo" else "heterogéneo"
agrupamiento <- if (abs(as_mes) < 0.5) "débilmente" else if (abs(as_mes) < 1) "medianamente" else "fuertemente"
zona         <- if (as_mes > 0.5) "baja" else if (as_mes < -0.5) "alta" else "media"
atipicos_txt <- if (n_atipicos == 0) "sin valores atípicos" else
  paste0("con ", n_atipicos, " valores atípicos (", paste(unique(atipicos), collapse = ", "), ")")

cat(paste0(
  "Los valores de mes fluctúan entre ", min_mes, " y ", max_mes,
  " y giran en torno a la ", tendencia, " (", valor_tend, "), ",
  "con una desviación estándar de ", round(sd_mes, 2), ", ",
  atipicos_txt, ", siendo un conjunto de datos **", homogeneidad, "**, ",
  "cuyos valores se agrupan ", agrupamiento, " en la parte ", zona, " de mes. ",
  "Por lo anterior, el comportamiento es *[defina 'beneficioso' o 'perjudicial' según el ",
  "contexto: 'mes' es una variable de calendario, por lo que esta interpretación ",
  "suele considerarse neutra]*."
))

Los valores de mes fluctúan entre 1 y 12 y giran en torno a la mediana (6), con una desviación estándar de 3.5, sin valores atípicos, siendo un conjunto de datos heterogéneo, cuyos valores se agrupan débilmente en la parte media de mes. Por lo anterior, el comportamiento es [defina ‘beneficioso’ o ‘perjudicial’ según el contexto: ‘mes’ es una variable de calendario, por lo que esta interpretación suele considerarse neutra].