1 Configuración y Carga de Datos

##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: MARTIN SARMIENTO ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####


#### VARIABLE DIRECCIÓN DEL VIENTO PREDOMINANTE ####
## DATASET ##
setwd("~/R/DT_WIND")
# Cargar dataset
Datos <- read.csv("DataSet_prov.csv", sep = ";", fileEncoding = "latin1")
# Estructura de los datos
str(Datos)
## 'data.frame':    5075 obs. of  30 variables:
##  $ FID_                  : int  0 2 3 4 5 6 10 11 12 13 ...
##  $ OBJECTID              : int  127 129 130 131 132 133 137 138 139 140 ...
##  $ code                  : chr  "00127-ARG-P" "00129-ARG-G" "00130-ARG-P" "00131-ARG-P" ...
##  $ plant_name            : chr  "Aconcagua solar farm" "Altiplano 200 Solar Power Plant" "Altiplano 200 Solar Power Plant" "Anchoris solar farm" ...
##  $ country               : chr  "Argentina" "Argentina" "Argentina" "Argentina" ...
##  $ operational_status    : chr  "announced" "operating" "operating" "construction" ...
##  $ longitude             : chr  "-68,8713" "-66,895798" "-66,926102" "-68,915001" ...
##  $ latitude              : chr  "-32,998501" "-24,1392" "-24,073999" "-33,330101" ...
##  $ elevation             : int  929 4000 4000 937 865 858 570 1612 665 3989 ...
##  $ area                  : chr  "250,337006" "4397290" "5774,399902" "645,163025" ...
##  $ size                  : chr  "Small" "Big" "Small" "Small" ...
##  $ slope                 : chr  "0,574179" "1,60257" "6,24265" "0,902748" ...
##  $ slope_type            : chr  "Plano o casi plano" "Plano o casi plano" "Moderado" "Plano o casi plano" ...
##  $ curvature             : chr  "0,000795" "-0,002781" "-0,043699" "0,002781" ...
##  $ curvature_type        : chr  "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies cóncavas / Valles" "Superficies planas o intermedias" ...
##  $ aspect                : chr  "55,124672" "188,707367" "270,913513" "108,434952" ...
##  $ aspect_type           : chr  "Northeast" "South" "West" "East" ...
##  $ dist_to_road          : chr  "127,2827045" "56014,95403" "52696,78572" "335,9280031" ...
##  $ ambient_temperature   : chr  "12,6" "6,8" "6,8" "13,1" ...
##  $ ghi                   : chr  "6,11" "8,012" "7,878" "6,119" ...
##  $ humidity              : chr  "53,74" "53,74" "53,74" "53,74" ...
##  $ wind_speed            : chr  "3,7789" "7,02062" "8,32836" "3,87037" ...
##  $ wind_direction        : chr  "55,099998" "55,099998" "55,099998" "55,099998" ...
##  $ dt_wind               : chr  "Northeast" "Northeast" "Northeast" "Northeast" ...
##  $ solar_aptitude        : chr  "0,746197" "0,8" "0,726996" "0,595309" ...
##  $ solar_aptitude_rounded: int  7 8 7 6 7 7 7 8 7 8 ...
##  $ solar_aptittude_class : chr  "Alta" "Alta" "Alta" "Media" ...
##  $ capacity              : chr  "25" "101" "107" "180" ...
##  $ optimal_tilt          : int  31 26 26 31 33 30 31 29 31 27 ...
##  $ pv_potential          : chr  "4,983" "6,389" "6,392" "4,969" ...
# Cargamos las librerias
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(gt)

2 Extracción y Conteo Inicial

# Extraer variable
Wind <- Datos$dt_wind
# EDAvariable nominal
TDF_wind <- table(Wind)

tabla_wind <- as.data.frame(TDF_wind)
hi <- tabla_wind$Freq/sum(tabla_wind$Freq)
hi_porc <- hi*100
sum(hi_porc)
## [1] 100
tabla_WIND <- data.frame(tabla_wind, hi_porc)
colnames(tabla_WIND)[1] <- "Velocidad"

3 Categorización y Ordenamiento Lógico

### Agrupación ####
tabla_con_grupos <- tabla_WIND %>%
  mutate(grupo = case_when(
    grepl("Northeast", Velocidad, ignore.case = TRUE) ~ "Noreste (NE)",
    grepl("Northwest", Velocidad, ignore.case = TRUE) ~ "Noroeste (NW)",
    grepl("Southeast", Velocidad, ignore.case = TRUE) ~ "Sureste (SE)",
    grepl("Southwest", Velocidad, ignore.case = TRUE) ~ "Suroeste (SW)",
    grepl("North", Velocidad, ignore.case = TRUE) ~ "Norte (N)",
    grepl("South", Velocidad, ignore.case = TRUE) ~ "Sur (S)",
    grepl("East", Velocidad, ignore.case = TRUE) ~ "Este (E)",
    grepl("West", Velocidad, ignore.case = TRUE) ~ "Oeste (W)",
    TRUE ~ "No Asignado / Otros"))
  
