1 Configuración y Carga de Datos

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


#### VARIABLE TIPO DE PENDIENTE ####
## DATASET ##
setwd("~/R/SLOPE_TYPE")
# Cargar dataset
Datos <- read.csv("Data_Mundial_Final.csv", sep = ";")
# Estructura de los datos
str(Datos)
## 'data.frame':    58771 obs. of  29 variables:
##  $ OBJECTID              : int  127 129 131 132 133 137 138 139 140 145 ...
##  $ code                  : chr  "00127-ARG-P" "00129-ARG-G" "00131-ARG-P" "00132-ARG-P" ...
##  $ plant_name            : chr  "Aconcagua solar farm" "Altiplano 200 Solar Power Plant" "Anchoris solar farm" "Antu Newen solar farm" ...
##  $ country               : chr  "Argentina" "Argentina" "Argentina" "Argentina" ...
##  $ operational_status    : chr  "announced" "operating" "construction" "cancelled - inferred 4 y" ...
##  $ longitude             : chr  "-68,8713" "-66,895798" "-68,915001" "-70,269897" ...
##  $ latitude              : chr  "-32,998501" "-24,1392" "-33,330101" "-37,375801" ...
##  $ elevation             : int  929 4000 937 865 858 570 1612 665 3989 2640 ...
##  $ area                  : chr  "250,337006" "4397290" "645,163025" "241,276001" ...
##  $ size                  : chr  "Small" "Big" "Small" "Small" ...
##  $ slope                 : chr  "0,574179" "1,60257" "0,902748" "1,79147" ...
##  $ slope_type            : chr  "Plano o casi plano" "Plano o casi plano" "Plano o casi plano" "Plano o casi plano" ...
##  $ curvature             : chr  "0,000795" "-0,002781" "0,002781" "-0,002384" ...
##  $ curvature_type        : chr  "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies planas o intermedias" ...
##  $ aspect                : chr  "55,124672" "188,707367" "108,434952" "239,349335" ...
##  $ aspect_type           : chr  "Northeast" "South" "East" "Southwest" ...
##  $ dist_to_road          : chr  "127,2827045" "56014,95403" "335,9280031" "34,00973342" ...
##  $ ambient_temperature   : chr  "12,6" "6,8" "13,1" "11,4" ...
##  $ ghi                   : chr  "6,11" "8,012" "6,119" "6,223" ...
##  $ humidity              : chr  "53,74" "53,74" "53,74" "53,74" ...
##  $ wind_speed            : chr  "3,7789" "7,02062" "3,87037" "6,55962" ...
##  $ 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,595309" "0,657269" ...
##  $ solar_aptitude_rounded: int  7 8 6 7 7 7 8 7 8 6 ...
##  $ solar_aptittude_class : chr  "Alta" "Alta" "Media" "Alta" ...
##  $ capacity              : chr  "25" "101" "180" "20" ...
##  $ optimal_tilt          : chr  "31" "26" "31" "33" ...
##  $ pv_potential          : chr  "4,983" "6,389" "4,969" "5,002" ...
# 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
Slope <- Datos$slope_type
# EDAvariable nominal
TDF_slope <- table(Slope)

tabla_slope <- as.data.frame(TDF_slope)
hi <- tabla_slope$Freq/sum(tabla_slope$Freq)
hi_porc <- hi*100
sum(hi_porc)
## [1] 100
tabla_SLOPE <- data.frame(tabla_slope,hi_porc)
colnames(tabla_SLOPE)[1] <- "TipoPendiente"

3 Categorización y Ordenamiento Lógico

### Agrupación ####
tabla_SLOPE$grupo <- case_when(
  grepl("Plano", tabla_SLOPE$TipoPendiente, ignore.case = TRUE) ~ "Plano o casi plano",
  grepl("Suave", tabla_SLOPE$TipoPendiente, ignore.case = TRUE) ~ "Suave",
  grepl("Moderado", tabla_SLOPE$TipoPendiente, ignore.case = TRUE) ~ "Moderado",
  grepl("Muy fuerte", tabla_SLOPE$TipoPendiente, ignore.case = TRUE) ~ "Muy fuerte",
  grepl("Fuerte", tabla_SLOPE$TipoPendiente, ignore.case = TRUE) ~ "Fuerte",
  grepl("Escarpado", tabla_SLOPE$TipoPendiente, ignore.case = TRUE) ~ "Escarpado o abrupto",
  TRUE ~ "No Asignado / Otros")

tabla_resumen <- tabla_SLOPE %>%
  group_by(grupo) %>%
  summarise(
    Frecuencia = sum(Freq),
    Porcentaje = sum(hi_porc))

# Definimos el orden lógico 
orden_logico <- c("Plano o casi plano", 
                  "Suave", 
                  "Moderado", 
                  "Fuerte", 
                  "Muy fuerte", 
                  "Escarpado o abrupto", 
                  "No Asignado / Otros",
                  "TOTAL")

