1 Carga de Datos y Librerías

Se cargan las librerías necesarias y el dataset Global Oil and Gas Extraction Tracker (GOGET), que contiene registros de unidades de extracción de petróleo y gas a nivel mundial.

library(readxl)
library(dplyr)
library(gt)
library(ggplot2)
library(scales)
library(forcats)

setwd("C:/Users/DETPC/Downloads")
datos <- read_excel("dataset_mundial_petro.xlsx") %>%
  filter(!is.na(`Subnational unit (province, state)`), `Subnational unit (province, state)` != "NA",
         !is.na(`Unit type`),  `Unit type`  != "NA")

cat("Registros válidos:", nrow(datos), "\n")
## Registros válidos: 5278
cat("Variables:", ncol(datos), "\n")
## Variables: 32

2 Extracción de la Variable

Se extrae la variable Subnational Unit (Province/State) (Unidad Subnacional: provincia/estado). Es una variable de escala nominal: sus categorías no tienen orden jerárquico intrínseco.

n <- nrow(datos)

cat("Variable analizada: Subnational Unit (Province/State)\n")
## Variable analizada: Subnational Unit (Province/State)
cat("Total de observaciones (n):", n, "\n")
## Total de observaciones (n): 5278
cat("Categorías presentes:", length(unique(datos$`Subnational unit (province, state)`)), "\n")
## Categorías presentes: 103

3 Conteo y Cálculo

Se calcula la frecuencia absoluta (nᵢ), la frecuencia relativa en proporción (hᵢ) y en porcentaje (hᵢ %) para cada categoría, ordenadas de mayor a menor.

tabla_freq <- datos %>%
  count(`Subnational unit (province, state)`, name = "ni") %>%
  arrange(desc(ni)) %>%
  rename(UnidadSubnacional = `Subnational unit (province, state)`) %>%
  mutate(
    hi_prop = ni / n,
    hi_pct  = hi_prop * 100,
    i       = row_number()
  ) %>%
  select(i, UnidadSubnacional, ni, hi_pct, hi_prop)

k <- nrow(tabla_freq)

cat("Número de categorías (k):", k, "\n")
## Número de categorías (k): 103
cat("Categoría más frecuente :", tabla_freq$UnidadSubnacional[1],
    "—", tabla_freq$ni[1], "registros\n")
## Categoría más frecuente : Texas — 1504 registros
cat("Categoría menos frecuente:", tabla_freq$UnidadSubnacional[k],
    "—", tabla_freq$ni[k], "registro(s)\n")
## Categoría menos frecuente: Tianjin — 1 registro(s)
cat("Verificación — Σnᵢ:", sum(tabla_freq$ni), "(debe ser", n, ")\n")
## Verificación — Σnᵢ: 5278 (debe ser 5278 )
cat("Verificación — Σhᵢ%:", round(sum(tabla_freq$hi_pct), 2), "(debe ser 100)\n")
## Verificación — Σhᵢ%: 100 (debe ser 100)

4 Tabla de Distribución de Frecuencias

