1 Configuración y Carga de Datos

library(dplyr)
library(gt)

col_principal <- "#0E6655"
col_barras    <- "#16A085"
col_acento    <- "#E67E22"
col_grid      <- "#D7DBDD"

setwd("C:/Users/ASUS/Desktop/Estadistica/new_york_exel")

archivo_csv <- "Oil__Gas____Other_Regulated_Wells__Beginning_1860.csv"
# Si tu archivo se llama distinto (p. ej. con sufijo "__1_"), cambia la línea de arriba

# Detección de separador (evita depender de un delimitador fijo)
separadores <- c(",", ";", "\t", "|")
mejor_sep <- NULL
mejor_ncol <- 1

for (s in separadores) {
  n_campos <- tryCatch(utils::count.fields(archivo_csv, sep = s)[1],
                        error = function(e) 1)
  if (!is.na(n_campos) && n_campos > mejor_ncol) {
    mejor_ncol <- n_campos
    mejor_sep  <- s
  }
}
if (is.null(mejor_sep)) mejor_sep <- ","
cat("Separador detectado:", ifelse(mejor_sep == "\t", "TAB", mejor_sep),
    "| Columnas detectadas:", mejor_ncol, "\n")
## Separador detectado: , | Columnas detectadas: 52
Datos_Brutos <- read.csv(archivo_csv, header = TRUE, sep = mejor_sep,
                          check.names = TRUE, stringsAsFactors = FALSE)

# Localización de la columna de fecha de fin de confidencialidad del pozo
col_confid <- names(Datos_Brutos)[
  grepl("date",            names(Datos_Brutos), ignore.case = TRUE) &
  grepl("well",            names(Datos_Brutos), ignore.case = TRUE) &
  grepl("confidentiality", names(Datos_Brutos), ignore.case = TRUE) &
  grepl("ends",            names(Datos_Brutos), ignore.case = TRUE)
]

if (length(col_confid) == 0) {
  columnas_txt <- paste(names(Datos_Brutos), collapse = " | ")
  stop("ERROR: No se encontró ninguna columna de fecha de fin de confidencialidad del pozo ",
       "(se buscó el patrón 'Date'+'Well'+'Confidentiality'+'Ends').\n",
       "Separador usado: '", mejor_sep, "'  |  N° de columnas leídas: ", ncol(Datos_Brutos), "\n",
       "COLUMNAS ENCONTRADAS EN EL ARCHIVO:\n", columnas_txt)
}

nombre_col_confid <- col_confid[1]
cat("Columna de fecha de fin de confidencialidad del pozo identificada:", nombre_col_confid, "\n")
## Columna de fecha de fin de confidencialidad del pozo identificada: Date.Well.Confidentiality.Ends

2 Extracción y Limpieza de la Variable

Se toma la década de la fecha de fin de confidencialidad del pozo como la categoría de la variable. Al ser categorías con un orden temporal natural (una década es cronológicamente anterior o posterior a otra), la variable se trata como cualitativa ordinal.

# La fecha viene en formato MM/DD/AAAA; se extrae el año con expresión regular
Datos <- Datos_Brutos %>%
  mutate(Anio_Confid = suppressWarnings(as.integer(
    sub(".*/([0-9]{4}).*", "\\1", .data[[nombre_col_confid]])
  )))

# Cada década se convierte directamente en una categoría ordinal (Ej: "1900 - 1909")
Datos <- Datos %>%
  filter(!is.na(Anio_Confid) & Anio_Confid >= 1900 & Anio_Confid <= 2026) %>%
  mutate(
    Decada_Base = floor(Anio_Confid / 10) * 10,
    Categoria_Decada = paste0(Decada_Base, " - ", Decada_Base + 9)
  )

niveles_orden <- Datos %>%
  distinct(Decada_Base, Categoria_Decada) %>%
  arrange(Decada_Base) %>%
  pull(Categoria_Decada)

Datos <- Datos %>%
  mutate(Categoria_Decada = factor(Categoria_Decada, levels = niveles_orden, ordered = TRUE)) %>%
  select(-Decada_Base)

Variable_Ordinal <- Datos$Categoria_Decada
if (length(Variable_Ordinal) == 0) stop("ERROR: No hay datos válidos.")

