1. Configuración y Carga de Datos

datos_originales <- readr::read_csv2(
  "C:/Users/cordo/OneDrive/Desktop/ESTADISITCA/Oil__Gas____Other_Regulated_Wells__Beginning_1860.csv",
  locale = readr::locale(encoding = "Latin1")
)

head(datos_originales, 5)
## # A tibble: 5 × 55
##   `API Well Number` `County Code` `API Hole Number` Sidetrack Completion
##               <dbl>         <dbl>             <dbl>     <dbl>      <dbl>
## 1           3.10e15             3              2670         0          0
## 2           3.10e15             3              4599         0          0
## 3           3.10e15             3              4842         0          0
## 4           3.10e15             3              5419         0          0
## 5           3.11e15           101             26525         0          0
## # ℹ 50 more variables: `Well Name` <chr>, `Company Name` <chr>,
## #   `Operator Number` <dbl>, `Well Type` <chr>, `Map Symbol` <chr>,
## #   `Well Status` <chr>, `Status Date` <chr>, `Permit Application Date` <chr>,
## #   `Permit Issued Date` <chr>, `Date Spudded` <chr>,
## #   `Date of Total Depth` <chr>, `Completion Decade` <chr>,
## #   `Completion Year` <chr>, `Completion Month` <chr>, `Completion Day` <chr>,
## #   `Date Well Plugged` <chr>, `Date Well Confidentiality Ends` <chr>, …

2. Extracción y Limpieza de la Variable

Extraemos la columna Region, correspondiente a las regiones geográficas de ubicación de los pozos, procediendo a eliminar los registros nulos (NA) o vacíos para asegurar la precisión de los análisis estadísticos.

datos_limpios_region <- datos_originales %>%
  select(Region) %>%
  filter(!is.na(Region) & Region != "" & Region != " ") %>%
  mutate(Region = str_to_title(trimws(Region))) 

head(datos_limpios_region, 10)
## # A tibble: 10 × 1
##    Region
##    <chr> 
##  1 9     
##  2 9     
##  3 9     
##  4 9     
##  5 8     
##  6 9     
##  7 9     
##  8 9     
##  9 8     
## 10 8

3. Identificación de la Variable

  • Nombre de la Variable: REGION (Región de ubicación del pozo)
  • Tipo de Variable: Cualitativa Nominal (Categorías que definen zonas geográficas sin un orden jerárquico intrínseco).

4. Tabla de Distribución de Frecuencias (TDF)

# Construcción de la TDF Base
tdf_region_base <- datos_limpios_region %>%
  group_by(Region) %>%
  summarise(Fi = n(), .groups = 'drop') %>%
  arrange(desc(Fi)) %>%
  mutate(
    hi = Fi / sum(Fi),
    Pi = hi * 100
  )

total_observaciones_region <- sum(tdf_region_base$Fi)

# Aplicación del algoritmo de desborde (Top 10 + Otros)
top_regions <- tdf_region_base %>% slice_max(order_by = Fi, n = 10)

if (nrow(tdf_region_base) > 10) {
  otros_regions <- tdf_region_base %>% slice(11:n()) %>% 
    summarise(Region = "Otros", Fi = sum(Fi), hi = sum(hi), Pi = sum(Pi))
  tdf_presentacion_region <- bind_rows(top_regions, otros_regions)
} else {
  tdf_presentacion_region = tdf_region_base
}

# Cálculo de frecuencias acumuladas numéricas
tdf_presentacion_region <- tdf_presentacion_region %>%
  mutate(
    `Fi_ac` = cumsum(Fi),
    `hi_ac` = cumsum(hi)
  )

# Renderizado de la TABLA 3 con codificación UTF-8 segura
tdf_presentacion_region %>%
  rename(
    `Región (Region)` = Region,
    `Frec. Absoluta (Fi)` = Fi,
    `Frec. Relativa (hi)` = hi,
    `Porcentaje (%)` = Pi,
    `Frec. Abs. Acumulada (Fi_ac)` = Fi_ac,
    `Frec. Rel. Acumulada (hi_ac)` = hi_ac
  ) %>%
  kbl(caption = enc2utf8("TABLA 3. Distribución de Frecuencias de Pozos por Región"), digits = 4, align = "lccccc") %>%
  kable_styling(
    bootstrap_options = c("hover", "striped"),
    full_width = TRUE,
    position = "center"
  ) %>%
  row_spec(0, 
           background = "#1D4E73", 
           color = "white", 
           bold = TRUE, 
           align = "center",
           extra_css = "padding: 12px !important; font-family: 'Lora', serif; font-size: 14px;"
  ) %>%
  row_spec(1:nrow(tdf_presentacion_region), 
           extra_css = "padding: 10px !important; font-family: 'Lora', serif; font-size: 14px; border-bottom: 1px solid #7ABDEF !important;"
  ) %>%
  footnote(general = paste("Total de registros históricos de regiones procesados:", comma(total_observaciones_region)))