# Definimos el orden 
orden_horario <- c(
  "Norte (N)",
  "Noreste (NE)",
  "Este (E)",
  "Sureste (SE)",
  "Sur (S)",
  "Suroeste (SW)",
  "Oeste (W)",
  "Noroeste (NW)",
  "No Asignado / Otros",
  "TOTAL")

tabla_resumen <- tabla_con_grupos %>%
  mutate(grupo = factor(grupo, levels = orden_horario)) %>%
  group_by(grupo) %>% 
  summarise(
    Frecuencia = sum(Freq),
    Porcentaje = sum(hi_porc)) %>%
  arrange(grupo)

# Renombramos columnas
colnames(tabla_resumen) <- c("Velocidad","ni","hi (%)")

# Tabla Intermedia GT
tabla_resumen_gt <- tabla_resumen %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°1 de Agrupación por Dirección del Viento Predominante de las Plantas Solares**")) %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  cols_label(
    Velocidad = "Dirección del Viento Predominante",
    ni = "Frecuencia (ni)",
    `hi (%)` = "Porcentaje (hi%)") %>%
  fmt_number(columns = c(`hi (%)`), decimals = 2) %>%
  tab_options(
    heading.title.font.size = px(16),
    heading.subtitle.font.size = px(14),
    column_labels.background.color = "#F0F0F0")

# Mostramos la tabla 
tabla_resumen_gt
Tabla N°1 de Agrupación por Dirección del Viento Predominante de las Plantas Solares
Dirección del Viento Predominante Frecuencia (ni) Porcentaje (hi%)
Norte (N) 1050 20.69
Noreste (NE) 191 3.76
Este (E) 1920 37.83
Sureste (SE) 1239 24.41
Sur (S) 250 4.93
Suroeste (SW) 196 3.86
Oeste (W) 178 3.51
Noroeste (NW) 51 1.00
Autor: Martin Sarmiento

4 Tabla de Distribución de Frecuencias

#### Crear fila de totales ####
totales <- c("TOTAL", sum(tabla_resumen$ni, na.rm=TRUE), sum(tabla_resumen$`hi (%)`, na.rm=TRUE))
tabla_Wind_Final <- rbind(tabla_resumen, totales)

# Convertir a números para GT
tabla_Wind_Final$ni <- as.numeric(tabla_Wind_Final$ni)
tabla_Wind_Final$`hi (%)` <- as.numeric(tabla_Wind_Final$`hi (%)`)

# TABLA 1
tabla_gt <- tabla_Wind_Final %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°2 de Distribución de Frecuencias de la Dirección del Viento Predominante de las Plantas Solares**")) %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  cols_label(
    Velocidad = "Dirección del Viento Predominante",
    ni = "Frecuencia (ni)",
    `hi (%)` = "Porcentaje (hi%)") %>%
  fmt_number(columns = c(`hi (%)`), decimals = 2) %>%
  tab_options(
    heading.title.font.size = px(16),
    heading.subtitle.font.size = px(14),
    column_labels.background.color = "#F0F0F0")

tabla_gt
Tabla N°2 de Distribución de Frecuencias de la Dirección del Viento Predominante de las Plantas Solares
Dirección del Viento Predominante Frecuencia (ni) Porcentaje (hi%)
Norte (N) 1050 20.69
Noreste (NE) 191 3.76
Este (E) 1920 37.83
Sureste (SE) 1239 24.41
Sur (S) 250 4.93
Suroeste (SW) 196 3.86
Oeste (W) 178 3.51
Noroeste (NW) 51 1.00
TOTAL 5075 100.00
Autor: Martin Sarmiento

5 Análisis Gráfico

5.1 Diagramas de Barras de Cantidad

# Calculamos el límite 
limite_y_viento <- max(tabla_resumen$ni, na.rm = TRUE) * 1.2

par(mar = c(10, 4, 4, 2)) 
barplot(tabla_resumen$ni,
        main="",
        xlab = "",
        ylab = "Cantidad",
        col = "#FFB6C1",
        ylim = c(0, limite_y_viento),
        names.arg=tabla_resumen$Velocidad,
        cex.names = 0.7,
        las = 2)
mtext("Dirección del Viento Predominante", side = 1, line = 9)

mtext("Gráfica N°1: Distribución de Cantidad de Plantas Solares por Dirección del Viento Predominante", 
      side = 3, 
      line = 2,
      adj = 0.5, 
      cex = 0.8, 
      font = 2)