tabla_freq %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N. 1**"),
    subtitle = md("Distribución de frecuencias por unidad subnacional (provincia/estado) — yacimientos de petróleo y gas")
  ) %>%
  cols_label(
    i                 = md("**N°**"),
    UnidadSubnacional = md("**Unidad subnacional (provincia/estado)**"),
    ni                = md("**nᵢ**"),
    hi_pct            = md("**(%)** "),
    hi_prop           = md("**(proporción)**")
  ) %>%
  tab_spanner(label = md("**hᵢ**"), columns = c(hi_pct, hi_prop)) %>%
  fmt_number(columns = ni,      decimals = 0, use_seps = TRUE) %>%
  fmt_number(columns = hi_pct,  decimals = 2) %>%
  fmt_number(columns = hi_prop, decimals = 4) %>%
  grand_summary_rows(
    columns = c(ni, hi_pct, hi_prop),
    fns = list(label = "Total", fn = "sum"),
    fmt = list(
      ~ fmt_number(., columns = ni,      decimals = 0, use_seps = TRUE),
      ~ fmt_number(., columns = hi_pct,  decimals = 2),
      ~ fmt_number(., columns = hi_prop, decimals = 4)
    )
  ) %>%
  tab_source_note("Autor: Grupo 5") %>%
  tab_options(
    table.width                       = pct(75),
    table.font.size                   = px(13),
    table.font.names                  = "Arial",
    heading.title.font.size           = px(15),
    heading.subtitle.font.size        = px(12),
    heading.align                     = "center",
    heading.background.color          = "#AAAAAA",
    column_labels.font.weight         = "bold",
    column_labels.background.color    = "#FFFFFF",
    column_labels.border.top.color    = "#AAAAAA",
    column_labels.border.bottom.color = "#AAAAAA",
    table.border.top.color            = "#AAAAAA",
    table.border.bottom.color         = "#AAAAAA"
  ) %>%
  tab_style(
    style     = cell_text(color = "white", weight = "bold"),
    locations = cells_title(groups = c("title", "subtitle"))
  ) %>%
  tab_style(
    style     = cell_text(weight = "bold"),
    locations = list(cells_column_labels(), cells_column_spanners(), cells_grand_summary())
  )
Tabla N. 1
Distribución de frecuencias por unidad subnacional (provincia/estado) — yacimientos de petróleo y gas
Unidad subnacional (provincia/estado) nᵢ
hᵢ
(%) (proporción)
1 Texas 1,504 28.50 0.2850
2 Alberta 493 9.34 0.0934
3 Saskatchewan 461 8.73 0.0873
4 North Dakota 368 6.97 0.0697
5 Louisiana 309 5.85 0.0585
6 British Columbia 190 3.60 0.0360
7 Federal offshore 184 3.49 0.0349
8 Wyoming 171 3.24 0.0324
9 Oklahoma 140 2.65 0.0265
10 Queensland 106 2.01 0.0201
11 California 96 1.82 0.0182
12 Casanare 74 1.40 0.0140
13 New Mexico 71 1.35 0.0135
14 Neuquén 69 1.31 0.0131
15 Colorado 67 1.27 0.0127
16 Pennsylvania 66 1.25 0.0125
17 Federal Offshore 62 1.17 0.0117
18 Western Australia 48 0.91 0.0091
19 Meta 45 0.85 0.0085
20 Alaska 42 0.80 0.0080
21 Santa Cruz 42 0.80 0.0080
22 Tabasco 41 0.78 0.0078
23 West Virginia 38 0.72 0.0072
24 Rio de Janeiro 34 0.64 0.0064
25 Xinjiang 30 0.57 0.0057
26 Chubut 29 0.55 0.0055
27 Mendoza 29 0.55 0.0055
28 Ohio 29 0.55 0.0055
29 Veracruz 27 0.51 0.0051
30 Bohai Sea 20 0.38 0.0038
31 South China Sea 19 0.36 0.0036
32 Santander 18 0.34 0.0034
33 Huila 17 0.32 0.0032
34 Newfoundland & Labrador 17 0.32 0.0032
35 Arauca 16 0.30 0.0030
36 Manitoba 16 0.30 0.0030
37 Putumayo 15 0.28 0.0028
38 Rio Negro 14 0.27 0.0027
39 Sichuan 12 0.23 0.0023
40 Tamaulipas 12 0.23 0.0023
41 Victoria 12 0.23 0.0023
42 Tolima 11 0.21 0.0021
43 Cesar 10 0.19 0.0019
44 Espírito Santo 10 0.19 0.0019
45 São Paulo 10 0.19 0.0019
46 Boyaca 9 0.17 0.0017
47 Piura 9 0.17 0.0017
48 Loreto 8 0.15 0.0015
49 Rio Grande do Norte 8 0.15 0.0015
50 Tierra del Fuego 8 0.15 0.0015
51 Puebla; Veracruz 7 0.13 0.0013
52 Antioquia 6 0.11 0.0011
53 Bahia 6 0.11 0.0011
54 La Pampa 6 0.11 0.0011
55 Salta 6 0.11 0.0011
56 Sucre 6 0.11 0.0011
57 Cordoba 5 0.09 0.0009
58 Cusco 5 0.09 0.0009
59 Norte de Santander 5 0.09 0.0009
60 Chiapas 4 0.08 0.0008
61 Chiapas; Tabasco 4 0.08 0.0008
62 Chongqing 4 0.08 0.0008
63 Estado Nacional 4 0.08 0.0008
64 Nuevo León; Tamaulipas 4 0.08 0.0008
65 Shaanxi 4 0.08 0.0008
66 Shandong 4 0.08 0.0008
67 Tarija 4 0.08 0.0008
68 Amazonas 3 0.06 0.0006
69 Guajira 3 0.06 0.0006
70 Matanzas 3 0.06 0.0006
71 Northern Territory 3 0.06 0.0006
72 Qinghai 3 0.06 0.0006
73 Bolivar 2 0.04 0.0004
74 Coahuila 2 0.04 0.0004
75 East China Sea 2 0.04 0.0004
76 Gansu 2 0.04 0.0004
77 Heilongjiang 2 0.04 0.0004
78 Inner Mongolia 2 0.04 0.0004
79 Jilin 2 0.04 0.0004
80 Liaoning 2 0.04 0.0004
81 Maranhão 2 0.04 0.0004
82 Sergipe 2 0.04 0.0004
83 Tumbes 2 0.04 0.0004
84 Ucayali 2 0.04 0.0004
85 Alagoas 1 0.02 0.0002
86 Atlantico 1 0.02 0.0002
87 Cauca 1 0.02 0.0002
88 Chuquisaca 1 0.02 0.0002
89 Cochabamba 1 0.02 0.0002
90 Habana 1 0.02 0.0002
91 Hebei 1 0.02 0.0002
92 Hidalgo; Veracruz 1 0.02 0.0002
93 Hubei 1 0.02 0.0002
94 Magdalena 1 0.02 0.0002
95 New South Wales 1 0.02 0.0002
96 Nuevo León 1 0.02 0.0002
97 Oklahoma-Texas-Kansas 1 0.02 0.0002
98 Puebla 1 0.02 0.0002
99 Shanxi 1 0.02 0.0002
100 South Australia 1 0.02 0.0002
101 Tabasco; Veracruz 1 0.02 0.0002
102 Tasmania 1 0.02 0.0002
103 Tianjin 1 0.02 0.0002
Total 5,278 100.00 1.0000
Autor: Grupo 5

