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" ...
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].