tabla_resumen$grupo <- factor(tabla_resumen$grupo, levels = orden_logico)
tabla_resumen <- tabla_resumen %>%
  arrange(grupo)

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

# Tabla Intermedia GT
tabla_resumen_gt <- tabla_resumen %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°1 de Agrupación por Tipo de Pendiente de las Plantas Solares**")) %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  cols_label(
    Pendiente = "Tipo de Pendiente",
    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 Pendiente de las Plantas Solares
Tipo de Pendiente Frecuencia (ni) Porcentaje (hi%)
Plano o casi plano 46567 79.23
Suave 8515 14.49
Moderado 2906 4.94
Fuerte 562 0.96
Muy fuerte 217 0.37
Escarpado o abrupto 4 0.01
Autor: Martin Sarmiento

4 Tabla de Distribución de Frecuencias

#### Crear de fila de totales ####
totales <- c("TOTAL", sum(tabla_resumen$ni), sum(tabla_resumen$`hi (%)`))
tabla_Slope_Final <- rbind(tabla_resumen, totales)

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

# TABLA 1
tabla_final_gt <- tabla_Slope_Final %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°2 de Distribución de Frecuencias de Tipo de Pendiente de las Plantas Solares**")) %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  cols_label(
    Pendiente = "Tipo de Pendiente",
    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_final_gt
Tabla N°2 de Distribución de Frecuencias de Tipo de Pendiente de las Plantas Solares
Tipo de Pendiente Frecuencia (ni) Porcentaje (hi%)
Plano o casi plano 46567 79.23
Suave 8515 14.49
Moderado 2906 4.94
Fuerte 562 0.96
Muy fuerte 217 0.37
Escarpado o abrupto 4 0.01
TOTAL 58771 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 = "#FAEBD7", 
        ylim = c(0, max(tabla_resumen$ni) * 1.1),
        names.arg=tabla_resumen$Pendiente, 
        cex.names = 0.7, 
        las = 2)
mtext("Cantidad", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Tipo de Pendiente", side = 1, line = 11)

mtext("Gráfica N°1: Distribución de Cantidad de Plantas Solares por Tipo de Pendiente", 
      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 = "#FAEBD7", 
        ylim = c(0,58771), 
        names.arg=tabla_resumen$Pendiente, 
        cex.names = 0.7, 
        las = 2)
mtext("Cantidad", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Tipo de Pendiente", side = 1, line = 11)

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

5.2 Diagramas de Barras Porcentual

par(mar = c(13, 4, 4, 2))
bp3 <- barplot(tabla_resumen$`hi (%)`,
        main="",
        xlab = "", 
        ylab = "Porcentaje %", 
        col = "#FAEBD7", 
        ylim = c(0, max(tabla_resumen$`hi (%)`) * 1.2),
        names.arg=tabla_resumen$Pendiente, 
        cex.names = 0.7, 
        las = 2)
mtext("Tipo de Pendiente", side = 1, line = 11)

mtext("Gráfica N°3: Distribución Porcentual de las Plantas Solares por Tipo de Pendiente", 
      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(13, 4, 4, 2))
bp4 <- barplot(tabla_resumen$`hi (%)`,
        main="",
        xlab = "", 
        ylab = "Porcentaje %", 
        col = "#FAEBD7", 
        ylim = c(0,100),
        names.arg=tabla_resumen$Pendiente, 
        cex.names = 0.7, 
        las = 2)
mtext("Tipo de Pendiente", side = 1, line = 11)

mtext("Gráfica N°4: Distribución Porcentual de las Plantas Solares por Tipo de Pendiente", 
      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)

labels_formato <- paste0(round(tabla_resumen$`hi (%)`, 2), "%")

colores_base <- c("#FAEBD7", "#F5DEB3", "#D2B48C", "#A0522D", "#5D4037")
paleta_tierra <- colorRampPalette(colores_base)
colores_finales <- paleta_tierra(length(tabla_resumen$Pendiente))

pie(tabla_resumen$`hi (%)`,
    main = "",
    radius = 0.9,
    labels = labels_formato,
    col = colores_finales,
    cex = 0.7)

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

legend(x = 1.2, y = 1.1,
       legend = tabla_resumen$Pendiente,
       fill = colores_finales,
       cex = 0.6,
       title = "Tipo de Pendiente",
       bty = "n")

6 Indicadores Estadísticos

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

# Tabla de Indicadores
tabla_indicadores <- data.frame(
  "Variable" = "Tipo de Pendiente",
  "Rango" = "Plano, Suave, Moderado, Fuerte, Muy fuerte, Escarpado",
  "Media (X)" = "-", 
  "Mediana (Me)" = "-", 
  "Moda (Mo)" = moda_pendiente, 
  "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 Pendiente 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 Pendiente 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 Pendiente Plano, Suave, Moderado, Fuerte, Muy fuerte, Escarpado - - Plano o casi plano - - - - -
Autor: Martin Sarmiento

7 Conclusiones

La variable “Tipo de Pendiente”, presenta como valor más frecuente es Plano o casi plano, con una participación destacada en la muestra.