1 Configuración y Carga de Datos

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


#### VARIABLE TIPO DE ASPECTO ####
## DATASET ##
setwd("~/R/ASPECT_TYPE")
# 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  "Pequeña" "Grande" "Pequeña" "Pequeña" ...
##  $ 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
Aspect <- Datos$aspect_type
# EDAvariable nominal
TDF_aspect <- table(Aspect)

tabla_aspect <- as.data.frame(TDF_aspect)
hi <- tabla_aspect$Freq/sum(tabla_aspect$Freq)
hi_porc <- hi*100
sum(hi_porc)
## [1] 100
tabla_ASPECT <- data.frame(tabla_aspect, hi_porc)
colnames(tabla_ASPECT)[1] <- "Orientacion"

3 Categorización y Ordenamiento Lógico

### Agrupación ####
tabla_con_grupos <- tabla_ASPECT %>%
  mutate(grupo = case_when(
    grepl("Northeast", Orientacion, ignore.case = TRUE) ~ "Noreste (NE)",
    grepl("Northwest", Orientacion, ignore.case = TRUE) ~ "Noroeste (NW)",
    grepl("Southeast", Orientacion, ignore.case = TRUE) ~ "Sureste (SE)",
    grepl("Southwest", Orientacion, ignore.case = TRUE) ~ "Suroeste (SW)",
    grepl("North", Orientacion, ignore.case = TRUE) ~ "Norte (N)",
    grepl("South", Orientacion, ignore.case = TRUE) ~ "Sur (S)",
    grepl("East", Orientacion, ignore.case = TRUE) ~ "Este (E)",
    grepl("West", Orientacion, ignore.case = TRUE) ~ "Oeste (W)",
    grepl("Flat", Orientacion, ignore.case = TRUE) ~ "Plano (Flat)",
    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)",
  "Plano (Flat)",
  "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("Orientacion","ni","hi (%)")

# Tabla Intermedia GT
tabla_resumen_gt <- tabla_resumen %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°1 de Agrupación por Tipo de Aspecto de las Plantas Solares**")) %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  cols_label(
    Orientacion = "Tipo de Aspecto",
    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 Tipo de Aspecto de las Plantas Solares
Tipo de Aspecto Frecuencia (ni) Porcentaje (hi%)
Norte (N) 711 14.01
Noreste (NE) 622 12.26
Este (E) 571 11.25
Sureste (SE) 623 12.28
Sur (S) 564 11.11
Suroeste (SW) 546 10.76
Oeste (W) 700 13.79
Noroeste (NW) 731 14.40
Plano (Flat) 7 0.14
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_Aspect_Final <- rbind(tabla_resumen, totales)

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

# TABLA 1
tabla_gt <- tabla_Aspect_Final %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°2 de Distribución de Frecuencias de Tipo de Aspecto de las Plantas Solares**")) %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  cols_label(
    Orientacion = "Tipo de Aspecto",
    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 Tipo de Aspecto de las Plantas Solares
Tipo de Aspecto Frecuencia (ni) Porcentaje (hi%)
Norte (N) 711 14.01
Noreste (NE) 622 12.26
Este (E) 571 11.25
Sureste (SE) 623 12.28
Sur (S) 564 11.11
Suroeste (SW) 546 10.76
Oeste (W) 700 13.79
Noroeste (NW) 731 14.40
Plano (Flat) 7 0.14
TOTAL 5075 100.00
Autor: Martin Sarmiento

5 Análisis Gráfico

5.1 Diagramas de Barras de Cantidad

par(mar = c(10, 4, 4, 2)) 
barplot(tabla_resumen$ni,
        main="",
        xlab = "",
        ylab = "Cantidad",
        col = "#E8F5E9",
        names.arg=tabla_resumen$Orientacion,
        cex.names = 0.7,
        las = 2)
mtext("Tipo de Aspecto", side = 1, line = 9)

mtext("Gráfica N°1: Distribución de Cantidad de Plantas Solares por Tipo de Aspecto", 
      side = 3, 
      line = 2,
      adj = 0.5, 
      cex = 0.9, 
      font = 2)

par(mar = c(10, 4, 4, 2)) 
barplot(tabla_resumen$ni,
        main="",
        xlab = "",
        ylab = "Cantidad",
        col = "#E8F5E9",
        ylim = c(0,8000), 
        names.arg=tabla_resumen$Orientacion,
        cex.names = 0.7,
        las = 2)
mtext("Tipo de Aspecto", side = 1, line = 9)

mtext("Gráfica N°2: Distribución de Cantidad de Plantas Solares por Tipo de Aspecto", 
      side = 3, 
      line = 2,
      adj = 0.5,
      cex = 0.9,
      font = 2)

5.2 Diagramas de Barras Porcentual

par(mar = c(10, 4, 4, 2)) 
barplot(tabla_resumen$`hi (%)`,
        main="",
        xlab = "",
        ylab = "Porcentaje %",
        col = "#E8F5E9",
        names.arg=tabla_resumen$Orientacion,
        cex.names = 0.7,
        las = 2)
mtext("Tipo de Aspecto", side = 1, line = 9)

mtext("Gráfica N°3: Distribución Porcentual de las Plantas Solares por Tipo de Aspecto", 
      side = 3, 
      line = 2, 
      adj = 0.5, 
      cex = 0.9, 
      font = 2)

par(mar = c(10, 4, 4, 2)) 
barplot(tabla_resumen$`hi (%)`,
        main="",
        xlab = "",
        ylab = "Porcentaje %",
        col = "#E8F5E9",
        ylim = c(0,100),
        names.arg=tabla_resumen$Orientacion,
        cex.names = 0.7,
        las = 2)
mtext("Tipo de Aspecto", side = 1, line = 9)

mtext("Gráfica N°4: Distribución Porcentual de las Plantas Solares por Tipo de Aspecto", 
      side = 3, 
      line = 2, 
      adj = 0.5,
      cex = 0.9, 
      font = 2)

5.3 Diagrama Circular

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

colores_base <- c("#E8F5E9", "#1B5E20")

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

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 Tipo de Aspecto", 
      side = 3, 
      line = 2, 
      adj = 0.5, 
      cex = 0.9, 
      font = 2)

legend(x = 1.3, y = 1,
       legend = tabla_resumen$Orientacion,
       fill = colores_finales, 
       cex = 0.7,            
       bty = "n",            
       title = "Tipo de Aspecto")

6 Indicadores Estadísticos

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

# Tabla de Indicadores
tabla_indicadores <- data.frame(
  "Variable" = "Tipo de Aspecto",
  "Rango" = "Flat, N, NE, E, SE, S, SW, W, NW",
  "Media (X)" = "-", 
  "Mediana (Me)" = "-", 
  "Moda (Mo)" = moda_aspecto, 
  "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 Tipo de Aspecto 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 Tipo de Aspecto de las Plantas Solares
Variable Rango Media (X) Mediana (Me) Moda (Mo) Varianza (V) Desv. Est. (Sd) C.V. (%) Asimetría (As) Curtosis (K)
Tipo de Aspecto Flat, N, NE, E, SE, S, SW, W, NW - - Noroeste (NW) - - - - -
Autor: Martin Sarmiento

7 Conclusiones

La variable “Tipo de Aspecto”, presenta como valor más frecuente es Noroeste (NW), con una participación destacada en la muestra.