0.- Librerias

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

1.- leer datos

setwd("C:/Users/CESAR/Downloads/proyecto x")
variables <- read_csv("GlobalweatherRepository.csv", show_col_types = TRUE)

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

Depuración

variables <- na.omit(variables)

Selección

Viento_NSEO <- variables$wind_direction

3.- Frecuencias

Tabla N.1

Tabla_Viento_NSEO <- table(Viento_NSEO) 
ni_Viento_NSEO <- as.vector(Tabla_Viento_NSEO) 
hi_Viento_NSEO <- round((ni_Viento_NSEO / sum(ni_Viento_NSEO)) * 100, 2)

Tabla simplificada

variables <- variables %>%
  mutate(Viento_Agrupado = case_when(
    wind_direction %in% c("N", "NNE", "NNW") ~ "Norte",
    wind_direction %in% c("E", "ENE", "ESE", "NE", "SE") ~ "Este",
    wind_direction %in% c("S", "SSE", "SSW") ~ "Sur",
    wind_direction %in% c("W", "WNW", "WSW", "NW", "SW") ~ "Oeste",
    TRUE ~ "Otro/Indefinido"
  ))

Tabla_Viento_NSEO <- table(variables$Viento_Agrupado)
ni_Viento_NSEO    <- as.vector(Tabla_Viento_NSEO)
hi_Viento_NSEO    <- round((ni_Viento_NSEO / sum(ni_Viento_NSEO)) * 100, 2)

4.- Tabla de frecuencias

Tabla N.1

Tabla_Viento_NSEO <- table(Viento_NSEO) 
ni_Viento_NSEO <- as.vector(Tabla_Viento_NSEO) 
hi_Viento_NSEO <- round((ni_Viento_NSEO / sum(ni_Viento_NSEO)) * 100, 2)
TDF_Viento_NSEO_Base <- data.frame(
  Viento_en_puntos_cardinales = names(Tabla_Viento_NSEO),
  ni = as.numeric(ni_Viento_NSEO),
  hi = as.numeric(hi_Viento_NSEO),
  stringsAsFactors = FALSE
)


sumatoria_Viento_NSEO <- data.frame(
  Viento_en_puntos_cardinales = "TOTAL",
  ni = sum(TDF_Viento_NSEO_Base$ni, na.rm = TRUE),
  hi = 100
)

TDF_Viento_NSEO_Suma <- rbind(TDF_Viento_NSEO_Base, sumatoria_Viento_NSEO)

colnames(TDF_Viento_NSEO_Suma) <- c(
  "Viento en puntos cardinales", 
  "Frecuencia Absoluta", 
  "Frecuencia Relativa"
)

kable(TDF_Viento_NSEO_Suma, align = "c", row.names = FALSE,
      caption = "Tabla N1: Distribucion de frecuencia para la variable Condicion Climatica") %>%
  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_Viento_NSEO_Suma), bold = TRUE, background = "#EAEDED") %>%
  footnote(general = "Fuente: GlobalWeatherRepository. Grupo 2.",
           footnote_as_chunk = TRUE)
Tabla N1: Distribucion de frecuencia para la variable Condicion Climatica
Viento en puntos cardinales Frecuencia Absoluta Frecuencia Relativa
E 13473 9.51
ENE 11749 8.29
ESE 9823 6.93
N 9479 6.69
NE 8239 5.81
NNE 9313 6.57
NNW 8103 5.72
NW 7260 5.12
S 8665 6.11
SE 7565 5.34
SSE 8266 5.83
SSW 8362 5.90
SW 8351 5.89
W 7383 5.21
WNW 7365 5.20
WSW 8307 5.86
TOTAL 141703 100.00
Note: Fuente: GlobalWeatherRepository. Grupo 2.

La forma más eficiente de agrupar estas subdirecciones (como ENE o ESE) es asignarlas al punto cardinal principal más cercano (Norte, Sur, Este, Oeste) a continuación la tabla simplificada.

Tabla simplificada

variables <- variables %>%
  mutate(Viento_Agrupado = case_when(
    wind_direction %in% c("N", "NNE", "NNW") ~ "Norte",
    wind_direction %in% c("E", "ENE", "ESE", "NE", "SE") ~ "Este",
    wind_direction %in% c("S", "SSE", "SSW") ~ "Sur",
    wind_direction %in% c("W", "WNW", "WSW", "NW", "SW") ~ "Oeste",
    TRUE ~ "Otro/Indefinido"
  ))
Tabla_Viento_NSEO <- table(variables$Viento_Agrupado)
ni_Viento_NSEO    <- as.vector(Tabla_Viento_NSEO)
hi_Viento_NSEO    <- round((ni_Viento_NSEO / sum(ni_Viento_NSEO)) * 100, 2)

