0.- Librerias

library(readr)
library(dplyr)
library(knitr)
library(kableExtra)
library(ggplot2)
library(stringr)
library(scales)

1.- Leer datos

setwd("C:/Users/CESAR/Downloads/proyecto x")
variables <- read.csv("C:/Users/CESAR/Downloads/proyecto x/GlobalweatherRepository.csv", header = TRUE, sep = (","), dec = ("."))

2.- Depuración y selección de la variable

Depuración

variables <- na.omit(variables)

Selección

Z_horaria <- variables$timezone

3.- Frecuencias

Tabla 1

Tabla_Z_horaria <- table(Z_horaria) 
ni_Z_horaria <- as.vector(Tabla_Z_horaria) 
hi_Z_horaria <- round((ni_Z_horaria / sum(ni_Z_horaria)) * 100, 2)

Tabla simplifcada

TDF_ciudades <- data.frame(
  Zona_horaria = as.character(variables$timezone),
  stringsAsFactors = FALSE
)

TDF_ciudades$Continente_Raw <- sub("/.*", "", TDF_ciudades$Zona_horaria)

TDF_ciudades <- TDF_ciudades %>%
  mutate(Continente = case_when(
    Continente_Raw %in% c("Africa", "Africa") ~ "África",
    Continente_Raw %in% c("America", "US", "Canada") ~ "América",
    Continente_Raw %in% c("Asia") ~ "Asia",
    Continente_Raw %in% c("Europe") ~ "Europa",
    Continente_Raw %in% c("Australia", "Pacific", "Oceania") ~ "Oceanía",
    TRUE ~ "Otros" 
  ))

TDF_continente_base <- TDF_ciudades %>%
  group_by(Continente) %>%
  summarise(
    ni = n(),                                     
    hi = round((n() / nrow(TDF_ciudades)) * 100, 2),
    .groups = "drop"
  ) %>%
  arrange(desc(ni))

4.- Tabla de frecuencia

Tabla 1

TDF_Z_horaria_Base <- data.frame(
  Zona_horaria = names(Tabla_Z_horaria), 
  ni = ni_Z_horaria,
  hi = hi_Z_horaria
)
sumatoria_Z_horaria <- data.frame(
  Zona_horaria = "TOTAL", 
  ni = sum(ni_Z_horaria), 
  hi = "100"
)
TDF_Z_horaria_Suma <- rbind(TDF_Z_horaria_Base, sumatoria_Z_horaria)
colnames(TDF_Z_horaria_Suma) <- c("Zona horaria", "Frecuencia Absoluta (ni)", "Frecuencia Relativa (hi %)")

kable(TDF_Z_horaria_Suma, align = "c",
      caption = "Tabla N°1: Distribución de frecuencia de ubicación geográfica y el huso horario oficial de cada capital (estándar IANA) de capitales del mundo para el análisis meteorológico del periodo mayo del 2024 a mayo del 2026") |> 
  kable_styling(full_widt = TRUE, position = "center",
                bootstrap_options = c("striped", "hover", "condensed", "responsive")) |> 
  row_spec(0, bold = TRUE, color = "white", background = "#2C3E50") |> 
  row_spec(nrow(TDF_Z_horaria_Suma), bold = TRUE, background = "#EAEDED") |> 
  footnote(general = "Fuente:GlobalWeatherRepository, https://www.kaggle.com/datasets/nelgiriyewithana/global-weather-repository\n.",
           general_title = "Grupo 2: ",
           footnote_as_chunk = TRUE,
           title_format = c("italic", "bold")
  )
