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(ProdPet)
n
## [1] 255679
summary(ProdPet)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 14.16 85.69 957.20 1179.14 9406.38
# --- Regla de Sturges ---
k_sturges <- 1 + 3.322 * log10(n)
k <- round(k_sturges)
amplitud <- (max(ProdPet) - min(ProdPet)) / k
cat("Numero de clases (Sturges): k =", round(k_sturges, 2), "-> se usan", k, "clases\n")
## Numero de clases (Sturges): k = 18.96 -> se usan 19 clases
cat("Amplitud de clase:", round(amplitud, 2), "\n")
## Amplitud de clase: 495.07
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(ProdPet))
maxv <- ceiling(max(ProdPet))
cortes <- round(seq(minv, maxv, length.out = k + 1), 1)
cortes[1] <- minv # se evita cualquier extensión negativa
cortes[length(cortes)] <- maxv
Clases <- cut(ProdPet, breaks = cortes, include.lowest = TRUE, right = FALSE, dig.lab = 10)
TDF_pet <- table(Clases)
# Punto medio de cada clase (para usar como etiqueta simple y derecha en las gráficas)
limites <- gsub("\\[|\\]|\\(|\\)", "", names(TDF_pet))
limites <- strsplit(limites, ",")
puntos_medios <- sapply(limites, function(x) round(mean(as.numeric(x)), 1))
tabla_pet <- as.data.frame(TDF_pet)
colnames(tabla_pet)[1] <- "Clase"
tabla_resumen <- tabla_pet %>%
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 Producción de Petróleo**")
) %>%
tab_source_note(source_note = "Autor: Mayerli Nazareno") %>%
cols_label(
Clase = "Clase (m3)",
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 Producción de Petróleo |
| Clase (m3) |
Frecuencia (ni) |
Porcentaje (hi%) |
| [0,495.1) |
167483 |
65.51 |
| [495.1,990.2) |
17058 |
6.67 |
| [990.2,1485.3) |
16948 |
6.63 |
| [1485.3,1980.4) |
11878 |
4.65 |
| [1980.4,2475.5) |
8514 |
3.33 |
| [2475.5,2970.6) |
6446 |
2.52 |
| [2970.6,3465.7) |
4824 |
1.89 |
| [3465.7,3960.8) |
3762 |
1.47 |
| [3960.8,4455.9) |
3108 |
1.22 |
| [4455.9,4951.1) |
2660 |
1.04 |
| [4951.1,5446.2) |
2329 |
0.91 |
| [5446.2,5941.3) |
2020 |
0.79 |
| [5941.3,6436.4) |
1751 |
0.68 |
| [6436.4,6931.5) |
1421 |
0.56 |
| [6931.5,7426.6) |
1335 |
0.52 |
| [7426.6,7921.7) |
1141 |
0.45 |
| [7921.7,8416.8) |
1023 |
0.4 |
| [8416.8,8911.9) |
1012 |
0.4 |
| [8911.9,9407] |
966 |
0.38 |
| TOTAL |
255679 |
100.02 |
| Autor: Mayerli Nazareno |
6 Gráficas
6.1 Diagramas de Barras de Cantidad
par(mar = c(7, 6, 4, 2))
barplot(TDF_pet,
main = "", xlab = "", ylab = "",
col = "darkorange", las = 1, cex.names = 0.7,
names.arg = puntos_medios)
mtext("Cantidad de Pozos", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Producción de Petróleo (m3) - punto medio de clase", side = 1, line = 5)
mtext("Gráfica N°1: Cantidad de Pozos por Clase de Producción de Petróleo",
side = 3, line = 2, adj = 0.5, cex = 0.85, 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.7)
mtext("Porcentaje %", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Producción de Petróleo (m3) - punto medio de clase", side = 1, line = 5)
mtext("Gráfica N°2: Distribución Porcentual por Clase de Producción de Petróleo",
side = 3, line = 2, adj = 0.5, cex = 0.85, font = 2)

6.3 Diagrama de Cajas (Boxplot)
par(mar = c(4, 6, 4, 2))
boxplot(ProdPet,
main = "", ylab = "Producción de Petróleo (m3)",
col = "lightgreen")
mtext("Gráfica N°3: Diagrama de Caja de Producción de Petróleo",
side = 3, line = 2, adj = 0.5, cex = 0.9, font = 2)

6.4 Ojiva
Fi <- cumsum(as.numeric(TDF_pet))
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 = "Producción de Petróleo (m3)", ylab = "Frecuencia Acumulada (Fi)")
mtext("Gráfica N°4: Ojiva - Frecuencia Acumulada de Producción de Petróleo",
side = 3, line = 2, adj = 0.5, cex = 0.9, font = 2)

7 Indicadores Estadísticos
media_pet <- mean(ProdPet)
mediana_pet <- median(ProdPet)
sd_pet <- sd(ProdPet)
min_pet <- min(ProdPet)
max_pet <- max(ProdPet)
cv_pet <- sd_pet / media_pet * 100
# Para una variable continua agrupada, la "moda" se reporta como la clase modal
clase_modal <- names(TDF_pet)[which.max(TDF_pet)]
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_pet <- skewness(ProdPet)
k_pet <- kurtosis(ProdPet)
bp_stats <- boxplot.stats(ProdPet)
atipicos <- bp_stats$out
n_atipicos <- length(atipicos)
tabla_indicadores <- data.frame(
"Variable" = "Producción de Petróleo",
"Rango" = paste(round(min_pet, 2), "-", round(max_pet, 2), "m3"),
"Media (Mx)" = round(media_pet, 2),
"Mediana (Me)" = round(mediana_pet, 2),
"Moda (Mo)" = clase_modal,
"Varianza (V)" = round(sd_pet^2, 2),
"Desv. Est. (Sd)" = round(sd_pet, 2),
"C.V. (%)" = round(cv_pet, 2),
"Asimetria (As)" = round(as_pet, 3),
"Curtosis (K)" = round(k_pet, 3),
check.names = FALSE
)
tabla_indicadores_gt <- tabla_indicadores %>%
gt() %>%
tab_header(
title = md("**Tabla N°2 de Indicadores de Producción de Petróleo**")
) %>%
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 Producción de Petróleo |
| Variable |
Rango |
Media (Mx) |
Mediana (Me) |
Moda (Mo) |
Varianza (V) |
Desv. Est. (Sd) |
C.V. (%) |
Asimetria (As) |
Curtosis (K) |
| Producción de Petróleo |
0 - 9406.38 m3 |
957.2 |
85.69 |
[0,495.1) |
2982913 |
1727.11 |
180.43 |
2.486 |
6.265 |
| Autor: Mayerli Nazareno |
8 Conclusiones
tendencia <- if (abs(media_pet - mediana_pet) / mediana_pet > 0.05) "mediana" else "media"
valor_tend <- if (tendencia == "media") round(media_pet, 2) else round(mediana_pet, 2)
homogeneidad <- if (cv_pet <= 33) "homogéneo" else "heterogéneo"
agrupamiento <- if (abs(as_pet) < 0.5) "débilmente" else if (abs(as_pet) < 1) "medianamente" else "fuertemente"
zona <- if (as_pet > 0.5) "baja" else if (as_pet < -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 producción de petróleo fluctúan entre ", round(min_pet, 2), " y ", round(max_pet, 2),
" m3 y giran en torno a la ", tendencia, " (", valor_tend, " m3), ",
"con una desviación estándar de ", round(sd_pet, 2), " m3, ",
atipicos_txt, ", siendo un conjunto de datos **", homogeneidad, "**, ",
"cuyos valores se agrupan ", agrupamiento, " en la parte ", zona, " de producción de petróleo. ",
"Por lo anterior, el comportamiento es *[defina 'beneficioso' o 'perjudicial' según el ",
"contexto: una alta producción de petróleo suele interpretarse como beneficiosa para ",
"la rentabilidad del yacimiento]*."
))
Los valores de producción de petróleo fluctúan entre 0 y 9406.38 m3 y
giran en torno a la mediana (85.69 m3), con una desviación estándar de
1727.11 m3, con 27840 valores atípicos (por ejemplo: 9406.4, 9404.6,
9404.4 …), siendo un conjunto de datos heterogéneo,
cuyos valores se agrupan fuertemente en la parte baja de producción de
petróleo. Por lo anterior, el comportamiento es [defina
‘beneficioso’ o ‘perjudicial’ según el contexto: una alta producción de
petróleo suele interpretarse como beneficiosa para la rentabilidad del
yacimiento].