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 Unit type (Tipo de
Unidad). Se eliminan los valores nulos y se estandarizan los textos
(eliminando espacios) para garantizar que el conteo de categorías sea
correcto.
Variable <- Datos$`Unit type` %>%
na.omit() %>%
as.character() %>%
trimws()
N <- length(Variable)
cat("Variable analizada: Unit type\n")## Variable analizada: Unit type
## Tipo de variable: Cualitativa Nominal
## Total de observaciones útiles (n): 8334
La variable Unit Type es de naturaleza cualitativa nominal (no posee orden jerárquico entre sus categorías: field, asset, pool, etc.). Se calcula la frecuencia absoluta, relativa y porcentual de cada categoría, ordenando de mayor a menor para facilitar la lectura.
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): 11
Se estructura la matriz de resultados ordenando las categorías por su frecuencia absoluta, de mayor a menor, para identificar rápidamente las tipologías más comunes en la industria.
fuente_nota <- paste("n =", format(N, big.mark = ","), "| Fuente: Global Energy Monitor — GOGET 2023")
fila_total_cat <- data.frame(
Categoria = "TOTAL",
ni = sum(TDF_Cat$ni),
hi_unit = sum(TDF_Cat$hi_unit),
hi_perc = sum(TDF_Cat$hi_perc),
Ni_ac = NA,
hi_ac_perc = NA
)
bind_rows(TDF_Cat, fila_total_cat) %>%
gt() %>%
tab_header(
title = md("**Tabla N°1**"),
subtitle = md("Distribución de frecuencias de Unit Type")
) %>%
cols_label(
Categoria = "Tipo de Unidad", 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_style(
style = cell_fill(color = "#F5F5F5"),
locations = cells_body(rows = nrow(TDF_Cat) + 1)
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(rows = nrow(TDF_Cat) + 1)
) %>%
sub_missing(columns = everything(), missing_text = "") %>%
tab_options(heading.background.color = "#EBF5FB", column_labels.font.weight = "bold")| Tabla N°1 | |||||
| Distribución de frecuencias de Unit Type | |||||
| Tipo de Unidad | ni | hi (Unit) | hi (%) | Ni (Acum ↑) | Hi (% Acum ↑) |
|---|---|---|---|---|---|
| field | 4,336 | 0.5203 | 52.03 | 4,336 | 52.03 |
| asset | 3,124 | 0.3749 | 37.49 | 7,460 | 89.51 |
| pool | 461 | 0.0553 | 5.53 | 7,921 | 95.04 |
| project | 183 | 0.0220 | 2.20 | 8,104 | 97.24 |
| block | 111 | 0.0133 | 1.33 | 8,215 | 98.57 |
| complex | 73 | 0.0088 | 0.88 | 8,288 | 99.45 |
| concession | 16 | 0.0019 | 0.19 | 8,304 | 99.64 |
| area | 14 | 0.0017 | 0.17 | 8,318 | 99.81 |
| phase | 11 | 0.0013 | 0.13 | 8,329 | 99.94 |
| basin | 3 | 0.0004 | 0.04 | 8,332 | 99.98 |
| sub-basin | 2 | 0.0002 | 0.02 | 8,334 | 100.00 |
| TOTAL | 8,334 | 1.0000 | 100.00 | ||
| n = 8,334 | Fuente: Global Energy Monitor — GOGET 2023 | |||||
paleta_azul <- colorRampPalette(c("#08519c", "#3182bd", "#6baed6", "#9ecae1", "#c6dbef"))(K_real)
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 = 10),
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)
)
df_graf <- TDF_Cat %>%
mutate(Categoria = factor(Categoria, levels = Categoria))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.5, 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",
x = "Tipo de Unidad", 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.5, 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",
x = "Tipo de Unidad", 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 = 10),
legend.title = element_text(face = "bold", size = 11),
plot.margin = margin(t = 20, r = 20, b = 20, l = 20)
) +
guides(fill = guide_legend(title = "Tipo de Unidad"))La variable Unit Type 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 en el dataset.
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)
tabla_ind <- data.frame(
Variable = "Unit Type",
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, "%"),
check.names = FALSE
)
tabla_ind %>%
gt() %>%
tab_header(title = md("**Tabla N°2: Indicadores Estadísticos de Unit Type**")) %>%
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"
) %>%
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 Unit Type | |||||
| Variable | Total Registros (N) | N° Categorías | Categoría Dominante (Moda) | Frecuencia de la Moda | Peso de la Moda |
|---|---|---|---|---|---|
| Unit Type | 8,334 | 11 | field | 4,336 | 52.03% |
| Autor: Grupo 5 | |||||
El tipo de unidad field es la categoría predominante, abarcando el 52.03% de los 8,334 registros analizados, seguido en frecuencia por las demás categorías operativas identificadas (11 en total). Esta concentración refleja la estructura operativa actual y la alineación de las instalaciones extractivas con los estándares más comunes de clasificación en la industria energética mundial.