Tabla N°1: Distribución de frecuencia de ubicación geográfica y el huso horario oficial de cada capital (estándar IANA) de capitales del mundo para el análisis meteorológico del periodo mayo del 2024 a mayo del 2026
Zona horaria Frecuencia Absoluta (ni) Frecuencia Relativa (hi %)
Africa/Abidjan 267 0.19
Africa/Accra 730 0.52
Africa/Addis_Ababa 727 0.51
Africa/Algiers 726 0.51
Africa/Asmara 729 0.51
Africa/Bamako 727 0.51
Africa/Bangui 389 0.27
Africa/Banjul 725 0.51
Africa/Bissau 727 0.51
Africa/Blantyre 728 0.51
Africa/Brazzaville 1113 0.79
Africa/Bujumbura 729 0.51
Africa/Cairo 726 0.51
Africa/Casablanca 727 0.51
Africa/Conakry 727 0.51
Africa/Dakar 729 0.51
Africa/Dar_es_Salaam 727 0.51
Africa/Djibouti 726 0.51
Africa/Douala 1117 0.79
Africa/Freetown 725 0.51
Africa/Gaborone 728 0.51
Africa/Harare 726 0.51
Africa/Johannesburg 1117 0.79
Africa/Kampala 728 0.51
Africa/Khartoum 1452 1.02
Africa/Kigali 728 0.51
Africa/Kinshasa 677 0.48
Africa/Lagos 728 0.51
Africa/Libreville 727 0.51
Africa/Luanda 728 0.51
Africa/Lusaka 728 0.51
Africa/Malabo 729 0.51
Africa/Maputo 728 0.51
Africa/Maseru 337 0.24
Africa/Mbabane 726 0.51
Africa/Mogadishu 726 0.51
Africa/Monrovia 727 0.51
Africa/Nairobi 729 0.51
Africa/Ndjamena 339 0.24
Africa/Niamey 728 0.51
Africa/Nouakchott 727 0.51
Africa/Ouagadougou 728 0.51
Africa/Porto-Novo 727 0.51
Africa/Tripoli 1 0
Africa/Tunis 726 0.51
Africa/Windhoek 728 0.51
America/Antigua 724 0.51
America/Argentina/Buenos_Aires 726 0.51
America/Argentina/Cordoba 352 0.25
America/Asuncion 350 0.25
America/Barbados 726 0.51
America/Belize 723 0.51
America/Bogota 2 0
America/Caracas 726 0.51
America/Chicago 1 0
America/Costa_Rica 721 0.51
America/Denver 1 0
America/Dominica 724 0.51
America/El_Salvador 721 0.51
America/Grenada 723 0.51
America/Guatemala 722 0.51
America/Guayaquil 723 0.51
America/Guyana 724 0.51
America/Havana 724 0.51
America/Hermosillo 1 0
America/Jamaica 725 0.51
America/La_Paz 1470 1.04
America/Lima 723 0.51
America/Los_Angeles 719 0.51
America/Managua 722 0.51
America/Manaus 723 0.51
America/Mexico_City 723 0.51
America/Montevideo 727 0.51
America/Nassau 723 0.51
America/New_York 1 0
America/Panama 725 0.51
America/Paramaribo 725 0.51
America/Port-au-Prince 725 0.51
America/Port_of_Spain 725 0.51
America/Santiago 725 0.51
America/Santo_Domingo 725 0.51
America/Sao_Paulo 1 0
America/St_Kitts 726 0.51
America/St_Lucia 727 0.51
America/St_Vincent 726 0.51
America/Tegucigalpa 723 0.51
America/Toronto 726 0.51
Asia/Aden 729 0.51
Asia/Almaty 727 0.51
Asia/Amman 729 0.51
Asia/Ashgabat 728 0.51
Asia/Baghdad 729 0.51
Asia/Bahrain 728 0.51
Asia/Baku 727 0.51
Asia/Bangkok 2595 1.83
Asia/Beirut 727 0.51
Asia/Bishkek 727 0.51
Asia/Brunei 726 0.51
Asia/Colombo 728 0.51
Asia/Damascus 727 0.51
Asia/Dhaka 727 0.51
Asia/Dili 725 0.51
Asia/Dubai 728 0.51
Asia/Dushanbe 726 0.51
Asia/Famagusta 389 0.27
Asia/Ho_Chi_Minh 43 0.03
Asia/Jakarta 1457 1.03
Asia/Jerusalem 727 0.51
Asia/Kabul 729 0.51
Asia/Karachi 726 0.51
Asia/Kathmandu 727 0.51
Asia/Kolkata 727 0.51
Asia/Krasnoyarsk 41 0.03
Asia/Kuala_Lumpur 727 0.51
Asia/Kuching 1 0
Asia/Kuwait 727 0.51
Asia/Manila 727 0.51
Asia/Muscat 728 0.51
Asia/Nicosia 339 0.24
Asia/Phnom_Penh 727 0.51
Asia/Pyongyang 726 0.51
Asia/Qatar 726 0.51
Asia/Riyadh 728 0.51
Asia/Seoul 727 0.51
Asia/Shanghai 726 0.51
Asia/Singapore 728 0.51
Asia/Tashkent 729 0.51
Asia/Tbilisi 725 0.51
Asia/Tehran 1412 1
Asia/Thimphu 726 0.51
Asia/Tokyo 729 0.51
Asia/Ulaanbaatar 727 0.51
Asia/Yangon 728 0.51
Asia/Yerevan 728 0.51
Atlantic/Cape_Verde 728 0.51
Atlantic/Reykjavik 726 0.51
Australia/Melbourne 1 0
Australia/Sydney 727 0.51
Europe/Amsterdam 728 0.51
Europe/Andorra 728 0.51
Europe/Athens 724 0.51
Europe/Belgrade 729 0.51
Europe/Berlin 728 0.51
Europe/Bratislava 728 0.51
Europe/Brussels 1365 0.96
Europe/Bucharest 762 0.54
Europe/Budapest 810 0.57
Europe/Copenhagen 727 0.51
Europe/Dublin 726 0.51
Europe/Helsinki 728 0.51
Europe/Istanbul 1454 1.03
Europe/Kiev 633 0.45
Europe/Kyiv 96 0.07
Europe/Lisbon 727 0.51
Europe/Ljubljana 728 0.51
Europe/London 726 0.51
Europe/Luxembourg 726 0.51
Europe/Madrid 728 0.51
Europe/Malta 729 0.51
Europe/Minsk 727 0.51
Europe/Monaco 388 0.27
Europe/Moscow 741 0.52
Europe/Oslo 726 0.51
Europe/Paris 1064 0.75
Europe/Podgorica 726 0.51
Europe/Prague 726 0.51
Europe/Riga 727 0.51
Europe/Rome 1505 1.06
Europe/San_Marino 339 0.24
Europe/Sarajevo 728 0.51
Europe/Skopje 723 0.51
Europe/Sofia 1638 1.16
Europe/Stockholm 727 0.51
Europe/Tallinn 727 0.51
Europe/Tirane 727 0.51
Europe/Vaduz 389 0.27
Europe/Vatican 339 0.24
Europe/Vienna 728 0.51
Europe/Vilnius 727 0.51
Europe/Warsaw 731 0.52
Europe/Zagreb 725 0.51
Europe/Zurich 1114 0.79
Indian/Antananarivo 1186 0.84
Indian/Comoro 727 0.51
Indian/Mahe 726 0.51
Indian/Maldives 725 0.51
Indian/Mauritius 727 0.51
Pacific/Apia 722 0.51
Pacific/Auckland 727 0.51
Pacific/Efate 728 0.51
Pacific/Fiji 729 0.51
Pacific/Funafuti 728 0.51
Pacific/Guadalcanal 728 0.51
Pacific/Majuro 728 0.51
Pacific/Palau 728 0.51
Pacific/Pohnpei 726 0.51
Pacific/Port_Moresby 728 0.51
Pacific/Tarawa 727 0.51
Pacific/Tongatapu 726 0.51
TOTAL 141703 100
Grupo 2: Fuente:GlobalWeatherRepository, https://www.kaggle.com/datasets/nelgiriyewithana/global-weather-repository
.

