1 Configuración y Carga de Datos

library(dplyr)
library(gt)
library(e1071)

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"

# 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 columna de finalización: soporta dos variantes del dataset
#  (A) "Completion Year" (numérica)  (B) "Date Well Completed" (fecha completa)
col_year <- names(Datos_Brutos)[
  grepl("completion", names(Datos_Brutos), ignore.case = TRUE) &
  grepl("year",       names(Datos_Brutos), ignore.case = TRUE)
]

col_fecha_fin <- names(Datos_Brutos)[
  grepl("complet", names(Datos_Brutos), ignore.case = TRUE) &
  grepl("date",    names(Datos_Brutos), ignore.case = TRUE)
]

if (length(col_year) > 0) {
  modo_columna_fin <- "year"
  nombre_col_fin   <- col_year[1]
} else if (length(col_fecha_fin) > 0) {
  modo_columna_fin <- "fecha"
  nombre_col_fin   <- col_fecha_fin[1]
} else {
  columnas_txt <- paste(names(Datos_Brutos), collapse = " | ")
  stop("ERROR: No se encontró ninguna columna de año/fecha de finalización ",
       "(se buscaron patrones 'Completion'+'Year' y 'Complet*'+'Date').\n",
       "Separador usado: '", mejor_sep, "'  |  N° de columnas leídas: ", ncol(Datos_Brutos), "\n",
       "COLUMNAS ENCONTRADAS EN EL ARCHIVO:\n", columnas_txt)
}

cat("Columna de finalización identificada (modo '", modo_columna_fin, "'): ",
    nombre_col_fin, "\n", sep = "")
## Columna de finalización identificada (modo 'fecha'): Date.Well.Completed

2 Extracción y Limpieza de la Variable

if (modo_columna_fin == "year") {
  # Variante A: año numérico directo
  Datos <- Datos_Brutos %>%
    mutate(Anio_Fin = suppressWarnings(as.integer(.data[[nombre_col_fin]])))
} else {
  # Variante B: extraer año desde fecha MM/DD/AAAA
  Datos <- Datos_Brutos %>%
    mutate(Anio_Fin = suppressWarnings(as.integer(
      sub(".*/([0-9]{4}).*", "\\1", .data[[nombre_col_fin]])
    )))
}

Datos <- Datos %>%
  filter(!is.na(Anio_Fin) & Anio_Fin >= 1900 & Anio_Fin <= 2026) %>%
  mutate(
    Decada_Fin = floor(Anio_Fin / 10) * 10,
    Periodo = paste0(Decada_Fin, " - ", Decada_Fin + 9)
  )

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

cat("N (pozos con año de finalización 1900-2026):", length(Variable_Exacta),
    "| Décadas:", length(unique(Datos$Decada_Fin)), "\n")
## N (pozos con año de finalización 1900-2026): 22481 | Décadas: 13

3 Identificación de la Variable

Década de Finalización de la perforación es una variable cuantitativa discreta que registra el año en que el pozo alcanzó su profundidad total (Completion Year / Date Well Completed), agrupado en intervalos de 10 años; no fue necesario agrupar categorías en “Otros” —a diferencia de variables nominales con muchas categorías como County—, ya que todas las décadas superan ampliamente el umbral mínimo de frecuencia (ver tabla, sección 4), tal como resume el siguiente cuadro:

ficha <- data.frame(
  Criterio = c("Nombre", "Nombre técnico", "Tipo", "Subtipo", "Dominio",
               "Rango", "Unidad", "Escala", "Fuente"),
  Clasificacion = c(
    "Década de Finalización de la Perforación",
    nombre_col_fin,
    "Cuantitativa discreta",
    "Temporal / Calendario",
    paste0(min(Variable_Exacta), " - ", max(Variable_Exacta)),
    paste0(length(unique(Datos$Decada_Fin)), " clases (intervalos de 10 años)"),
    "Década (10 años)",
    "Razón (escala de razón, con cero absoluto)",
    "Oil, Gas & Other Regulated Wells - NY State"
  ),
  stringsAsFactors = FALSE
)

ficha %>%
  gt() %>%
  cols_label(Criterio = "Criterio", Clasificacion = "Clasificación") %>%
  cols_align(align = "left", columns = everything()) %>%
  tab_style(
    style = list(cell_text(weight = "bold")),
    locations = cells_body(columns = Criterio)
  ) %>%
  tab_style(
    style = list(cell_text(color = col_principal, weight = "bold"),
                 cell_borders(sides = "bottom", color = col_principal, weight = px(2))),
    locations = cells_column_labels()
  ) %>%
  opt_row_striping() %>%
  opt_table_font(font = google_font("Roboto")) %>%
  tab_options(
    table.font.size = px(14),
    data_row.padding = px(10),
    table.border.top.style = "hidden",
    table.border.bottom.style = "hidden",
    column_labels.border.top.style = "hidden"
  )