5 Gráficas

Dado que la variable presenta 103 categorías, las gráficas de barras muestran las 20 unidades subnacionales más frecuentes para mantener la legibilidad. El diagrama circular agrupa el resto en la categoría “Otros”.

top_n <- 20

fuel_graf <- tabla_freq %>%
  slice_head(n = top_n) %>%
  mutate(UnidadSubnacional = fct_reorder(UnidadSubnacional, ni))

tema_base <- theme_minimal(base_size = 11) +
  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.y        = element_text(size = 9),
    panel.grid.major.y = element_blank(),
    panel.grid.major.x = element_line(color = "#EEEEEE"),
    panel.grid.minor   = element_blank(),
    plot.background    = element_rect(fill = "white", color = NA)
  )

pie_label <- paste0("n = ", format(n, big.mark = ","),
                    " | Fuente: Global Energy Monitor — GOGET 2023")

5.1 Diagrama de Barras — Frecuencia Absoluta (Top 20)

ggplot(fuel_graf, aes(x = UnidadSubnacional, y = ni, fill = ni)) +
  geom_col(width = 0.65, color = "white") +
  geom_text(aes(label = format(ni, big.mark = ",")),
            hjust = -0.15, size = 3, fontface = "bold") +
  coord_flip() +
  scale_fill_gradient(low = "#AED6F1", high = "#1A5276") +
  scale_y_continuous(labels = label_comma(),
                     expand = expansion(mult = c(0, 0.15))) +
  labs(title   = "Gráfica N. 1: Distribución de yacimientos por unidad subnacional (Top 20)",
       x = "Unidad subnacional (provincia/estado)", y = "Frecuencia Absoluta (nᵢ)",
       caption = pie_label) +
  tema_base