Devido que que los datos de esta variable son muy extensos procedemos hacer la tabla simplificada

Tabla simplificada

sumatoria_total <- data.frame(
  Continente = "TOTAL",
  ni = sum(TDF_continente_base$ni, na.rm = TRUE),
  hi = sum(TDF_continente_base$hi, na.rm = TRUE)
)

# 6. Unimos la estructura de la tabla con su respectiva fila de totales
TDF_Final <- rbind(TDF_continente_base, sumatoria_total)

# 7. Asignamos los nombres de las columnas en formato formal para el Grupo 2
colnames(TDF_Final) <- c(
  "Continente", 
  "Frecuencia Absoluta (ni)", 
  "Frecuencia Relativa (hi %)"
)

# 8. Generación y estilizado de tu tabla visual con kableExtra
kable(TDF_Final, align = "c", row.names = FALSE,
      caption = "Tabla N°1: Distribución de frecuencia de ubicación geográfica y el huso horario oficial de cada capital (estándar IANA) de capitales del mundo para el análisis meteorológico del periodo mayo del 2024 a mayo del 2026") %>%
  kable_styling(full_width = TRUE, position = "center",
                bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#2C3E50") %>%
  row_spec(nrow(TDF_Final), bold = TRUE, background = "#EAEDED") %>%
  footnote(general = "Fuente: Global Weather Repository ",
           general_title = "Grupo 2: ",
           footnote_as_chunk = TRUE,
           title_format = c("italic", "bold"))
Tabla N°1: Distribución de frecuencia de ubicación geográfica y el huso horario oficial de cada capital (estándar IANA) de capitales del mundo para el análisis meteorológico del periodo mayo del 2024 a mayo del 2026
Continente Frecuencia Absoluta (ni) Frecuencia Relativa (hi %)
Asia 34640 24.45
Europa 33722 23.80
África 32994 23.28
América 25349 17.89
Oceanía 9453 6.67
Otros 5545 3.91
TOTAL 141703 100.00
Grupo 2: Fuente: Global Weather Repository

5.-Gráficos

5.1.- Diagrama de barras, ubicación geográfica y el huso horario oficial de cada capital (estándar IANA)

datos_para_graficos <- TDF_Final %>%
  filter(Continente != "TOTAL")

datos_para_graficos$Continente <- factor(
  datos_para_graficos$Continente, 
  levels = datos_para_graficos$Continente
)

grafico_barras_ni <- ggplot(datos_para_graficos, aes(x = Continente, y = `Frecuencia Absoluta (ni)`, fill = Continente)) +
  geom_bar(stat = "identity", color = "black", width = 0.6) +
  geom_text(aes(label = scales::comma(`Frecuencia Absoluta (ni)`)), vjust = -0.5, fontface = "bold", size = 3.5) +
  scale_fill_brewer(palette = "Set2") +
  # >>> AQUÍ MODIFICAS EL EJE Y ABSOLUTO <<<
  scale_y_continuous(limits = c(0, 40000), breaks = seq(0, 40000, by = 5000), labels = scales::comma) +
  labs(
    title = "Gráfica N.1: Distribución de Frecuencia absoluta segun los estandares de la IANA",
    subtitle = "Periodo: Mayo 2024 - Mayo 2026",
    x = "Continente / Región",
    y = "Frecuencia Absoluta (ni)",
    caption = "Fuente: Global Weather Repository"
  ) +
  theme_minimal() +
  theme(legend.position = "none", 
        plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5, face = "italic"))