Criterio Clasificación
Nombre Década de Finalización de la Perforación
Nombre técnico Date.Well.Completed
Tipo Cuantitativa discreta
Subtipo Temporal / Calendario
Dominio 1900 - 2026
Rango 13 clases (intervalos de 10 años)
Unidad Década (10 años)
Escala Razón (escala de razón, con cero absoluto)
Fuente Oil, Gas & Other Regulated Wells - NY State

4 Tabla de Distribución de Frecuencias

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

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_Decadas <- data.frame(
  Periodo = TDF_Raw$Periodo,
  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_Decadas %>% mutate(across(everything(), as.character))
TDF_Show <- rbind(TDF_Char, totales)

modal_row <- which.max(TDF_Decadas$ni)

TDF_Show %>%
  gt() %>%
  tab_header(
    title = md("**DISTRIBUCIÓN POR DÉCADAS**"),
    subtitle = md(paste0("Variable: **Década de Finalización de la perforación (",
                          nombre_col_fin, ")** · Nueva York"))
  ) %>%
  tab_spanner(label = "Frecuencias acumuladas",
              columns = c(Ni_asc, Ni_desc, Hi_asc, Hi_desc)) %>%
  cols_label(
    Periodo = "Periodo (Década)",
    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 = Periodo == "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: EDUARDO.*"))
DISTRIBUCIÓN POR DÉCADAS
Variable: Década de Finalización de la perforación (Date.Well.Completed) · Nueva York
Periodo (Década) Cant. Pozos (ni) Porcentaje (hi%)
Frecuencias acumuladas
Ni (Asc) Ni (Desc) Hi (Asc) Hi (Desc)
1900 - 1909 314 1.4 314 22481 1.4 100
1910 - 1919 650 2.89 964 22167 4.29 98.6
1920 - 1929 681 3.03 1645 21517 7.32 95.71
1930 - 1939 1079 4.8 2724 20836 12.12 92.68
1940 - 1949 1025 4.56 3749 19757 16.68 87.88
1950 - 1959 1338 5.95 5087 18732 22.63 83.32
1960 - 1969 1858 8.26 6945 17394 30.89 77.37
1970 - 1979 3552 15.8 10497 15536 46.69 69.11
1980 - 1989 5451 24.25 15948 11984 70.94 53.31
1990 - 1999 1524 6.78 17472 6533 77.72 29.06
2000 - 2009 3079 13.7 20551 5009 91.41 22.28
2010 - 2019 1543 6.86 22094 1930 98.28 8.59
2020 - 2029 387 1.72 22481 387 100 1.72
TOTAL 22481 100 - - - -
Fuente: NYS DEC — Oil, Gas & Other Regulated Wells. Elaboración: EDUARDO.

5 Representación Gráfica

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

