Preparación del entorno de trabajo cargando los paquetes necesarios para el manejo de datos, formato de tablas y visualización de gráficas.
library(readxl)
library(dplyr)
library(gt)
library(ggplot2)
library(scales)
# Selección del archivo Excel (se abre ventana emergente)
ruta_archivo <- file.choose()
Datos <- read_excel(ruta_archivo)
cat("Dataset cargado exitosamente. Total de variables importadas:", ncol(Datos), "\n")## Dataset cargado exitosamente. Total de variables importadas: 32
Se extrae y limpia la variable Subnational unit
(Provincia / Estado). Se eliminan los valores nulos y se estandarizan
los textos, ya que un número considerable de registros no cuenta con
este dato reportado (por ejemplo, yacimientos offshore o unidades no
divididas administrativamente).
Variable <- Datos$`Subnational unit (province, state)` %>%
na.omit() %>%
as.character() %>%
trimws()
Variable <- Variable[Variable != ""]
N <- length(Variable)
cat("Variable analizada: Subnational unit\n")## Variable analizada: Subnational unit
## Tipo de variable: Cualitativa Nominal
## Total de observaciones útiles (n): 5278
La variable Subnational Unit es de naturaleza cualitativa nominal. Al tratarse de una subdivisión administrativa (provincia/estado), presenta una alta cardinalidad (muchas categorías distintas), por lo que se calcula la frecuencia absoluta, relativa y porcentual de cada una, ordenando de mayor a menor concentración.
TDF_Cat <- data.frame(Categoria = Variable) %>%
group_by(Categoria) %>%
summarise(ni = n(), .groups = "drop") %>%
arrange(desc(ni)) %>%
mutate(
hi_unit = ni / N,
hi_perc = hi_unit * 100,
Ni_ac = cumsum(ni),
hi_ac_perc = cumsum(hi_perc)
)
K_real <- nrow(TDF_Cat)
cat("Número de categorías distintas (k):", K_real, "\n")## Número de categorías distintas (k): 103
Dado que esta variable presenta 103 categorías, se utiliza una tabla interactiva con buscador y paginación para mantener la legibilidad. Se puede escribir el nombre de una provincia/estado en el buscador para ubicarla directamente.
fuente_nota <- paste("n =", format(N, big.mark = ","), "| Fuente: Global Energy Monitor — GOGET 2023")
TDF_Cat %>%
gt() %>%
tab_header(
title = md("**Tabla N°1**"),
subtitle = md("Distribución de frecuencias de Subnational Unit")
) %>%
cols_label(
Categoria = "Provincia / Estado", ni = md("n~i~"),
hi_unit = md("h~i~ (Unit)"), hi_perc = md("h~i~ (%)"),
Ni_ac = md("N~i~ (Acum \u2191)"), hi_ac_perc = md("H~i~ (% Acum \u2191)")
) %>%
cols_align(align = "center", columns = everything()) %>%
fmt_number(columns = c(hi_perc, hi_ac_perc), decimals = 2) %>%
fmt_number(columns = c(hi_unit), decimals = 4) %>%
fmt_number(columns = c(ni, Ni_ac), decimals = 0, use_seps = TRUE) %>%
tab_source_note(fuente_nota) %>%
tab_options(heading.background.color = "#EBF5FB", column_labels.font.weight = "bold") %>%
opt_interactive(use_search = TRUE, use_pagination = TRUE, page_size_default = 10, use_compact_mode = TRUE)Debido a que existen 103 categorías, graficarlas todas resultaría ilegible. Por ello, las gráficas muestran las Top 15 provincias/estados con mayor número de yacimientos, agrupando el resto en la categoría “Otros”.
TOP_N <- 15
top_cats <- TDF_Cat %>% slice_head(n = TOP_N)
otros_n <- sum(TDF_Cat$ni) - sum(top_cats$ni)
otros_categorias <- K_real - TOP_N
df_graf <- top_cats %>%
select(Categoria, ni, hi_perc) %>%
bind_rows(
data.frame(
Categoria = paste0("Otros (", otros_categorias, " categorías)"),
ni = otros_n,
hi_perc = (otros_n / N) * 100
)
) %>%
mutate(Categoria = factor(Categoria, levels = Categoria))
K_graf <- nrow(df_graf)
paleta_azul <- colorRampPalette(c("#08519c", "#3182bd", "#6baed6", "#9ecae1", "#c6dbef"))(K_graf)
tema_base <- theme_minimal(base_size = 12) +
theme(
legend.position = "none",
plot.title = element_text(face = "bold", size = 13),
plot.caption = element_text(color = "#888888", size = 9, hjust = 0),
axis.title = element_text(face = "bold", size = 11),
axis.text.x = element_text(angle = 45, hjust = 1, size = 9),
panel.grid.major.x = element_blank(),
panel.grid.major.y = element_line(color = "#EEEEEE"),
panel.grid.minor = element_blank(),
plot.background = element_rect(fill = "white", color = NA)
)ggplot(df_graf, aes(x = Categoria, y = ni, fill = Categoria)) +
geom_col(color = "black", linewidth = 0.3) +
geom_text(aes(label = format(ni, big.mark = ",")), vjust = -0.4, size = 3.3, fontface = "bold") +
scale_fill_manual(values = paleta_azul) +
scale_y_continuous(labels = label_comma(), expand = expansion(mult = c(0, 0.15))) +
labs(title = "Diagrama de Barras de Frecuencia Absoluta (Top 15 + Otros)",
x = "Provincia / Estado", y = "Frecuencia Absoluta (ni)",
caption = fuente_nota) +
tema_baseggplot(df_graf, aes(x = Categoria, y = hi_perc, fill = Categoria)) +
geom_col(color = "black", linewidth = 0.3) +
geom_text(aes(label = paste0(round(hi_perc, 1), "%")), vjust = -0.4, size = 3.3, fontface = "bold") +
scale_fill_manual(values = paleta_azul) +
scale_y_continuous(labels = function(x) paste0(x, "%"), expand = expansion(mult = c(0, 0.15))) +
labs(title = "Diagrama de Barras de Frecuencia Relativa Porcentual (Top 15 + Otros)",
x = "Provincia / Estado", y = "Frecuencia Relativa (%)",
caption = fuente_nota) +
tema_basedf_pie <- df_graf %>%
mutate(etiqueta = paste0(Categoria, " (", round(hi_perc, 1), "%)"))
ggplot(df_pie, aes(x = "", y = hi_perc, fill = reorder(etiqueta, -hi_perc))) +
geom_col(width = 1, color = "white", linewidth = 0.5) +
coord_polar("y", start = 0) +
scale_fill_manual(values = paleta_azul) +
theme_void(base_size = 12) +
theme(
legend.position = "right",
legend.text = element_text(size = 9),
legend.title = element_text(face = "bold", size = 11),
plot.margin = margin(t = 20, r = 20, b = 20, l = 20)
) +
guides(fill = guide_legend(title = "Provincia / Estado"))La variable Subnational Unit es cualitativa nominal, por lo que el único indicador de tendencia central aplicable es la moda, complementado con el número de categorías presentes y el nivel de concentración geográfica.
num_categorias <- K_real
moda_cat <- TDF_Cat$Categoria[1]
moda_ni <- TDF_Cat$ni[1]
moda_hi <- round(TDF_Cat$hi_perc[1], 2)
top5_hi <- round(sum(TDF_Cat$hi_perc[1:5]), 2)
tabla_ind <- data.frame(
Variable = "Subnational Unit",
Total_N = format(N, big.mark = ","),
Num_Categorias = num_categorias,
Moda = moda_cat,
Frec_Moda = format(moda_ni, big.mark = ","),
Peso_Moda = paste0(moda_hi, "%"),
Peso_Top5 = paste0(top5_hi, "%"),
check.names = FALSE
)
tabla_ind %>%
gt() %>%
tab_header(title = md("**Tabla N°2: Indicadores Estadísticos de Subnational Unit**")) %>%
cols_label(
Variable = "Variable",
Total_N = "Total Registros (N)",
Num_Categorias = "N° Categorías",
Moda = "Categoría Dominante (Moda)",
Frec_Moda = "Frecuencia de la Moda",
Peso_Moda = "Peso de la Moda",
Peso_Top5 = "Peso Top 5"
) %>%
cols_align(align = "center", columns = everything()) %>%
tab_source_note("Autor: Grupo 5") %>%
tab_options(heading.background.color = "#EBF5FB", column_labels.font.weight = "bold")| Tabla N°2: Indicadores Estadísticos de Subnational Unit | ||||||
| Variable | Total Registros (N) | N° Categorías | Categoría Dominante (Moda) | Frecuencia de la Moda | Peso de la Moda | Peso Top 5 |
|---|---|---|---|---|---|---|
| Subnational Unit | 5,278 | 103 | Texas | 1,504 | 28.5% | 59.4% |
| Autor: Grupo 5 | ||||||
La provincia/estado Texas es la categoría predominante, abarcando el 28.5% de los 5,278 registros con dato reportado, dentro de un universo de 103 subdivisiones administrativas distintas. Las 5 categorías más frecuentes concentran en conjunto el 59.4% del total, lo que evidencia una fuerte concentración geográfica de los yacimientos en unas pocas provincias/estados clave, coherente con la ubicación de las principales cuencas sedimentarias productoras a nivel mundial.