# VARIABLE CUALITATIVA NOMINAL: TIPO DE POZO
# Proyecto: Producción de pozos de gas y petróleo no convencional
# Grupo – Carrera de Petróleos
# 2026
# =========================================================
# 1. CARGA Y PREPARACIÓN DE LOS DATOS
# =========================================================
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(readr)
library(gt)
# Lectura del archivo CSV
datos <- read_delim(
"produccin-de-pozos-de-gas-y-petrleo-no-convencional.csv",
delim = ";"
)
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
## Rows: 400759 Columns: 40
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (27): idempresa, prod_pet, prod_gas, prod_agua, tef, tipoextraccion, ti...
## dbl (10): anio, mes, idpozo, iny_agua, iny_gas, iny_co2, iny_otro, vida_uti...
## lgl (2): rectificado, habilitado
## dttm (1): fechaingreso
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# =========================================================
# 2. CONSOLIDACIÓN DE LAS CATEGORÍAS DE POZO
# =========================================================
datos <- datos %>%
mutate(
tipopozo_consol = case_when(
tipopozo %in% c("Gas") ~
"Pozo de gas",
tipopozo %in% c("Petróleo", "Oil") ~
"Pozo petrolero",
tipopozo %in% c("Gas y petróleo", "Mixto") ~
"Pozo mixto",
tipopozo %in% c("Inyección") ~
"Pozo de inyección",
tipopozo %in% c("Otro", "Desconocido", "NA") ~
"Otros tipos de pozo",
TRUE ~ tipopozo
)
)
# =========================================================
# 3. TABLA DE DISTRIBUCIÓN DE FRECUENCIAS
# =========================================================
# 3.1. Cálculo de frecuencias
TDFPozo <- datos %>%
filter(!is.na(tipopozo_consol)) %>%
count(tipopozo_consol, name = "ni") %>%
arrange(ni) %>%
mutate(
hi = (ni / sum(ni)) * 100
)
# =========================================================
# 3.2. TABLA DE FRECUENCIAS
# =========================================================
TDFPozo_total <- TDFPozo %>%
add_row(
tipopozo_consol = "Total",
ni = sum(TDFPozo$ni),
hi = sum(TDFPozo$hi)
)
TDFPozo_total
## # A tibble: 7 × 3
## tipopozo_consol ni hi
## <chr> <int> <dbl>
## 1 Inyección de Gas 34 0.00850
## 2 Inyección de Agua 56 0.0140
## 3 Sumidero 624 0.156
## 4 Otro tipo 26977 6.74
## 5 Petrolífero 153729 38.4
## 6 Gasífero 218738 54.7
## 7 Total 400158 100
# =========================================================
# 3.3. PRESENTACIÓN DE LA TABLA
# =========================================================
tabla_presentacion <- TDFPozo_total %>%
mutate(
hi = round(hi, 4)
)
tabla_presentacion %>%
gt() %>%
tab_header(
title = md("**Tabla Nro. 1**"),
subtitle = md("Distribución de frecuencias de los tipos de pozo
utilizados en la producción de gas y petróleo
no convencional")
) %>%
cols_label(
tipopozo_consol = "Tipo de pozo",
ni = "Frecuencia absoluta (ni)",
hi = "Frecuencia relativa (%)"
) %>%
tab_source_note(
source_note = md("Elaborado por: Grupo – Carrera de Petróleos")
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(rows = tipopozo_consol == "Total")
)
| Tabla Nro. 1 |
| Distribución de frecuencias de los tipos de pozo
utilizados en la producción de gas y petróleo
no convencional |
| Tipo de pozo |
Frecuencia absoluta (ni) |
Frecuencia relativa (%) |
| Inyección de Gas |
34 |
0.0085 |
| Inyección de Agua |
56 |
0.0140 |
| Sumidero |
624 |
0.1559 |
| Otro tipo |
26977 |
6.7416 |
| Petrolífero |
153729 |
38.4171 |
| Gasífero |
218738 |
54.6629 |
| Total |
400158 |
100.0000 |
| Elaborado por: Grupo – Carrera de Petróleos |
# =========================================================
# DATOS PARA GRÁFICOS
# =========================================================
tabla_graficos <- tabla_presentacion %>%
filter(tipopozo_consol != "Total") %>%
arrange(ni)
# =========================================================
# 4. GRÁFICOS DE BARRAS
# =========================================================
# 4.1. Frecuencia absoluta
par(mar = c(12, 5, 4, 2))
barplot(
tabla_graficos$ni,
names.arg = tabla_graficos$tipopozo_consol,
las = 2,
col = "steelblue",
main = "Gráfica 1: Frecuencia absoluta de los tipos
de pozo en la producción no convencional",
ylab = "Número de registros",
xlab = "",
ylim = c(0, max(tabla_graficos$ni) * 1.15),
cex.names = 0.75,
cex.axis = 0.9
)
mtext(
"Tipo de pozo",
side = 1,
line = 10
)

# =========================================================
# 4.2. Frecuencia relativa
# =========================================================
par(mar = c(12, 5, 4, 2))
barplot(
tabla_graficos$hi,
names.arg = tabla_graficos$tipopozo_consol,
las = 2,
col = "skyblue",
main = "Gráfica 2: Frecuencia relativa de los tipos
de pozo en la producción no convencional",
ylab = "Porcentaje (%)",
xlab = "",
ylim = c(0, max(tabla_graficos$hi) * 1.15),
cex.names = 0.75,
cex.axis = 0.9
)
mtext(
"Tipo de pozo",
side = 1,
line = 10
)

# =========================================================
# 5. DIAGRAMA CIRCULAR
# =========================================================
par(mar = c(5, 4, 4, 10), xpd = TRUE)
colores <- c(
"#1f78b4",
"#33a02c",
"#e31a1c",
"#ff7f00",
"#6a3d9a"
)
pie(
tabla_graficos$hi,
labels =NA,
col = colores,
main = "Gráfica 3: Distribución porcentual de los tipos
de pozo en la producción no convencional"
)
legend(
x = 1.25,
y = 0,
legend = paste0(
tabla_graficos$tipopozo_consol,
" (", round(tabla_graficos$hi, 4), "%)"
),
fill = colores,
cex = 0.8,
bty = "n"
)

par(xpd = FALSE)
# =========================================================
# 6. INDICADORES ESTADÍSTICOS
# =========================================================
# 6.1. Moda
indice_moda <- which.max(tabla_graficos$ni)
moda_categoria <- tabla_graficos$tipopozo_consol[indice_moda]
moda_ni <- tabla_graficos$ni[indice_moda]
moda_hi <- round(tabla_graficos$hi[indice_moda], 4)
# =========================================================
# 6.2. TABLA RESUMEN DE INDICADORES
# =========================================================
tabla_resumen <- data.frame(
Variable = "Tipo de pozo",
Indicador = "Moda",
Resultado = paste0(
moda_categoria,
" (", moda_ni,
" registros, ",
moda_hi, "%)"
)
)
tabla_resumen %>%
gt() %>%
tab_header(
title = md("**Tabla Nro. 2**"),
subtitle = md("Indicador estadístico del tipo de pozo
en la producción no convencional")
) %>%
cols_label(
Variable = "Variable analizada",
Indicador = "Indicador estadístico",
Resultado = "Resultado"
) %>%
tab_source_note(
source_note = md("Elaborado por: Grupo – Carrera de Petróleos")
) %>%
opt_all_caps() %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body()
)
| Tabla Nro. 2 |
| Indicador estadístico del tipo de pozo
en la producción no convencional |
| Variable analizada |
Indicador estadístico |
Resultado |
| Tipo de pozo |
Moda |
Gasífero (218738 registros, 54.6629%) |
| Elaborado por: Grupo – Carrera de Petróleos |
# =========================================================
# 7. CONCLUSIÓN
# =========================================================
cat(
"El análisis estadístico de la variable cualitativa nominal ",
"'tipo de pozo' permitió identificar la categoría más ",
"frecuente dentro de la base de datos analizada. La moda corresponde a ",
moda_categoria,
", con un total de ", moda_ni,
" registros equivalentes al ",
moda_hi,
"% del total de observaciones."
)
## El análisis estadístico de la variable cualitativa nominal 'tipo de pozo' permitió identificar la categoría más frecuente dentro de la base de datos analizada. La moda corresponde a Gasífero , con un total de 218738 registros equivalentes al 54.6629 % del total de observaciones.