INTRODUCCION

Este estudio analiza la evolución temporal de los pozos petrolíferos en Brasil mediante la variable Año de Inicio, aplicando tablas de frecuencias, gráficos estadísticos y medidas de síntesis.

1 _ Librerías

Carga de paquetes

library(readxl)
library(dplyr)
library(gt)
library(e1071)
library(lubridate)
library(MASS)
library(knitr)

2 _ Carga datos

setwd("~/SEGUNDO SEMESTRE/SEGUNDO SEMESTRE")
Datos_Brutos <- read.csv(  
  "tabela_de_pocos_janeiro_2018.csv",  
  header        = TRUE,  
  sep           = ",",  
  quote         = "\"",
  dec           = ".",  
  fileEncoding  = "Latin1",
  fill          = TRUE
)

Datos_Brutos <- as.data.frame(Datos_Brutos)

3 _ Variables

# Extraemos los primeros 4 caracteres del texto de la fecha (año) de forma segura
Datos <- Datos_Brutos %>%
  mutate(
    Anio_Exacto = as.numeric(substr(as.character(INICIO), 1, 4))
  ) %>%
  filter(!is.na(Anio_Exacto) & Anio_Exacto > 1900) %>%
  mutate(
    Decada_Inicio = floor(Anio_Exacto / 10) * 10, 
    Periodo = paste0(Decada_Inicio, " - ", Decada_Inicio + 9)
  )

Variable_Exacta <- Datos$Anio_Exacto
Variable_Clases <- Datos$Periodo
Variable_Orden  <- Datos$Decada_Inicio

if(length(Variable_Exacta) == 0) stop("ERROR: No hay datos válidos.")

4 _ Conteo

df_calc <- data.frame(Periodo = Variable_Clases, Orden = Variable_Orden)

TDF_Raw <- df_calc %>%
  group_by(Orden, Periodo) %>%
  summarise(ni = n(), .groups = 'drop') %>%
  arrange(Orden) 

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

5 _ Tabla

TABLA DE DISTRIBUCIÓN DE FRECUENCIA

# Totales
totales <- c("TOTAL", sum(ni), round(sum(hi), 2), "-", "-", "-", "-")

TDF_Char <- TDF_Decadas %>% mutate(across(everything(), as.character))
TDF_Show <- rbind(TDF_Char, totales)

colnames(TDF_Show) <- names(TDF_Decadas)
TDF_Show %>%
  gt() %>%
  tab_header(
    title = md("DISTRIBUCIÓN POR DÉCADAS"),
    subtitle = md("Variable: **Inicio de Perforación**")
  ) %>%
  tab_source_note(source_note = "Autor: Ashly Alzate") %>%
  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 = "#2E4053"), cell_text(color = "white", weight = "bold")),
    locations = cells_title()
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#F2F3F4"), cell_text(weight = "bold", color = "#2E4053")),
    locations = cells_column_labels()
  ) %>%
  tab_options(
    table.border.top.color = "#2E4053",
    table.border.bottom.color = "#2E4053",
    column_labels.border.bottom.color = "#2E4053",
    data_row.padding = px(6)
  )
DISTRIBUCIÓN POR DÉCADAS
Variable: Inicio de Perforación
Periodo (Década) Cant. Pozos (ni) Porcentaje (hi%) Ni (Asc) Ni (Desc) Hi (Asc) Hi (Desc)
1920 - 1929 2 0.01 2 29575 0.01 100
1930 - 1939 7 0.02 9 29573 0.03 99.99
1940 - 1949 192 0.65 201 29566 0.68 99.97
1950 - 1959 840 2.84 1041 29374 3.52 99.32
1960 - 1969 2414 8.16 3455 28534 11.68 96.48
1970 - 1979 2562 8.66 6017 26120 20.34 88.32
1980 - 1989 9501 32.13 15518 23558 52.47 79.66
1990 - 1999 3670 12.41 19188 14057 64.88 47.53
2000 - 2009 5690 19.24 24878 10387 84.12 35.12
2010 - 2019 4697 15.88 29575 4697 100 15.88
TOTAL 29575 100 - - - -
Autor: Ashly Alzate