n_excluidos <- nrow(Datos_Brutos) - length(Variable_Ordinal)

cat("N (pozos con fecha de fin de confidencialidad clasificable):", length(Variable_Ordinal), "\n")
## N (pozos con fecha de fin de confidencialidad clasificable): 7567
cat("Registros excluidos (sin fecha de fin de confidencialidad o fuera de rango 1900-2026):", n_excluidos,
    "(", round(100 * n_excluidos / nrow(Datos_Brutos), 1), "%)\n")
## Registros excluidos (sin fecha de fin de confidencialidad o fuera de rango 1900-2026): 39823 ( 84 %)

3 Identificación de la Variable

cat("Variable      : Fecha de Fin de Confidencialidad del Pozo (década en que finaliza la confidencialidad)\n")
## Variable      : Fecha de Fin de Confidencialidad del Pozo (década en que finaliza la confidencialidad)
cat("Columna base  :", nombre_col_confid, "\n")
## Columna base  : Date.Well.Confidentiality.Ends
cat("Tipo          : Cualitativa ordinal (", length(niveles_orden), "categorías por década)\n")
## Tipo          : Cualitativa ordinal ( 9 categorías por década)
cat("Niveles       :", paste(niveles_orden, collapse = " < "), "\n")
## Niveles       : 1910 - 1919 < 1950 - 1959 < 1960 - 1969 < 1970 - 1979 < 1980 - 1989 < 1990 - 1999 < 2000 - 2009 < 2010 - 2019 < 2020 - 2029
cat("N             :", length(Variable_Ordinal), "\n")
## N             : 7567

4 Tabla de Distribución de Frecuencias

TDF_Raw <- Datos %>%
  group_by(Categoria_Decada) %>%
  summarise(ni = n(), .groups = "drop") %>%
  arrange(Categoria_Decada)

ni <- TDF_Raw$ni
N  <- sum(ni)
hi <- (ni / N) * 100
Ni_asc  <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_asc  <- cumsum(hi)
Hi_desc <- rev(cumsum(rev(hi)))

TDF_Estado <- data.frame(
  Categoria = as.character(TDF_Raw$Categoria_Decada),
  ni = ni,
  hi = round(hi, 2),
  Ni_asc = Ni_asc,
  Ni_desc = Ni_desc,
  Hi_asc = round(Hi_asc, 2),
  Hi_desc = round(Hi_desc, 2)
)

totales <- c("TOTAL", sum(ni), round(sum(hi), 2), "-", "-", "-", "-")
TDF_Char <- TDF_Estado %>% mutate(across(everything(), as.character))
TDF_Show <- rbind(TDF_Char, totales)

modal_row <- which.max(TDF_Estado$ni)

TDF_Show %>%
  gt() %>%
  tab_header(
    title = md("**DISTRIBUCIÓN DE LA FECHA DE FIN DE CONFIDENCIALIDAD DEL POZO POR DÉCADA**"),
    subtitle = md(paste0("Variable: **Fecha de Fin de Confidencialidad del Pozo (",
                          nombre_col_confid, ")** · Nueva York"))
  ) %>%
  tab_spanner(label = "Frecuencias acumuladas",
              columns = c(Ni_asc, Ni_desc, Hi_asc, Hi_desc)) %>%
  cols_label(
    Categoria = "Década (orden ordinal)",
    ni = "Cant. Pozos (ni)",
    hi = "Porcentaje (hi%)",
    Ni_asc = "Ni (Asc)", Ni_desc = "Ni (Desc)",
    Hi_asc = "Hi (Asc)", Hi_desc = "Hi (Desc)"
  ) %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_style(
    style = list(cell_fill(color = col_principal), cell_text(color = "white", weight = "bold")),
    locations = cells_title()
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#148F77"), cell_text(color = "white", weight = "bold")),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#148F77"), cell_text(color = "white", weight = "bold")),
    locations = cells_column_spanners()
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#FDEBD0"), cell_text(weight = "bold")),
    locations = cells_body(rows = modal_row)
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#D0ECE7"), cell_text(weight = "bold")),
    locations = cells_body(rows = Categoria == "TOTAL")
  ) %>%
  opt_row_striping() %>%
  opt_table_font(font = google_font("Roboto")) %>%
  tab_options(
    table.font.size = px(13),
    heading.align = "left",
    heading.title.font.size = px(17),
    data_row.padding = px(7),
    table.border.top.color = col_principal,
    table.border.bottom.color = col_principal,
    column_labels.border.bottom.color = col_principal
  ) %>%
  tab_source_note(md("*Fuente: NYS DEC — Oil, Gas & Other Regulated Wells. Elaboración: Dallyanna Lozano (Grupo 1).*"))
