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 inicio de la perforación
col_spud <- names(Datos_Brutos)[
  grepl("date",    names(Datos_Brutos), ignore.case = TRUE) &
  grepl("spudded", names(Datos_Brutos), ignore.case = TRUE)
]

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

nombre_col_spud <- col_spud[1]
cat("Columna de fecha de inicio de la perforación identificada:", nombre_col_spud, "\n")
## Columna de fecha de inicio de la perforación identificada: Date.Spudded

2 Extracción y Limpieza de la Variable

Se toma la década de la fecha de inicio de la perforación 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_Spud = suppressWarnings(as.integer(
    sub(".*/([0-9]{4}).*", "\\1", .data[[nombre_col_spud]])
  )))

# Cada década se convierte directamente en una categoría ordinal (Ej: "1900 - 1909")
Datos <- Datos %>%
  filter(!is.na(Anio_Spud) & Anio_Spud >= 1900 & Anio_Spud <= 2026) %>%
  mutate(
    Decada_Base = floor(Anio_Spud / 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 inicio de perforación clasificable):", length(Variable_Ordinal), "\n")
## N (pozos con fecha de inicio de perforación clasificable): 19939
cat("Registros excluidos (sin fecha de inicio o fuera de rango 1900-2026):", n_excluidos,
    "(", round(100 * n_excluidos / nrow(Datos_Brutos), 1), "%)\n")
## Registros excluidos (sin fecha de inicio o fuera de rango 1900-2026): 27451 ( 57.9 %)

3 Identificación de la Variable

cat("Variable      : Fecha de Inicio de la Perforación (década en que se inició la perforación)\n")
## Variable      : Fecha de Inicio de la Perforación (década en que se inició la perforación)
cat("Columna base  :", nombre_col_spud, "\n")
## Columna base  : Date.Spudded
cat("Tipo          : Cualitativa ordinal (", length(niveles_orden), "categorías por década)\n")
## Tipo          : Cualitativa ordinal ( 13 categorías por década)
cat("Niveles       :", paste(niveles_orden, collapse = " < "), "\n")
## Niveles       : 1900 - 1909 < 1910 - 1919 < 1920 - 1929 < 1930 - 1939 < 1940 - 1949 < 1950 - 1959 < 1960 - 1969 < 1970 - 1979 < 1980 - 1989 < 1990 - 1999 < 2000 - 2009 < 2010 - 2019 < 2020 - 2029
cat("N             :", length(Variable_Ordinal), "\n")
## N             : 19939

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 INICIO DE LA PERFORACIÓN POR DÉCADA**"),
    subtitle = md(paste0("Variable: **Fecha de Inicio de la Perforación (",
                          nombre_col_spud, ")** · 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 INICIO DE LA PERFORACIÓN POR DÉCADA
Variable: Fecha de Inicio de la Perforación (Date.Spudded) · Nueva York
Década (orden ordinal) Cant. Pozos (ni) Porcentaje (hi%)
Frecuencias acumuladas
Ni (Asc) Ni (Desc) Hi (Asc) Hi (Desc)
1900 - 1909 168 0.84 168 19939 0.84 100
1910 - 1919 445 2.23 613 19771 3.07 99.16
1920 - 1929 540 2.71 1153 19326 5.78 96.93
1930 - 1939 780 3.91 1933 18786 9.69 94.22
1940 - 1949 485 2.43 2418 18006 12.13 90.31
1950 - 1959 805 4.04 3223 17521 16.16 87.87
1960 - 1969 1469 7.37 4692 16716 23.53 83.84
1970 - 1979 3656 18.34 8348 15247 41.87 76.47
1980 - 1989 5400 27.08 13748 11591 68.95 58.13
1990 - 1999 1481 7.43 15229 6191 76.38 31.05
2000 - 2009 2939 14.74 18168 4710 91.12 23.62
2010 - 2019 1423 7.14 19591 1771 98.25 8.88
2020 - 2029 348 1.75 19939 348 100 1.75
TOTAL 19939 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 inicio de la perforación 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 inicio de la perforación", 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 inicio de la perforación (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 inicio de la perforación", 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 inicio de la perforación 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 Inicio de la Perforación (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 Inicio de la Perforación (ordinal por década)"
  ) %>%
  tab_source_note(source_note = "Autor: EDUARDO") %>%
  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 Inicio de la Perforación (ordinal por década)
Variable N Moda (Mo) Mediana (Me) Cuartil 1 (Q1) Cuartil 3 (Q3) Rango Intercuartílico
Fecha de Inicio de la Perforación (ordinal por década) 19939 1980 - 1989 1980 - 1989 1970 - 1979 1990 - 1999 1970 - 1979 — 1990 - 1999
Autor: EDUARDO

7 Conclusión

De un total de 19939 pozos clasificables (se excluyeron 27451 registros sin fecha de inicio de perforación válida), la variable Fecha de Inicio de la Perforación se organizó en 13 categorías ordinales por década, desde 1900 - 1909 hasta 2020 - 2029. La década dominante es 1980 - 1989 con 27.08% de los casos. La moda y la mediana coinciden en 1980 - 1989, lo que confirma que más de la mitad de los pozos iniciaron su perforación 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.