5.2 Diagrama de Barras — Frecuencia Relativa Porcentual (Top 20)

ggplot(fuel_graf, aes(x = UnidadSubnacional, y = hi_pct, fill = hi_pct)) +
  geom_col(width = 0.65, color = "white") +
  geom_text(aes(label = paste0(round(hi_pct, 2), "%")),
            hjust = -0.15, size = 3, fontface = "bold") +
  coord_flip() +
  scale_fill_gradient(low = "#AED6F1", high = "#1A5276") +
  scale_y_continuous(labels = function(x) paste0(x, "%"),
                     expand = expansion(mult = c(0, 0.15))) +
  labs(title   = "Gráfica N. 2: Distribución porcentual por unidad subnacional (Top 20)",
       x = "Unidad subnacional (provincia/estado)", y = "Frecuencia Relativa (%)",
       caption = pie_label) +
  tema_base

5.3 Diagrama Circular

top_pie <- 10

pie_data <- tabla_freq %>%
  mutate(grupo = ifelse(row_number() <= top_pie, UnidadSubnacional, "Otros")) %>%
  group_by(grupo) %>%
  summarise(ni = sum(ni), hi_pct = sum(hi_pct), .groups = "drop") %>%
  arrange(desc(ni)) %>%
  mutate(grupo = fct_reorder(grupo, hi_pct),
         etiqueta = paste0(round(hi_pct, 1), "%"))

ggplot(pie_data, aes(x = "", y = hi_pct, fill = grupo)) +
  geom_col(width = 1, color = "white") +
  geom_text(aes(label = etiqueta),
            position = position_stack(vjust = 0.5),
            size = 3, fontface = "bold") +
  coord_polar(theta = "y") +
  scale_fill_brewer(palette = "Blues", direction = -1) +
  labs(title   = "Gráfica N. 3: Distribución porcentual por unidad subnacional (Top 10 + Otros)",
       fill    = "Unidad subnacional",
       caption = pie_label) +
  theme_void(base_size = 12) +
  theme(
    plot.title      = element_text(face = "bold", size = 13, hjust = 0.5),
    plot.caption    = element_text(color = "#888888", size = 9, hjust = 0.5),
    legend.position = "right",
    legend.title    = element_text(face = "bold", size = 10),
    legend.text     = element_text(size = 8),
    plot.background = element_rect(fill = "white", color = NA)
  )


6 Agrupación por Región Geográfica

Dado que la variable Subnational Unit (Province/State) presenta 103 categorías, resulta útil complementar el análisis con una agrupación a nivel de región geográfica/continental, asignando cada unidad subnacional a una región según el país (Country) al que pertenece.

region_map <- c(
  "United States" = "América del Norte",
  "Canada"        = "América del Norte",
  "Mexico"        = "América del Norte",
  "Brazil"        = "América del Sur",
  "Colombia"      = "América del Sur",
  "Peru"          = "América del Sur",
  "Bolivia"       = "América del Sur",
  "Argentina"     = "América del Sur",
  "Cuba"          = "América Central y Caribe",
  "China"         = "Asia",
  "China-Japan"   = "Asia",
  "Timor Gap"     = "Asia",
  "Australia"     = "Oceanía"
)

tabla_region <- datos %>%
  mutate(Region = recode(Country, !!!region_map, .default = "Otros / No especificado")) %>%
  count(Region, name = "ni") %>%
  arrange(desc(ni)) %>%
  mutate(
    hi_prop = ni / n,
    hi_pct  = hi_prop * 100,
    i       = row_number()
  ) %>%
  select(i, Region, ni, hi_pct, hi_prop)

cat("Verificación — Σnᵢ:", sum(tabla_region$ni), "(debe ser", n, ")\n")
## Verificación — Σnᵢ: 5278 (debe ser 5278 )
cat("Verificación — Σhᵢ%:", round(sum(tabla_region$hi_pct), 2), "(debe ser 100)\n")
## Verificación — Σhᵢ%: 100 (debe ser 100)