TABLA 3. Distribución de Frecuencias de Pozos por Región
Región (Region) Frec. Absoluta (Fi) Frec. Relativa (hi) Porcentaje (%) Frec. Abs. Acumulada (Fi_ac) Frec. Rel. Acumulada (hi_ac)
9 39894 0.8421 84.2072 39894 0.8421
8 5206 0.1099 10.9887 45100 0.9520
7 1684 0.0355 3.5545 46784 0.9875
2 247 0.0052 0.5214 47031 0.9927
6 114 0.0024 0.2406 47145 0.9951
3 112 0.0024 0.2364 47257 0.9975
4 96 0.0020 0.2026 47353 0.9995
5 19 0.0004 0.0401 47372 0.9999
1 4 0.0001 0.0084 47376 1.0000
Note:
Total de registros históricos de regiones procesados: 47,376

5. Representación Gráfica

datos_ordenados_region <- tdf_presentacion_region %>%
  mutate(Region = factor(Region, levels = c(setdiff(Region, "Otros"), "Otros")))

5.1 Gráfica N°1 — Diagrama de Barras (Frecuencia Absoluta)

ggplot(datos_ordenados_region, aes(x = Region, y = Fi, fill = Region)) +
  geom_bar(stat = "identity", color = "#1D4E73", lwd = 0.4, width = 0.72, show.legend = FALSE) +
  geom_text(
    aes(label = comma(Fi)), 
    vjust = -0.5, 
    size = 4.5, 
    fontface = "bold", 
    family = fuente_unificada,
    color = "#1D4E73"
  ) +
  scale_fill_manual(values = paleta_azul) +
  scale_y_continuous(labels = comma, expand = expansion(mult = c(0, 0.12))) +
  labs(
    title = enc2utf8("Gráfica N°1: Frecuencia Absoluta de Pozos por Región"),
    x = enc2utf8("Regiones"),
    y = enc2utf8("Número Total de Pozos (Fi)")
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(family = fuente_unificada, size = tamano_titulo, face = "bold", color = "#1D4E73", hjust = 0.5, margin = margin(b = 20)),
    axis.title = element_text(family = fuente_unificada, size = tamano_ejes, face = "bold", color = "#2c1e21"),
    axis.text.x = element_text(family = fuente_unificada, size = tamano_labels, angle = 0, hjust = 1, face = "bold", color = "#4a3b3d"),
    axis.text.y = element_text(family = fuente_unificada, size = tamano_labels, color = "#4a3b3d"),
    panel.grid.major.x = element_blank(),
    panel.grid.minor = element_blank()
  )

5.2 Gráfica N°2 — Diagrama de Barras (Porcentaje)

ggplot(datos_ordenados_region, aes(x = Region, y = Pi, fill = Region)) +
  geom_bar(stat = "identity", color = "#1D4E73", lwd = 0.4, width = 0.72, show.legend = FALSE) +
  geom_text(
    aes(label = paste0(round(Pi, 1), "%")), 
    vjust = -0.5, 
    size = 4.5, 
    fontface = "bold", 
    family = fuente_unificada,
    color = "#1D4E73"
  ) +
  scale_fill_manual(values = paleta_azul) +
  scale_y_continuous(limits = c(0, max(datos_ordenados_region$Pi) * 1.15), labels = function(x) paste0(x, "%")) +
  labs(
    title = enc2utf8("Gráfica N°2: Distribución Porcentual Relativa de Pozos por Región"),
    x = enc2utf8("Regiones"),
    y = enc2utf8("Porcentaje de Participación (%)")
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(family = fuente_unificada, size = tamano_titulo, face = "bold", color = "#1D4E73", hjust = 0.5, margin = margin(b = 20)),
    axis.title = element_text(family = fuente_unificada, size = tamano_ejes, face = "bold", color = "#2c1e21"),
    axis.text.x = element_text(family = fuente_unificada, size = tamano_labels, angle = 0, hjust = 1, face = "bold", color = "#4a3b3d"),
    axis.text.y = element_text(family = fuente_unificada, size = tamano_labels, color = "#4a3b3d"),
    panel.grid.major.x = element_blank(),
    panel.grid.minor = element_blank()
  )

5.3 Gráfica N°3 — Diagrama Circular Estructurado

