En este primer paso, se prepara el entorno de trabajo cargando las
librerías necesarias para el análisis de datos (dplyr), la
creación de gráficas avanzadas (ggplot2), y el formato
profesional de tablas (gt).
library(readxl)
library(dplyr)
library(gt)
library(ggplot2)
# Se abre ventana emergente para seleccionar dinámicamente el dataset
ruta_archivo <- file.choose()
datos_originales <- read_excel(ruta_archivo)
cat("Dataset cargado exitosamente. Total de variables:", ncol(datos_originales), "\n")## Dataset cargado exitosamente. Total de variables: 32
Se aísla la variable de interés
(Subnational unit (province, state)) y se eliminan los
valores nulos (NA). Esto garantiza que la distribución de
frecuencias refleje exclusivamente las ubicaciones válidas
reportadas.
tdf_unidades <- datos_originales %>%
select(`Subnational unit (province, state)`) %>%
filter(!is.na(`Subnational unit (province, state)`)) %>%
mutate(Subnational_Unit = trimws(as.character(`Subnational unit (province, state)`))) %>%
group_by(Subnational_Unit) %>%
summarise(Fi = n()) %>%
arrange(desc(Fi)) %>%
mutate(
hi = Fi / sum(Fi),
Pi = hi * 100,
Fi_ac = cumsum(Fi),
hi_ac = cumsum(hi)
)
N <- sum(tdf_unidades$Fi)
cat("Variable analizada: Subnational unit (province, state)\n")## Variable analizada: Subnational unit (province, state)
## Total de observaciones limpias (N): 5278
La tabla se estructura ordenando las categorías por su frecuencia absoluta de mayor a menor. Nota: Debido a la gran cantidad de provincias a nivel mundial, esta tabla muestra el Top 20 de regiones con mayor concentración de yacimientos.
# Mostramos el Top 20 para no saturar la tabla, más la fila de totales globales
tdf_top20 <- head(tdf_unidades, 20)
fila_total <- data.frame(
Subnational_Unit = "TOTAL GLOBAL (Todas las provincias)",
Fi = sum(tdf_unidades$Fi),
hi = sum(tdf_unidades$hi),
Pi = sum(tdf_unidades$Pi),
Fi_ac = NA,
hi_ac = NA
)
TDF_Final <- bind_rows(tdf_top20 %>% mutate(Subnational_Unit = as.character(Subnational_Unit)), fila_total)
fuente_nota <- paste("Fuente: Global Energy Monitor — GOGET 2023 | n =", format(N, big.mark = ","))
TDF_Final %>%
gt() %>%
tab_header(
title = md("**TABLA 1. Top 20: Frecuencias por Unidad Subnacional (Provincia/Estado)**")
) %>%
cols_label(
Subnational_Unit = "Provincia / Estado",
Fi = md("Frec. Absoluta<br>(Fi)"),
hi = md("Frec. Relativa<br>(hi)"),
Pi = md("Porcentaje<br>(%)"),
Fi_ac = md("Frec. Abs.<br>Acumulada (Fi_ac)"),
hi_ac = md("Frec. Rel.<br>Acumulada (hi_ac)")
) %>%
cols_align(align = "center", columns = everything()) %>%
fmt_number(columns = c(hi, hi_ac), decimals = 5) %>%
fmt_number(columns = c(Pi), decimals = 2) %>%
fmt_number(columns = c(Fi, Fi_ac), decimals = 0, use_seps = TRUE) %>%
sub_missing(columns = everything(), missing_text = "") %>%
tab_source_note(fuente_nota) %>%
tab_style(
style = cell_fill(color = "#F5F5F5"),
locations = cells_body(rows = nrow(TDF_Final))
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(rows = nrow(TDF_Final))
) %>%
tab_options(heading.background.color = "#EBF5FB", column_labels.font.weight = "bold")| TABLA 1. Top 20: Frecuencias por Unidad Subnacional (Provincia/Estado) | |||||
| Provincia / Estado | Frec. Absoluta (Fi) |
Frec. Relativa (hi) |
Porcentaje (%) |
Frec. Abs. Acumulada (Fi_ac) |
Frec. Rel. Acumulada (hi_ac) |
|---|---|---|---|---|---|
| Texas | 1,504 | 0.28496 | 28.50 | 1,504 | 0.28496 |
| Alberta | 493 | 0.09341 | 9.34 | 1,997 | 0.37836 |
| Saskatchewan | 461 | 0.08734 | 8.73 | 2,458 | 0.46571 |
| North Dakota | 368 | 0.06972 | 6.97 | 2,826 | 0.53543 |
| Louisiana | 309 | 0.05854 | 5.85 | 3,135 | 0.59397 |
| British Columbia | 190 | 0.03600 | 3.60 | 3,325 | 0.62997 |
| Federal offshore | 184 | 0.03486 | 3.49 | 3,509 | 0.66484 |
| Wyoming | 171 | 0.03240 | 3.24 | 3,680 | 0.69723 |
| Oklahoma | 140 | 0.02653 | 2.65 | 3,820 | 0.72376 |
| Queensland | 106 | 0.02008 | 2.01 | 3,926 | 0.74384 |
| California | 96 | 0.01819 | 1.82 | 4,022 | 0.76203 |
| Casanare | 74 | 0.01402 | 1.40 | 4,096 | 0.77605 |
| New Mexico | 71 | 0.01345 | 1.35 | 4,167 | 0.78950 |
| Neuquén | 69 | 0.01307 | 1.31 | 4,236 | 0.80258 |
| Colorado | 67 | 0.01269 | 1.27 | 4,303 | 0.81527 |
| Pennsylvania | 66 | 0.01250 | 1.25 | 4,369 | 0.82778 |
| Federal Offshore | 62 | 0.01175 | 1.17 | 4,431 | 0.83952 |
| Western Australia | 48 | 0.00909 | 0.91 | 4,479 | 0.84862 |
| Meta | 45 | 0.00853 | 0.85 | 4,524 | 0.85714 |
| Alaska | 42 | 0.00796 | 0.80 | 4,566 | 0.86510 |
| TOTAL GLOBAL (Todas las provincias) | 5,278 | 1.00000 | 100.00 | ||
| Fuente: Global Energy Monitor — GOGET 2023 | n = 5,278 | |||||
Para asegurar la legibilidad y el rigor visual del reporte, las siguientes gráficas ilustran el Top 15 de las provincias/estados con mayor presencia de yacimientos.
# Filtramos el Top 15 para las gráficas
tdf_graficas <- head(tdf_unidades, 15)
# Paleta de colores dinámica
paleta_azul <- colorRampPalette(c("#08519c", "#3182bd", "#6baed6", "#9ecae1", "#c6dbef"))(nrow(tdf_graficas))ggplot(tdf_graficas, aes(x = reorder(Subnational_Unit, -Fi), y = Fi, fill = Subnational_Unit)) +
geom_bar(stat = "identity", show.legend = FALSE, color = "black", size = 0.3) +
geom_text(aes(label = format(Fi, big.mark = ",")), vjust = -0.5, size = 3.5, fontface = "bold") +
scale_fill_manual(values = paleta_azul) +
theme_minimal() +
labs(x = "Provincia / Estado", y = "Frecuencia Absoluta (Fi)") +
theme(
plot.title = element_blank(),
axis.title = element_text(size = 12, face = "bold"),
axis.text = element_text(size = 10),
axis.text.x = element_text(angle = 45, hjust = 1)
) +
scale_y_continuous(expand = expansion(mult = c(0, 0.15)))ggplot(tdf_graficas, aes(x = reorder(Subnational_Unit, -Pi), y = Pi, fill = Subnational_Unit)) +
geom_bar(stat = "identity", show.legend = FALSE, color = "black", size = 0.3) +
geom_text(aes(label = paste0(round(Pi, 1), "%")), vjust = -0.5, size = 3.5, fontface = "bold") +
scale_fill_manual(values = paleta_azul) +
theme_minimal() +
labs(x = "Provincia / Estado", y = "Porcentaje (%)") +
theme(
plot.title = element_blank(),
axis.title = element_text(size = 12, face = "bold"),
axis.text = element_text(size = 10),
axis.text.x = element_text(angle = 45, hjust = 1)
) +
scale_y_continuous(expand = expansion(mult = c(0, 0.15)))# Preparación de etiquetas para leyenda
plot_data <- tdf_graficas %>%
mutate(label_leyenda = paste0(Subnational_Unit, " (", round(Pi, 1), "%)"))
ggplot(plot_data, aes(x = "", y = Pi, fill = reorder(label_leyenda, -Pi))) +
geom_bar(stat = "identity", width = 1, color = "white", size = 0.5) +
coord_polar("y", start = 0) +
scale_fill_manual(values = paleta_azul) +
theme_void() +
theme(
legend.position = "right",
legend.text = element_text(size = 11),
legend.title = element_text(face = "bold", size = 12),
plot.margin = margin(t = 20, r = 20, b = 20, l = 20)
) +
guides(fill = guide_legend(title = "Top 15 Provincias/Estados"))# Cálculos de indicadores globales
num_categorias <- nrow(tdf_unidades)
moda_cat <- as.character(tdf_unidades$Subnational_Unit[1])
moda_ni <- tdf_unidades$Fi[1]
moda_hi <- round(tdf_unidades$Pi[1], 2)
tabla_ind <- data.frame(
"Total Registros (N)" = format(N, big.mark = ","),
"Total Provincias/Estados" = num_categorias,
"Provincia Dominante (Moda)" = moda_cat,
"Frecuencia de la Moda" = format(moda_ni, big.mark = ","),
"Peso de la Moda" = paste0(moda_hi, "%"),
check.names = FALSE
)
tabla_ind %>%
gt() %>%
tab_header(
title = md("**TABLA 2. Indicadores Estadísticos Globales**")
) %>%
cols_align(align = "center", columns = everything()) %>%
tab_source_note("Autor: Grupo 5") %>%
tab_options(heading.background.color = "#EBF5FB", column_labels.font.weight = "bold")| TABLA 2. Indicadores Estadísticos Globales | ||||
| Total Registros (N) | Total Provincias/Estados | Provincia Dominante (Moda) | Frecuencia de la Moda | Peso de la Moda |
|---|---|---|---|---|
| 5,278 | 103 | Texas | 1,504 | 28.5% |
| Autor: Grupo 5 | ||||