6 _ Gráficas

Gráficos de Barras

col_gris_azulado <- "#5D6D7E"
col_ejes <- "#2E4053"

vals_x <- TDF_Decadas$Periodo
vals_y <- TDF_Decadas$ni
ylim_max <- max(vals_y) * 1.1

# GRÁFICO 1: Frecuencia Absoluta (LOCAL)
par(mar = c(10, 5, 4, 2)) 
bp <- barplot(vals_y, 
        main = "Gráfica No.1: Distribucion de Fecha de Inicio(Inicio) de Pozos Petroleros de Brazil",
        cex.main = 0.8,
        ylab = "Cantidad de Pozos",
        col = col_gris_azulado, border = "white", axes = FALSE,
        ylim = c(0, ylim_max),
        axisnames = FALSE) 

axis(2, col = col_ejes, col.axis = col_ejes)
axis(1, at = bp, labels = vals_x, col = col_ejes, col.axis = col_ejes, las=2, cex.axis=0.8)
title(xlab = "Década", line = 8) 
grid(nx=NA, ny=NULL, col="#D7DBDD", lty="dotted") 
box(bty="l", col=col_ejes)

Gráfico 2: Frecuencia Absoluta

par(mar = c(10, 5, 4, 2))

bp2 <- barplot(vals_y,
        main = "Gráfica N°2: Distribucion de Fecha de Inicio(Inicio) de Pozos Petroleros de Brazil",
        cex.main = 0.8,
        ylab = "Cantidad de Pozos",
        col = col_gris_azulado, border = "white", axes = FALSE,
        ylim = c(0, N),
        axisnames = FALSE)

axis(2, col = col_ejes, col.axis = col_ejes)
axis(1, at = bp2, labels = vals_x, col = col_ejes, col.axis = col_ejes, las=2, cex.axis=0.8)
title(xlab = "Década", line = 8)
grid(nx=NA, ny=NULL, col="#D7DBDD", lty="dotted")
box(bty="l", col=col_ejes)

vals_y_pct <- TDF_Decadas$hi

Gráfico 3: Porcentual (LOCAL)

par(mar = c(10, 5, 4, 2))
bp3 <- barplot(vals_y_pct,
        main = "Gráfica N°3: Distribucion Porcentual de Fecha de Inicio(Inicio) de Pozos Petroleros de Brazil",
        cex.main = 0.8,
        ylab = "% del Total",
        col = col_gris_azulado, border = "white", axes = FALSE,
        ylim = c(0, max(vals_y_pct)*1.2),
        axisnames = FALSE) 

axis(2, col = col_ejes, col.axis = col_ejes)
axis(1, at = bp3, labels = vals_x, col = col_ejes, col.axis = col_ejes, las=2, cex.axis=0.8)
text(x = bp3, y = vals_y_pct, label = paste0(round(vals_y_pct, 1), "%"), pos = 3, cex = 0.7, col = col_ejes)
title(xlab = "Década", line = 8)
grid(nx=NA, ny=NULL, col="#D7DBDD", lty="dotted")
box(bty="l", col=col_ejes)

Gráfico 4: Porcentual (GLOBAL - Escala 0 a 100%)

par(mar = c(10, 5, 4, 2))
bp4 <- barplot(vals_y_pct,
        main = "Gráfica N°4: Distribucion Porcentual de Fecha de Inicio(Inicio) de Pozos Petroleros de Brazil",
        cex.main = 0.8,
        ylab = "% del Total",
        col = col_gris_azulado, border = "white", axes = FALSE,
        ylim = c(0, 100), # Eje Y fijo a 100%
        axisnames = FALSE)