TDF_Viento_NSEO_Base <- data.frame(
  Viento_en_puntos_cardinales = names(Tabla_Viento_NSEO),
  Frecuencia_Absoluta         = ni_Viento_NSEO,
  Frecuencia_Relativa         = hi_Viento_NSEO,
  stringsAsFactors            = FALSE
)
sumatoria_viento_NSEO <- data.frame(
  Viento_en_puntos_cardinales = "TOTAL",
  Frecuencia_Absoluta         = sum(TDF_Viento_NSEO_Base$Frecuencia_Absoluta, na.rm = TRUE),
  Frecuencia_Relativa         = sum(TDF_Viento_NSEO_Base$Frecuencia_Relativa, na.rm = TRUE)
)
TDF_Viento_NSEO_Suma <- rbind(TDF_Viento_NSEO_Base, sumatoria_viento_NSEO)

colnames(TDF_Viento_NSEO_Suma) <- c("Viento en puntos cardinales", "Frecuencia Absoluta", "Frecuencia Relativa")

kable(TDF_Viento_NSEO_Suma, align = "c", row.names = FALSE,
      caption = "Tabla N1: Distribución de frecuencia para la variable Condición Climática (Agrupada)") %>%
  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_Viento_NSEO_Suma), bold = TRUE, background = "#EAEDED") %>%
  footnote(general = "Fuente: GlobalweatherRepository. Grupo 2.",
           footnote_as_chunk = TRUE)
Tabla N1: Distribución de frecuencia para la variable Condición Climática (Agrupada)
Viento en puntos cardinales Frecuencia Absoluta Frecuencia Relativa
Este 50849 35.88
Norte 26895 18.98
Oeste 38666 27.29
Sur 25293 17.85
TOTAL 141703 100.00
Note: Fuente: GlobalweatherRepository. Grupo 2.

5.- Gráficas

5.1.- Diagrama de barras ni

grafico_barras_ni <- ggplot(TDF_Viento_NSEO_Base, aes(x = reorder(Viento_en_puntos_cardinales, -Frecuencia_Absoluta), y = Frecuencia_Absoluta, fill = Viento_en_puntos_cardinales)) +
  geom_bar(stat = "identity", color = "black", width = 0.6) +
  geom_text(aes(label = scales::comma(Frecuencia_Absoluta)), vjust = -0.5, fontface = "bold", size = 3.5) +
  scale_fill_brewer(palette = "Set2") +
  # Modifica aquí los límites y saltos del eje Y para ni
  scale_y_continuous(limits = c(0, 60000), breaks = seq(0, 60000, by = 10000), labels = scales::comma) +
  labs(
    title = "Grafica N.1: Distribución de Frecuencias Absolutas por Dirección 
    del Viento para el análisis meteorológico en capitales del mundo",
    subtitle = "Periodo: Mayo 2024 - Mayo 2026",
    x = "Dirección del Viento",
    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"),
    axis.text.x = element_text(angle = 45, hjust = 1, size = 9, face = "bold")
  )

print(grafico_barras_ni)

5.2.- Diagrama de barras hi

grafico_barras_hi <- ggplot(TDF_Viento_NSEO_Base, aes(x = reorder(Viento_en_puntos_cardinales, -Frecuencia_Relativa), y = Frecuencia_Relativa, fill = Viento_en_puntos_cardinales)) +
  geom_bar(stat = "identity", color = "black", width = 0.6) +
  geom_text(aes(label = paste0(Frecuencia_Relativa, "%")), vjust = -0.5, fontface = "bold", size = 3.5) +
  scale_fill_brewer(palette = "Set2") +
  # Modifica aquí los límites y saltos del eje Y para el porcentaje (%)
  scale_y_continuous(limits = c(0, 40), breaks = seq(0, 40, by = 10), labels = function(x) paste0(x, "%")) +
  labs(
    title = "Gráfica N.2: Distribución de Frecuencias Relativas por Dirección 
    del Viento para el análisis meteorológico en capitales del mundo",
    subtitle = "Periodo: Mayo 2024 - Mayo 2026",
    x = "Dirección del Viento",
    y = "Frecuencia Relativa (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"),
    axis.text.x = element_text(angle = 45, hjust = 1, size = 9, face = "bold")
  )

print(grafico_barras_hi)

5.3.- Diagrama de barras ni con respecto al tamaño muestral