6.1 Tabla de Distribución por Región Geográfica

tabla_region %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N. 2**"),
    subtitle = md("Distribución de frecuencias por región geográfica — Subnational Unit")
  ) %>%
  cols_label(
    i       = md("**N°**"),
    Region  = md("**Región / Continente**"),
    ni      = md("**nᵢ**"),
    hi_pct  = md("**(%)** "),
    hi_prop = md("**(proporción)**")
  ) %>%
  tab_spanner(label = md("**hᵢ**"), columns = c(hi_pct, hi_prop)) %>%
  fmt_number(columns = ni,      decimals = 0, use_seps = TRUE) %>%
  fmt_number(columns = hi_pct,  decimals = 2) %>%
  fmt_number(columns = hi_prop, decimals = 4) %>%
  grand_summary_rows(
    columns = c(ni, hi_pct, hi_prop),
    fns = list(label = "Total", fn = "sum"),
    fmt = list(
      ~ fmt_number(., columns = ni,      decimals = 0, use_seps = TRUE),
      ~ fmt_number(., columns = hi_pct,  decimals = 2),
      ~ fmt_number(., columns = hi_prop, decimals = 4)
    )
  ) %>%
  tab_source_note("Autor: Grupo 5") %>%
  tab_options(
    table.width                       = pct(75),
    table.font.size                   = px(13),
    table.font.names                  = "Arial",
    heading.title.font.size           = px(15),
    heading.subtitle.font.size        = px(12),
    heading.align                     = "center",
    heading.background.color          = "#AAAAAA",
    column_labels.font.weight         = "bold",
    column_labels.background.color    = "#FFFFFF",
    column_labels.border.top.color    = "#AAAAAA",
    column_labels.border.bottom.color = "#AAAAAA",
    table.border.top.color            = "#AAAAAA",
    table.border.bottom.color         = "#AAAAAA"
  ) %>%
  tab_style(
    style     = cell_text(color = "white", weight = "bold"),
    locations = cells_title(groups = c("title", "subtitle"))
  ) %>%
  tab_style(
    style     = cell_text(weight = "bold"),
    locations = list(cells_column_labels(), cells_column_spanners(), cells_grand_summary())
  )
Tabla N. 2
Distribución de frecuencias por región geográfica — Subnational Unit
Región / Continente nᵢ
hᵢ
(%) (proporción)
1 América del Norte 4,430 83.93 0.8393
2 América del Sur 560 10.61 0.1061
3 Oceanía 171 3.24 0.0324
4 Asia 113 2.14 0.0214
5 América Central y Caribe 4 0.08 0.0008
Total 5,278 100.00 1.0000
Autor: Grupo 5

6.2 Gráfica de Barras por Región Geográfica

region_graf <- tabla_region %>%
  mutate(Region = fct_reorder(Region, ni))

ggplot(region_graf, aes(x = Region, y = ni, fill = Region)) +
  geom_col(width = 0.55, color = "white") +
  geom_text(aes(label = format(ni, big.mark = ",")),
            vjust = -0.4, size = 3.5, fontface = "bold") +
  scale_fill_brewer(palette = "Blues", direction = -1) +
  scale_y_continuous(labels = label_comma(),
                     expand = expansion(mult = c(0, 0.12))) +
  labs(title   = "Gráfica N. 4: Distribución de yacimientos por región geográfica",
       x = "Región / Continente", y = "Frecuencia Absoluta (nᵢ)",
       caption = pie_label) +
  tema_base +
  theme(legend.position = "none",
        axis.text.x = element_text(face = "bold", angle = 15, hjust = 1))

6.3 Diagrama Circular por Región Geográfica

region_pie <- tabla_region %>%
  mutate(Region = fct_reorder(Region, hi_pct),
         etiqueta = paste0(round(hi_pct, 2), "%"))