vals_x <- TDF_Decadas$Periodo
vals_y <- TDF_Decadas$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 década de finalización de perforación (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 finalizació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_Decadas$hi

par(mar = c(10, 5, 4, 2))
bp2 <- barplot(vals_y_pct,
        main = "Gráfica N°2: Distribución porcentual de la década de finalizació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 finalizació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 de Barras Horizontal (Distribución Porcentual)

Nota: no se usa diagrama circular (no aplica a variable cuantitativa discreta). Se usa barra horizontal para mantener el orden temporal de las décadas.

par(mar = c(5, 8, 4, 3))
bp3 <- barplot(rev(vals_y_pct),
        main = "Gráfica N°3: Distribución porcentual de la década de finalización (NY)",
        cex.main = 0.9, xlab = "% del total (hi)",
        col = col_barras, border = "white", axes = FALSE,
        horiz = TRUE, xlim = c(0, max(vals_y_pct) * 1.2), names.arg = rep("", length(vals_y_pct)))
axis(1, col = col_principal, col.axis = col_principal)
axis(2, at = bp3, labels = rev(vals_x), col = col_principal, col.axis = col_principal,
     las = 1, cex.axis = 0.8)
text(x = rev(vals_y_pct), y = bp3, label = paste0(round(rev(vals_y_pct), 1), "%"),
     pos = 4, cex = 0.7, col = col_principal)
grid(nx = NULL, ny = NA, col = col_grid, lty = "dotted")
box(bty = "l", col = col_principal)

5.4 Diagrama de Caja (Año Exacto de Finalización)

Muestra dispersión y valores atípicos del año exacto (previo a agrupar en décadas).

par(mar = c(6, 5, 4, 2))
boxplot(Variable_Exacta, horizontal = TRUE, col = col_barras,
        main = "Diagrama de caja del año de finalización de perforación (NY)",
        cex.main = 0.9, xlab = "", outline = TRUE, outpch = 19, outcol = col_acento,
        boxwex = 0.5, frame.plot = FALSE, xaxt = "n")
eje_x <- pretty(Variable_Exacta, n = 8)
axis(1, at = eje_x, labels = format(eje_x, scientific = FALSE), cex.axis = 0.8,
     col = col_principal, col.axis = col_principal)
title(xlab = "Año exacto de finalización", line = 4)

5.5 Ojivas (Frecuencias Acumuladas por Década)

Muestra la frecuencia acumulada ascendente y descendente por década.

par(mar = c(10, 5, 4, 8), xpd = TRUE)
x_vals_num <- sort(unique(Datos$Decada_Fin))
x_labels   <- TDF_Decadas$Periodo
y_asc  <- TDF_Decadas$Ni_asc
y_desc <- TDF_Decadas$Ni_desc

plot(x_vals_num, y_asc, type = "o", col = col_principal, lwd = 2, pch = 19,
     main = "Ojivas ascendente y descendente del año de finalización (NY)",
     cex.main = 0.9, ylab = "Frecuencia acumulada", xlab = "",
     axes = FALSE, frame.plot = FALSE)
axis(1, at = x_vals_num, labels = x_labels, las = 2, cex.axis = 0.8,
     col = col_principal, col.axis = col_principal)
axis(2, col = col_principal, col.axis = col_principal)
title(xlab = "Década de finalización", line = 8)
lines(x_vals_num, y_desc, type = "o", col = col_acento, lwd = 2, pch = 19)
legend("right", legend = c("Ascendente", "Descendente"),
       col = c(col_principal, col_acento), lty = 1, pch = 19, cex = 0.7, lwd = 2,
       inset = c(-0.15, 0), bty = "n")
grid(nx = NULL, ny = NULL, col = col_grid, lty = "dotted")
box(bty = "l", col = col_principal)

6 Tabla de Indicadores

media_val   <- mean(Variable_Exacta)
mediana_val <- median(Variable_Exacta)

t_moda     <- table(Variable_Exacta)
freq_max   <- max(t_moda)
modas_calc <- as.numeric(names(t_moda)[t_moda == freq_max])
moda_txt   <- paste(modas_calc, collapse = ", ")

rango_txt    <- paste0("[", min(Variable_Exacta), "; ", max(Variable_Exacta), "]")
varianza_val <- var(Variable_Exacta)
sd_val       <- sd(Variable_Exacta)
cv_val       <- (sd_val / abs(media_val)) * 100
asimetria_val <- skewness(Variable_Exacta, type = 2)
curtosis_val  <- kurtosis(Variable_Exacta, type = 2)

vals_atipicos <- boxplot.stats(Variable_Exacta)$out
num_atipicos  <- length(vals_atipicos)
status_atipicos <- if (num_atipicos > 0) paste0(num_atipicos, " outliers") else "0 (Sin atípicos)"

df_indicadores <- data.frame(
  "Variable"  = "Década de finalización (año exacto base)",
  "Rango"     = rango_txt,
  "Media"     = media_val,
  "Mediana"   = mediana_val,
  "Moda"      = moda_txt,
  "Varianza"  = varianza_val,
  "Desv_Std"  = sd_val,
  "CV_Porc"   = cv_val,
  "Asimetria" = asimetria_val,
  "Curtosis"  = curtosis_val,
  "Atipicos"  = status_atipicos
)

df_indicadores %>%
  gt() %>%
  tab_header(
    title = md("**TABLA DE INDICADORES**"),
    subtitle = "Estadísticos descriptivos de la variable Década de Finalización"
  ) %>%
  tab_source_note(source_note = "Autor: EDUARDO") %>%
  fmt_number(columns = c(Media, Mediana, Varianza, Desv_Std, CV_Porc, Curtosis), decimals = 2) %>%
  fmt_number(columns = c(Asimetria), decimals = 4) %>%
  cols_label(
    Variable = "Variable", Rango = "Rango [Min; Max]",
    Media = "Media (X̄)", Mediana = "Mediana (Me)", Moda = "Moda (Mo)",
    Varianza = "Varianza (S²)", Desv_Std = "Desv. Est. (S)", CV_Porc = "C.V. (%)",
    Asimetria = "Asimetría (As)", Curtosis = "Curtosis (K)", Atipicos = "Outliers"
  ) %>%
  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 descriptivos de la variable Década de Finalización
Variable Rango [Min; Max] Media (X̄) Mediana (Me) Moda (Mo) Varianza (S²) Desv. Est. (S) C.V. (%) Asimetría (As) Curtosis (K) Outliers
Década de finalización (año exacto base) [1900; 2026] 1,976.33 1,981.00 1984 727.91 26.98 1.37 −0.6778 0.01 583 outliers
Autor: EDUARDO

7 Conclusión

El periodo analizado va de 1900 a 2026 (N = 22481 pozos). La década de mayor actividad de finalización fue 1980 - 1989 (moda: 1984). CV = 1.37% (ritmo relativamente constante). Asimetría = -0.6778 (un sesgo hacia los años recientes (asimetría negativa)). Se detectaron 583 años atípicos.