axis(2, col = col_ejes, col.axis = col_ejes)
axis(1, at = bp4, labels = vals_x, col = col_ejes, col.axis = col_ejes, las=2, cex.axis=0.8)
text(x = bp4, y = vals_y_pct, label = paste0(round(vals_y_pct, 1), "%"), pos = 3, cex = 0.7, col = col_ejes)
title(xlab = "Década", line = 8)
abline(h=seq(0,100,20), col="#D7DBDD", lty="dotted")
box(bty="l", col=col_ejes)

Gráfica 5: Diagrama de Caja

par(mar = c(7, 5, 4, 2)) 
boxplot(Variable_Exacta, horizontal = TRUE, col = col_gris_azulado, 
        main = "Gráfica N°5: Diagrama de Caja de Fecha de Inicio de Pozos Petroleros en Brazil",
        cex.main = 0.8,
        xlab = "", outline = TRUE, outpch = 19, outcol = "#C0392B", 
        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_ejes, col.axis=col_ejes)
title(xlab = "Año Exacto", line = 4)

Gráfica 6: Ojivas

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

col_azul <- "#2E4053"
col_rojo <- "#C0392B"
# Definimos col_ejes por si no lo tenías declarado arriba
col_ejes <- "#2E4053" 

plot(x_vals_num, y_asc, type = "o", col = col_azul, lwd=2, pch=19,
     main = "Gráfica N°6: Ojivas Ascendente y Descendente de Fecha de Inicio de Pozos Petroleros de Brazil",
     cex.main = 0.8,
     ylab = "Frecuencia Acumulada", xlab = "",
     axes = FALSE, frame.plot = FALSE)

# Cambiamos las = 2 por las = 1 para que los textos queden horizontales
axis(1, at = x_vals_num, labels = x_labels, las = 1, cex.axis = 0.8, col = col_ejes, col.axis = col_ejes)
axis(2, col = col_ejes, col.axis = col_ejes)
title(xlab = "Década", line = 4)
lines(x_vals_num, y_desc, type = "o", col = col_rojo, lwd=2, pch=19)

legend("right", legend = c("Ascendente", "Descendente"),
       col = c(col_azul, col_rojo), lty = 1, pch = 19, cex = 0.7, lwd=2,
       inset = c(-0.15, 0), bty="n")
grid()
grid(nx = NULL, ny = NA, col = "lightgray", lty = "dotted")

7 _ Indicadores

Cálculo de Indicadores (Variable exacta)

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_resumen <- data.frame(
  "Variable" = "Año de Inicio (Exacto)",
  "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_resumen %>%
  gt() %>%
  tab_header(
    title = md("**ESTADÍSTICOS DESCRIPTIVOS**"),
    subtitle = "Indicadores calculados sobre años exactos"
  ) %>%
  tab_source_note(source_note = "Autor: Ashly Alzate") %>%
  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"
  ) %>%
  tab_options(
    column_labels.background.color = "#2E4053",
    table.border.top.color = "black",
    table.border.bottom.color = "#2E4053",
    column_labels.border.bottom.color = "#2E4053",
    data_row.padding = px(8)
  ) %>%
  tab_style(
    style = list(cell_text(weight = "bold", color = "white")),
    locations = cells_column_labels()
  )
ESTADÍSTICOS DESCRIPTIVOS
Indicadores calculados sobre años exactos
Variable Rango [Min; Max] Media (X̄) Mediana (Me) Moda (Mo) Varianza (S²) Desv. Est. (S) C.V. (%) Asimetría (As) Curtosis (K) Outliers
Año de Inicio (Exacto) [1922; 2018] 1,990.64 1,988.00 1982 262.92 16.21 0.81 −0.3246 −0.52 96 outliers
Autor: Ashly Alzate

8 _ Conclusión

Los valores de la variable Año de Inicio fluctúan entre 1922 y 2018 y giran en torno a la media de 1,990.64 (coincidente con la mediana de 1,988.00), con una desviación estándar de 16.21, con 96 valores atípicos identificados, siendo un conjunto de datos heterogéneo (C.V. = 0.81%), cuyos valores se agrupan fuertemente en la parte alta de la variable. Por lo anterior, el comportamiento es perjudicial.