ggplot(region_pie, aes(x = "", y = hi_pct, fill = Region)) +
  geom_col(width = 1, color = "white") +
  geom_text(aes(label = etiqueta),
            position = position_stack(vjust = 0.5),
            size = 4, fontface = "bold") +
  coord_polar(theta = "y") +
  scale_fill_brewer(palette = "Blues", direction = -1) +
  labs(title   = "Gráfica N. 5: Distribución porcentual por región geográfica",
       fill    = "Región / Continente",
       caption = pie_label) +
  theme_void(base_size = 12) +
  theme(
    plot.title      = element_text(face = "bold", size = 13, hjust = 0.5),
    plot.caption    = element_text(color = "#888888", size = 9, hjust = 0.5),
    legend.position = "right",
    legend.title    = element_text(face = "bold", size = 10),
    plot.background = element_rect(fill = "white", color = NA)
  )


7 Indicadores Estadísticos

La variable Subnational Unit (Province/State) es cualitativa nominal. Para este tipo de variable, el único indicador de tendencia central aplicable es la moda.

moda <- tabla_freq$UnidadSubnacional[which.max(tabla_freq$ni)]
moda_n <- max(tabla_freq$ni)
moda_pct <- round(tabla_freq$hi_pct[which.max(tabla_freq$ni)], 2)

data.frame(
  "Variable"        = "Subnational Unit (Province/State)",
  "Rango"           = paste0("D={", k, " categorías: provincias/estados a nivel mundial}"),
  "Media (X)"       = "-",
  "Mediana (Me)"    = "-",
  "Moda (Mo)"       = moda,
  "Varianza (V)"    = "-",
  "Desv. Est. (Sd)" = "-",
  "C.V. (%)"        = "-",
  "Asimetría (As)"  = "-",
  "Curtosis (K)"    = "-",
  check.names = FALSE
) %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°2 de Conclusiones — Unidad Subnacional (Provincia/Estado) en yacimientos de petróleo y gas**")
  ) %>%
  tab_source_note("Autor: Grupo 5") %>%
  tab_options(
    table.width                       = pct(100),
    table.font.size                   = px(12),
    table.font.names                  = "Arial",
    heading.align                     = "center",
    heading.title.font.size           = px(13),
    heading.background.color          = "#AAAAAA",
    heading.border.bottom.color       = "#AAAAAA",
    column_labels.font.weight         = "normal",
    column_labels.background.color    = "#FFFFFF",
    column_labels.border.top.color    = "#CCCCCC",
    column_labels.border.top.width    = px(1),
    column_labels.border.bottom.color = "#CCCCCC",
    column_labels.border.bottom.width = px(1),
    table_body.border.bottom.color    = "#CCCCCC",
    table_body.border.bottom.width    = px(1),
    table.border.top.color            = "#AAAAAA",
    table.border.top.width            = px(1),
    table.border.bottom.color         = "#AAAAAA",
    table.border.bottom.width         = px(1),
    source_notes.font.size            = px(11),
    source_notes.border.lr.color      = "transparent",
    data_row.padding                  = px(5)
  ) %>%
  tab_style(
    style     = cell_text(color = "white", weight = "bold"),
    locations = cells_title(groups = "title")
  ) %>%
  tab_style(
    style     = cell_text(color = "#333333", align = "center"),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style     = cell_text(color = "#333333", align = "center"),
    locations = cells_body(columns = c("Media (X)", "Mediana (Me)", "Moda (Mo)",
                                       "Varianza (V)", "Desv. Est. (Sd)",
                                       "C.V. (%)", "Asimetría (As)", "Curtosis (K)"))
  )
Tabla N°2 de Conclusiones — Unidad Subnacional (Provincia/Estado) en yacimientos de petróleo y gas
Variable Rango Media (X) Mediana (Me) Moda (Mo) Varianza (V) Desv. Est. (Sd) C.V. (%) Asimetría (As) Curtosis (K)
Subnational Unit (Province/State) D={103 categorías: provincias/estados a nivel mundial} - - Texas - - - - -
Autor: Grupo 5

8 Conclusiones

La variable “unidad subnacional (provincia/estado)” tiene como valor más frecuente “Texas”, con una participación destacada en la muestra