print(grafico_barras_ni)

5.2.- Diagrama de barras porcentual, ubicación geográfica y el huso horario oficial de cada capital (estándar IANA)

grafico_barras_hi <- ggplot(datos_para_graficos, aes(x = Continente, y = `Frecuencia Relativa (hi %)`, fill = Continente)) +
  geom_bar(stat = "identity", color = "black", width = 0.6) +
  geom_text(aes(label = paste0(`Frecuencia Relativa (hi %)`, "%")), vjust = -0.5, fontface = "bold", size = 3.5) +
  scale_fill_brewer(palette = "Set2") +
  # >>> AQUÍ MODIFICAS EL EJE Y PORCENTUAL <<<
  scale_y_continuous(limits = c(0, 30), breaks = seq(0, 30, by = 5), labels = function(x) paste0(x, "%")) +
  labs(
    title = "Gráfica N.2: Distribución de Frecuencias relativas segun los estandares de la IANA",
    subtitle = "Periodo: Mayo 2024 - Mayo 2026",
    x = "Continente / Región",
    y = "Porcentaje (hi %)",
    caption = "Fuente: Global Weather Repository"
  ) +
  theme_minimal() +
  theme(legend.position = "none", 
        plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5, face = "italic")) # CORREGIDO AQUÍ

print(grafico_barras_hi)

5.3.- Diagrama de barras general (ni)

