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
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 %)
## Variable : Fecha de Inicio de la Perforación (década en que se inició la perforación)
## Columna base : Date.Spudded
## Tipo : Cualitativa ordinal ( 13 categorías por década)
## 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
## N : 19939
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). | ||||||
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)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)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)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 | ||||||
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.