DISTRIBUCIÓN DE LA FECHA DE FIN DE CONFIDENCIALIDAD DEL POZO POR DÉCADA
Variable: Fecha de Fin de Confidencialidad del Pozo (Date.Well.Confidentiality.Ends) · Nueva York
Década (orden ordinal) Cant. Pozos (ni) Porcentaje (hi%)
Frecuencias acumuladas
Ni (Asc) Ni (Desc) Hi (Asc) Hi (Desc)
1910 - 1919 1 0.01 1 7567 0.01 100
1950 - 1959 1 0.01 2 7566 0.03 99.99
1960 - 1969 1 0.01 3 7565 0.04 99.97
1970 - 1979 25 0.33 28 7564 0.37 99.96
1980 - 1989 797 10.53 825 7539 10.9 99.63
1990 - 1999 1958 25.88 2783 6742 36.78 89.1
2000 - 2009 2851 37.68 5634 4784 74.45 63.22
2010 - 2019 1474 19.48 7108 1933 93.93 25.55
2020 - 2029 459 6.07 7567 459 100 6.07
TOTAL 7567 100 - - - -
Fuente: NYS DEC — Oil, Gas & Other Regulated Wells. Elaboración: Dallyanna Lozano (Grupo 1).

5 Representación Gráfica

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

vals_x <- TDF_Estado$Categoria
vals_y <- TDF_Estado$ni
ylim_max <- max(vals_y) * 1.15

par(mar = c(10, 5, 4, 2))
bp1 <- barplot(vals_y,
        main = "Gráfica N°1: Distribución de la fecha de fin de confidencialidad del pozo por década (NY)",
        cex.main = 0.9, ylab = "Cantidad de pozos (ni)",
        col = col_barras, border = "white", axes = FALSE,
        ylim = c(0, ylim_max), axisnames = FALSE)
axis(2, col = col_principal, col.axis = col_principal)
axis(1, at = bp1, labels = vals_x, col = col_principal, col.axis = col_principal, las = 2, cex.axis = 0.8)
text(x = bp1, y = vals_y, label = vals_y, pos = 3, cex = 0.7, col = col_principal)
title(xlab = "Década de fin de confidencialidad", line = 8)
grid(nx = NA, ny = NULL, col = col_grid, lty = "dotted")
box(bty = "l", col = col_principal)

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

vals_y_pct <- TDF_Estado$hi

par(mar = c(10, 5, 4, 2))
bp2 <- barplot(vals_y_pct,
        main = "Gráfica N°2: Distribución porcentual de la fecha de fin de confidencialidad del pozo (NY)",
        cex.main = 0.9, ylab = "% del total (hi)",
        col = col_barras, border = "white", axes = FALSE,
        ylim = c(0, max(vals_y_pct) * 1.2), axisnames = FALSE)
axis(2, col = col_principal, col.axis = col_principal)
axis(1, at = bp2, labels = vals_x, col = col_principal, col.axis = col_principal, las = 2, cex.axis = 0.8)
text(x = bp2, y = vals_y_pct, label = paste0(round(vals_y_pct, 1), "%"), pos = 3, cex = 0.7, col = col_principal)
title(xlab = "Década de fin de confidencialidad", line = 8)
grid(nx = NA, ny = NULL, col = col_grid, lty = "dotted")
box(bty = "l", col = col_principal)

5.3 Gráfica N°3 — Diagrama Circular (Distribución Porcentual)

etiquetas_pct <- paste0(round(vals_y_pct, 1), "% ", vals_x)
paleta_decadas <- colorRampPalette(c("#1B4F72", "#16A085", "#F4D03F", "#E67E22", "#943126"))(length(vals_x))