datos_pie_region <- datos_ordenados_region %>%
  arrange(Region) %>%
  mutate(
    Region_Etiqueta = paste0(Region, " (", round(Pi, 1), "%)"),
    Region_Etiqueta = factor(Region_Etiqueta, levels = Region_Etiqueta),
    label_text = paste0(round(Pi, 1), "%")
  )

ggplot(datos_pie_region, aes(x = "", y = Pi, fill = Region_Etiqueta)) +
  geom_bar(stat = "identity", width = 1, color = "#ffffff", size = 0.5) +
  coord_polar("y", start = 0) +
  scale_fill_manual(values = paleta_azul, name = "Regiones (Region)") +
  
  geom_text(
    aes(label = ifelse(Pi >= 5, label_text, "")),
    position = position_stack(vjust = 0.5), 
    color = "white", 
    fontface = "bold", 
    family = fuente_unificada, 
    size = 4.5
  ) +
  
  labs(
    title = enc2utf8("Gráfica N°3: Distribución Porcentual Estructurada de Pozos por Región")
  ) +
  theme_void() +
  theme(
    plot.title = element_text(family = fuente_unificada, size = tamano_titulo, face = "bold", color = "#1D4E73", hjust = 0.5, margin = margin(b = 15)),
    legend.title = element_text(family = fuente_unificada, size = tamano_ejes, face = "bold", color = "#1D4E73"),
    legend.text = element_text(family = fuente_unificada, size = tamano_labels, color = "#2c1e21"),
    legend.position = "right"
  )


6. Tabla de Indicadores

Calculamos los indicadores de resumen estadístico para describir la concentración geográfica en base a las categorías de la variable REGION.

moda_region <- tdf_region_base$Region[1]
moda_frecuencia_region <- tdf_region_base$Fi[1]
moda_porcentaje_region <- tdf_region_base$Pi[1]
top3_porcentaje_region <- sum(tdf_region_base$Pi[1:min(3, nrow(tdf_region_base))])

indicadores_region <- data.frame(
  Indicador = c(
    "Total de Pozos Válidos Registrados (N)",
    "Número Total de Regiones Registradas (Categorías)",
    "Región de Máxima Concentración (Moda)",
    "Frecuencia Absoluta de la Moda (Pozos)",
    "Porcentaje de Representación de la Moda (%)",
    "Tasa de Concentración Acumulada Top 3 (%)"
  ),
  Valor = c(
    comma(total_observaciones_region),
    comma(nrow(tdf_region_base)),
    moda_region,
    comma(moda_frecuencia_region),
    paste0(round(moda_porcentaje_region, 2), "%"),
    paste0(round(top3_porcentaje_region, 2), "%")
  )
)

indicadores_region %>%
  kbl(
    caption = "<div style='color:#1D4E73; font-family:\"Lora\", serif; font-weight:bold; font-size:16px; text-align:center; width:100%; display:block;'>TABLA 4. Indicadores Estadísticos de la Variable REGION</div>",
    align = "lc"
  ) %>%
  kable_styling(
    bootstrap_options = c("hover", "striped"),
    full_width = TRUE,
    position = "center"
  ) %>%
  row_spec(0, 
           background = "#2870A4", 
           color = "white", 
           bold = TRUE, 
           align = "center",
           extra_css = "padding: 12px !important; font-family: 'Lora', serif; font-size: 14px;"
  ) %>%
  row_spec(1:nrow(indicadores_region), 
           extra_css = "padding: 12px !important; font-family: 'Lora', serif; font-size: 14px; border-bottom: 1px solid #56A9E2 !important;"
  )
TABLA 4. Indicadores Estadísticos de la Variable REGION
Indicador Valor
Total de Pozos Válidos Registrados (N) 47,376
Número Total de Regiones Registradas (Categorías) 9
Región de Máxima Concentración (Moda) 9
Frecuencia Absoluta de la Moda (Pozos) 39,894
Porcentaje de Representación de la Moda (%) 84.21%
Tasa de Concentración Acumulada Top 3 (%) 98.75%

7. Conclusión

El análisis territorial de la variable muestra patrones claros de distribución macro-geográfica:

  • Región con mayor cantidad de pozos: La mayor parte de la actividad de perforación se focaliza en la región 9, acumulando de manera individual el 84.2% de las observaciones válidas.
  • Agrupación principal: Las tres principales regiones concentran el 98.8% del desarrollo histórico registrado, lo que evidencia una marcada centralización en zonas operativas clave del sector.
  • Zonas periféricas: El porcentaje remanente se dispersa de manera decreciente en el resto de áreas geográficas, las cuales representan una menor participación en el volumen totalizado del estudio.