par(mar = c(10, 4, 4, 2)) 
barplot(tabla_resumen$ni,
        main="",
        xlab = "",
        ylab = "Cantidad",
        col = "#FFB6C1",
        ylim = c(0,8000), 
        names.arg=tabla_resumen$Velocidad,
        cex.names = 0.7,
        las = 2)
mtext("Dirección del Viento Predominante", side = 1, line = 9)

mtext("Gráfica N°2: Distribución de Cantidad de Plantas Solares por Dirección del Viento Predominante", 
      side = 3, 
      line = 2,
      adj = 0.5,
      cex = 0.8,
      font = 2)

5.2 Diagramas de Barras Porcentual

par(mar = c(10, 4, 4, 2)) 
barplot(tabla_resumen$`hi (%)`,
        main="",
        xlab = "",
        ylab = "Porcentaje %",
        col = "#FFB6C1",
        names.arg=tabla_resumen$Velocidad,
        cex.names = 0.7,
        las = 2)
mtext("Dirección del Viento Predominante", side = 1, line = 9)

mtext("Gráfica N°3: Distribución Porcentual de las Plantas Solares por Dirección del Viento Predominante", 
      side = 3, 
      line = 2, 
      adj = 0.5, 
      cex = 0.8, 
      font = 2)

par(mar = c(10, 4, 4, 2)) 
barplot(tabla_resumen$`hi (%)`,
        main="",
        xlab = "",
        ylab = "Porcentaje %",
        col = "#FFB6C1",
        ylim = c(0,100),
        names.arg=tabla_resumen$Velocidad,
        cex.names = 0.7,
        las = 2)
mtext("Dirección del Viento Predominante", side = 1, line = 9)

mtext("Gráfica N°4: Distribución Porcentual de las Plantas Solares por Dirección del Viento Predominante", 
      side = 3, 
      line = 2, 
      adj = 0.5,
      cex = 0.8, 
      font = 2)

5.3 Diagrama Circular

par(mar = c(5, 6, 4, 10), xpd = TRUE)

colores_base <- c("#FFB6C1", "#8B5F65")

paleta_verde_pro <- colorRampPalette(colores_base)
colores_finales <- paleta_verde_pro(length(tabla_resumen$Velocidad))

pie(tabla_resumen$`hi (%)`, 
    main = "",
    radius = 0.9,
    labels = paste0(round(tabla_resumen$`hi (%)`, 2), "%"),
    col = colores_finales, 
    cex = 0.8,            
    border = "black")
par(xpd = TRUE)

mtext("Gráfica N°5: Distribución Porcentual de las Plantas Solares por Dirección del Viento Predominante",  
      side = 3, 
      line = 2, 
      adj = 0.5, 
      cex = 0.7, 
      font = 2)

legend(x = 1.3, y = 1,
       legend = tabla_resumen$Velocidad,
       fill = colores_finales, 
       cex = 0.7,            
       bty = "n",            
       title = "Dirección del Viento Predominante")

6 Indicadores Estadísticos

# Cálculo de la Moda 
moda_wind <- tabla_resumen$Velocidad[which.max(tabla_resumen$ni)]

# Tabla de Indicadores
tabla_indicadores <- data.frame(
  "Variable" = "Dirección del Viento Predominante",
  "Rango" = "N, NE, E, SE, S, SW, W, NW",
  "Media (X)" = "-", 
  "Mediana (Me)" = "-", 
  "Moda (Mo)" = moda_wind, 
  "Varianza (V)" = "-", 
  "Desv. Est. (Sd)" = "-", 
  "C.V. (%)" = "-", 
  "Asimetría (As)" = "-", 
  "Curtosis (K)" = "-",
  check.names = FALSE)

# Generar Tabla de Indicadores
tabla_conclusiones_gt <- tabla_indicadores %>%
  gt() %>%
  tab_header(title = md("**Tabla N°3 de Conclusiones de la Dirección del Viento Predominante de las Plantas Solares**")) %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  tab_options(column_labels.background.color = "#F0F0F0")

tabla_conclusiones_gt
Tabla N°3 de Conclusiones de la Dirección del Viento Predominante de las Plantas Solares
Variable Rango Media (X) Mediana (Me) Moda (Mo) Varianza (V) Desv. Est. (Sd) C.V. (%) Asimetría (As) Curtosis (K)
Dirección del Viento Predominante N, NE, E, SE, S, SW, W, NW - - Este (E) - - - - -
Autor: Martin Sarmiento

7 Conclusiones

La variable “Dirección del Viento Predominante”, presenta como valor más frecuente es Este (E), con una participación destacada en la muestra.