par(mar = c(2, 2, 4, 9), xpd = TRUE)
pie(vals_y_pct,
    labels = NA,
    main = "Gráfica N°3: Distribución porcentual de la fecha de fin de confidencialidad del pozo por década (NY)",
    cex.main = 0.9,
    col = paleta_decadas, border = "white",
    radius = 1,
    clockwise = TRUE)
legend("right", legend = etiquetas_pct, fill = paleta_decadas, border = "white",
       bty = "n", cex = 0.9, inset = c(-0.08, 0), title = "Década", y.intersp = 1.3)

6 Tabla de Indicadores

Al ser una variable ordinal, los únicos indicadores válidos son los de posición basados en el orden de las categorías: Moda, Mediana y Cuartiles. No se calculan media, varianza, asimetría ni curtosis por no tratarse de una escala numérica.

codigo_num <- as.integer(Variable_Ordinal)  # 1 = década más antigua ... k = década más reciente

t_moda      <- table(codigo_num)
moda_pos    <- as.integer(names(t_moda)[which.max(t_moda)])
mediana_pos <- median(codigo_num)
q1_pos      <- quantile(codigo_num, 0.25, type = 1)
q3_pos      <- quantile(codigo_num, 0.75, type = 1)

df_indicadores <- data.frame(
  "Variable"  = "Fecha de Fin de Confidencialidad del Pozo (ordinal por década)",
  "N"         = N,
  "Moda"      = niveles_orden[moda_pos],
  "Mediana"   = niveles_orden[mediana_pos],
  "Cuartil_1" = niveles_orden[q1_pos],
  "Cuartil_3" = niveles_orden[q3_pos],
  "Rango_Intercuartilico" = paste0(niveles_orden[q1_pos], " — ", niveles_orden[q3_pos])
)

df_indicadores %>%
  gt() %>%
  tab_header(
    title = md("**TABLA DE INDICADORES**"),
    subtitle = "Estadísticos de posición de la variable Fecha de Fin de Confidencialidad del Pozo (ordinal por década)"
  ) %>%
  tab_source_note(source_note = "Autor: Dallyanna Lozano (Grupo 1)") %>%
  cols_label(
    Variable = "Variable", N = "N",
    Moda = "Moda (Mo)", Mediana = "Mediana (Me)",
    Cuartil_1 = "Cuartil 1 (Q1)", Cuartil_3 = "Cuartil 3 (Q3)",
    Rango_Intercuartilico = "Rango Intercuartílico"
  ) %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_style(
    style = list(cell_fill(color = col_principal), cell_text(color = "white", weight = "bold")),
    locations = cells_title()
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#148F77"), cell_text(color = "white", weight = "bold")),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#FDEBD0"), cell_text(weight = "bold")),
    locations = cells_body(columns = Moda)
  ) %>%
  opt_table_font(font = google_font("Roboto")) %>%
  tab_options(
    table.font.size = px(13),
    heading.align = "left",
    data_row.padding = px(9),
    table.border.top.color = col_principal,
    table.border.bottom.color = col_principal,
    column_labels.border.bottom.color = col_principal
  )
TABLA DE INDICADORES
Estadísticos de posición de la variable Fecha de Fin de Confidencialidad del Pozo (ordinal por década)
Variable N Moda (Mo) Mediana (Me) Cuartil 1 (Q1) Cuartil 3 (Q3) Rango Intercuartílico
Fecha de Fin de Confidencialidad del Pozo (ordinal por década) 7567 2000 - 2009 2000 - 2009 1990 - 1999 2010 - 2019 1990 - 1999 — 2010 - 2019
Autor: Dallyanna Lozano (Grupo 1)

7 Conclusión

De un total de 7567 pozos clasificables (se excluyeron 39823 registros sin fecha de fin de confidencialidad válida), la variable Fecha de Fin de Confidencialidad del Pozo se organizó en 9 categorías ordinales por década, desde 1910 - 1919 hasta 2020 - 2029. La década dominante es 2000 - 2009 con 37.68% de los casos. La moda y la mediana coinciden en 2000 - 2009, lo que confirma que más de la mitad de los pozos alcanzaron el fin de su periodo de confidencialidad en esa década o en una anterior. Al tratarse de una variable ordinal, el análisis se limita a estadísticos de posición (moda, mediana, cuartiles), sin calcular media, varianza, asimetría ni curtosis.