grafico_barras_ni <- ggplot(TDF_Viento_NSEO_Base, aes(x = reorder(Viento_en_puntos_cardinales, -Frecuencia_Absoluta), y = Frecuencia_Absoluta, fill = Viento_en_puntos_cardinales)) +
  geom_bar(stat = "identity", color = "black", width = 0.6) +
  geom_text(aes(label = scales::comma(Frecuencia_Absoluta)), vjust = -0.5, fontface = "bold", size = 3.5) +
  scale_fill_brewer(palette = "Set2") +
  # Modifica aquí los límites y saltos del eje Y para ni
  scale_y_continuous(limits = c(0, 140000), breaks = seq(0, 140000, by = 20000), labels = scales::comma) +
  labs(
    title = "Grafica N.3: Distribución de Frecuencias Absolutas por Dirección 
    del Viento con respeto al tamaño muestral para el análisis meteorológico
    en capitales del mundo",
    subtitle = "Periodo: Mayo 2024 - Mayo 2026",
    x = "Dirección del Viento",
    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"),
    axis.text.x = element_text(angle = 45, hjust = 1, size = 9, face = "bold")
  )

print(grafico_barras_ni)

5.4.- Diagrama de barras con respecto al 100%

grafico_barras_hi <- ggplot(TDF_Viento_NSEO_Base, aes(x = reorder(Viento_en_puntos_cardinales, -Frecuencia_Relativa), y = Frecuencia_Relativa, fill = Viento_en_puntos_cardinales)) +
  geom_bar(stat = "identity", color = "black", width = 0.6) +
  geom_text(aes(label = paste0(Frecuencia_Relativa, "%")), vjust = -0.5, fontface = "bold", size = 3.5) +
  scale_fill_brewer(palette = "Set2") +
  # Modifica aquí los límites y saltos del eje Y para el porcentaje (%)
  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 Dirección
    del Viento con respeto al 100% para el análisis meteorológico en capitales
    del mundo",
    subtitle = "Periodo: Mayo 2024 - Mayo 2026",
    x = "Dirección del Viento",
    y = "Frecuencia Relativa (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"),
    axis.text.x = element_text(angle = 45, hjust = 1, size = 9, face = "bold")
  )

print(grafico_barras_hi)

5.5.- Diagrama Circular

grafico_circular_hi <- ggplot(TDF_Viento_NSEO_Base, aes(x = "", y = Frecuencia_Relativa, fill = Viento_en_puntos_cardinales)) +
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar("y", start = 0) +
  geom_text(aes(label = paste0(Frecuencia_Relativa, "%")), 
            position = position_stack(vjust = 0.5), 
            fontface = "bold", size = 4.5, color = "black") +

  scale_fill_brewer(palette = "Set2") +
  labs(
    title = "Gráfica N.5: Distribución Porcentual por Dirección del Viento 
    para el análisis meteorológico en capitales del mundo",
    subtitle = "Periodo: Mayo 2024 - Mayo 2026",
    fill = "Dirección del Viento", # Título de la leyenda
    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"),
    legend.position = "right", 
    legend.title = element_text(face = "bold", size = 10),
    legend.text = element_text(size = 9)
  )
print(grafico_circular_hi)

6.- Indicadores de frecuencia

datos_Viento_NSEO <- TDF_Viento_NSEO_Suma %>%
  filter(`Viento en puntos cardinales` != "TOTAL")
frecuencia_Viento_NSEO <- max(datos_Viento_NSEO$`Frecuencia Absoluta`)

Mo_Viento_NSEO <- datos_Viento_NSEO$`Viento en puntos cardinales`[datos_Viento_NSEO$`Frecuencia Absoluta` == frecuencia_Viento_NSEO]

tabla_Viento_NSEO  <- data.frame(
  "Variable" = "Viento en puntos cardinales",
  "Rango" = "-",
  "X" = "-",
  "Me" = "-",
  "Mo" = Mo_Viento_NSEO,       
  "V" = "-",
  "Sd" = "-",
  "Cv" = "-",
  "As" = "-",
  "K" = "-",
  "valores Atípicos" = "No presenta valores atípicos",
  stringsAsFactors = FALSE,
  check.names = FALSE
)

kable(tabla_Viento_NSEO, align = "c", row.names = FALSE,
      caption = "Tabla N°3: Indicadores de frecuencia para la variable Dirección del Viento para el análisis meteorológico en capitales del mundo") %>%
  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 = "Nota: ",
           footnote_as_chunk = TRUE,
           title_format = c("italic", "bold"))
Tabla N°3: Indicadores de frecuencia para la variable Dirección del Viento para el análisis meteorológico en capitales del mundo
Variable Rango X Me Mo V Sd Cv As K valores Atípicos
Viento en puntos cardinales
Este
No presenta valores atípicos
Nota: Fuente: GlobalweatherRepository.

7.- Conclusiones

la variable vientos en puntos cardinales registra una mayor moda en el Este