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
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
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 |
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. | ||||||
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)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)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)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)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)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 | ||||||||||
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.