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_Mundial_Final.csv", sep = ";", fileEncoding = "latin1")
# Estructura de los datos
str(Datos)
## 'data.frame':    58978 obs. of  29 variables:
##  $ ï..OBJECTID           : int  2 3 4 5 6 7 8 9 10 11 ...
##  $ code                  : chr  "00001-AFG-P" "00002-AFG-P" "00003-AFG-P" "00004-AFG-P" ...
##  $ plant_name            : chr  "Badghis Solar Power Plant" "Balkh solar farm" "Behsood solar farm" "Dab Pal 4 solar farm" ...
##  $ country               : chr  "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
##  $ operational_status    : chr  "cancelled - inferred 4 y" "cancelled - inferred 4 y" "cancelled - inferred 4 y" "shelved - inferred 2 y" ...
##  $ longitude             : chr  "62,874" "67,121" "70,413" "66,239" ...
##  $ latitude              : chr  "35,078" "36,714" "34,407" "33,768" ...
##  $ elevation             : int  918 359 629 2288 1060 1060 1392 398 410 1012 ...
##  $ area                  : chr  "6,735" "10,718" "487,729" "111,801" ...
##  $ size                  : chr  "Small" "Small" "Small" "Small" ...
##  $ slope                 : chr  "7,375" "0,49" "1,099" "6,162" ...
##  $ slope_type            : chr  "Moderado" "Plano o casi plano" "Plano o casi plano" "Moderado" ...
##  $ curvature             : chr  "-0,024" "0" "0" "0,045" ...
##  $ curvature_type        : chr  "Superficies cóncavas / Valles" "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies convexas / Crestas" ...
##  $ aspect                : chr  "96,77" "358,452" "36,18" "305,766" ...
##  $ aspect_type           : chr  "East" "North" "Northeast" "Northwest" ...
##  $ dist_to_road          : chr  "7037,104" "92,748" "112,117" "1705,255" ...
##  $ ambient_temperature   : chr  "14,402" "17,875" "21,315" "8,857" ...
##  $ ghi                   : chr  "5,824" "5,579" "5,805" "6,749" ...
##  $ humidity              : chr  "47,743" "42,305" "36,396" "37,344" ...
##  $ wind_speed            : chr  "0,039" "0,954" "0,234" "0,943" ...
##  $ wind_direction        : chr  "187,481" "207,422" "255,601" "160,331" ...
##  $ dt_wind               : chr  "South" "Southwest" "West" "South" ...
##  $ solar_aptitude        : chr  "0,72" "0,635" "0,685" "0,659" ...
##  $ solar_aptitude_rounded: int  7 6 7 7 8 8 8 6 6 4 ...
##  $ solar_aptittude_class : chr  "Alta" "Alta" "Alta" "Alta" ...
##  $ capacity              : chr  "32" "40" "60" "3000" ...
##  $ optimal_tilt          : chr  "30" "31" "31,063" "33" ...
##  $ pv_potential          : chr  "4,613" "4,408" "4,572" "5,424" ...
# 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) 4906 8.32
Noreste (NE) 6981 11.84
Este (E) 8270 14.02
Sureste (SE) 8051 13.65
Sur (S) 8335 14.13
Suroeste (SW) 7733 13.11
Oeste (W) 7645 12.96
Noroeste (NW) 5952 10.09
Plano (Flat) 1105 1.87
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) 4906 8.32
Noreste (NE) 6981 11.84
Este (E) 8270 14.02
Sureste (SE) 8051 13.65
Sur (S) 8335 14.13
Suroeste (SW) 7733 13.11
Oeste (W) 7645 12.96
Noroeste (NW) 5952 10.09
Plano (Flat) 1105 1.87
TOTAL 58978 100.00
Autor: Martin Sarmiento

5 Análisis Gráfico

5.1 Diagramas de Barras de Cantidad

par(mar = c(13, 6, 4, 2)) 
barplot(tabla_resumen$ni,
        main="",
        xlab = "",
        ylab = "",
        col = "#E8F5E9",
        ylim = c(0, max(tabla_resumen$ni) * 1.1),
        names.arg=tabla_resumen$Orientacion,
        cex.names = 0.7,
        las = 2)
mtext("Cantidad", side = 2, line = 4.5, cex = 1, font = 1)
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(13, 6, 4, 2)) 
barplot(tabla_resumen$ni,
        main="",
        xlab = "",
        ylab = "",
        col = "#E8F5E9",
        ylim = c(0,58771), 
        names.arg=tabla_resumen$Orientacion,
        cex.names = 0.7,
        las = 2)
mtext("Cantidad", side = 2, line = 4.5, cex = 1, font = 1)
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)) 
bp3 <- barplot(tabla_resumen$`hi (%)`,
        main="",
        xlab = "",
        ylab = "Porcentaje %",
        col = "#E8F5E9",
        ylim = c(0, max(tabla_resumen$`hi (%)`) * 1.3),
        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)

text(x = bp3, y = tabla_resumen$`hi (%)`, 
     labels = paste0(round(tabla_resumen$`hi (%)`, 2), "%"), 
     pos = 3, cex = 0.8, col = "black")

par(mar = c(10, 4, 4, 2)) 
bp4 <- 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)

text(x = bp4, y = tabla_resumen$`hi (%)`, 
     labels = paste0(round(tabla_resumen$`hi (%)`, 2), "%"), 
     pos = 3, cex = 0.8, col = "black")

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 - - Sur (S) - - - - -
Autor: Martin Sarmiento

7 Conclusiones

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