grafico_barras_ni <- ggplot(datos_para_graficos, aes(x = Continente, y = `Frecuencia Absoluta (ni)`, fill = Continente)) +
  geom_bar(stat = "identity", color = "black", width = 0.6) +
  geom_text(aes(label = scales::comma(`Frecuencia Absoluta (ni)`)), vjust = -0.5, fontface = "bold", size = 3.5) +
  scale_fill_brewer(palette = "Set2") +
  # >>> AQUÍ MODIFICAS EL EJE Y ABSOLUTO <<<
  scale_y_continuous(limits = c(0, 140000), breaks = seq(0, 140000, by = 20000), labels = scales::comma) +
  labs(
    title = "Gráfica N.3: Distribución de Frecuencias Absolutas por
    Continente con relación al tamaño muestral",
    subtitle = "Periodo: Mayo 2024 - Mayo 2026",
    x = "Continente / Región",
    y = "Frecuencia Absoluta (ni)",
    caption = "Fuente: Global Weather Repository"
  ) +
  theme_minimal() +
  theme(legend.position = "none", 
        plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5, face = "italic"))

print(grafico_barras_ni)

5.4.- Diagrama de barras general (hi)

grafico_barras_hi <- ggplot(datos_para_graficos, aes(x = Continente, y = `Frecuencia Relativa (hi %)`, fill = Continente)) +
  geom_bar(stat = "identity", color = "black", width = 0.6) +
  geom_text(aes(label = paste0(`Frecuencia Relativa (hi %)`, "%")), vjust = -0.5, fontface = "bold", size = 3.5) +
  scale_fill_brewer(palette = "Set2") +
  # >>> AQUÍ MODIFICAS EL EJE Y PORCENTUAL <<<
  scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 20), labels = function(x) paste0(x, "%")) +
  labs(
    title = "Gráfica N.4: Distribución de Frecuencias Relativas por Continente
    con realción al 100%",
    subtitle = "Periodo: Mayo 2024 - Mayo 2026 | Grupo 2",
    x = "Continente / Región",
    y = "Porcentaje (hi %)",
    caption = "Fuente: Global Weather Repository"
  ) +
  theme_minimal() +
  theme(legend.position = "none", 
        plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5, face = "italic")) # CORREGIDO AQUÍ

print(grafico_barras_hi)

5.5.- Gráfica Circular

grafico_pastel <- ggplot(datos_para_graficos, aes(x = "", y = `Frecuencia Relativa (hi %)`, fill = Continente)) +
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar("y", start = 0) +
  geom_text(aes(label = paste0(`Frecuencia Relativa (hi %)`, "%")), 
            position = position_stack(vjust = 0.5), fontface = "bold", size = 3.5, color = "black") +
  scale_fill_brewer(palette = "Set2") +
  labs(
    title = "Gráfica N.5: Participación Porcentual por Continente",
    subtitle = "Análisis Meteorológico Global",
    x = NULL, y = NULL,
    caption = "Fuente: Global Weather Repository"
  ) +
  theme_void() +
  theme(plot.title = element_text(face = "bold", size = 13, hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5, face = "italic"), # CORREGIDO AQUÍ
        legend.title = element_text(face = "bold"))

print(grafico_pastel)

6.- Indicadores de frecuencia

datos_puros <- TDF_Final %>% filter(Continente != "TOTAL")
frecuencia_max <- max(datos_puros$`Frecuencia Absoluta (ni)`)
Mo_continente <- datos_puros$Continente[datos_puros$`Frecuencia Absoluta (ni)` == frecuencia_max]

tabla_indicadores <- data.frame(
  "Variable" = c("Zona Horaria "),
  "Rango" = c("-"),
  "X" = c("-"),
  "Me" = c("-"),
  "Mo" = c(Mo_continente),
  "V" = c("-"),
  "Sd" = c("-"),
  "Cv" = c("-"),
  "As" = c("-"),
  "K" = c("-"),
  "Valores Atípicos" = c("No presenta valores atípicos"),
  stringsAsFactors = FALSE
)

kable(tabla_indicadores, align = 'c', row.names = FALSE,
      caption = "Tabla N°3: Indicadores de frecuencia para la variable Zona Horaria") %>%
  kable_styling(full_width = TRUE, position = "center",
                bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#2C3E50") %>%
  footnote(general = "Fuente: GlobalWeatherRepository",
           general_title = "Grupo 2:",
           footnote_as_chunk = TRUE,
           title_format = c("italic", "bold")
           )
Tabla N°3: Indicadores de frecuencia para la variable Zona Horaria
Variable Rango X Me Mo V Sd Cv As K Valores.Atípicos
Zona Horaria
Asia
No presenta valores atípicos
Grupo 2: Fuente: GlobalWeatherRepository

7.- Conclusiones

el continente mas frecuente de la variable zona horaria es en Asia