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("DataSet_.csv", sep = ";")
# Estructura de los datos
str(Datos)
## 'data.frame':    7142 obs. of  26 variables:
##  $ fid                  : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ objectid             : int  127 128 129 130 131 132 133 134 135 136 ...
##  $ code                 : chr  "Arg-00001" "Arg-00002" "Arg-00003" "Arg-00004" ...
##  $ country              : chr  "Argentina" "Argentina" "Argentina" "Argentina" ...
##  $ plant_name           : chr  "Aconcagua solar farm" "Aconcagua solar farm" "Altiplano 200 Solar Power Plant" "Altiplano 200 Solar Power Plant" ...
##  $ operational_status   : chr  "announced" "announced" "operating" "operating" ...
##  $ longitude            : num  -68.9 -68.9 -66.9 -66.9 -68.9 ...
##  $ latitude             : num  -33 -33 -24.1 -24.1 -33.3 ...
##  $ elevation            : int  929 929 4000 4000 937 865 858 858 858 858 ...
##  $ area                 : num  0 0 4397290 5774 0 ...
##  $ slope                : num  0.574 0.574 1.603 6.243 0.903 ...
##  $ slope_type           : chr  "Plano o casi plano" "Plano o casi plano" "Plano o casi plano" "Moderado" ...
##  $ curvature            : num  0.000795 0.000795 -0.002781 -0.043699 0.002781 ...
##  $ curvature_type       : chr  "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies c\xf3ncavas / Valles" ...
##  $ aspect               : num  55.1 55.1 188.7 270.9 108.4 ...
##  $ aspect_type          : chr  "Northeast" "Northeast" "South" "West" ...
##  $ ghi                  : num  6.11 6.11 8.01 7.88 6.12 ...
##  $ solar_aptitude       : num  0.746 0.746 0.8 0.727 0.595 ...
##  $ solar_aptittude_class: chr  "Alta" "Alta" "Alta" "Alta" ...
##  $ humidity             : num  0 0 53.7 53.7 0 ...
##  $ wind_speed           : num  3.78 3.78 7.02 8.33 3.87 ...
##  $ wind_direction       : num  0 0 55.1 55.1 0 ...
##  $ ambient_temperature  : num  12.6 12.6 6.8 6.8 13.1 ...
##  $ optimal_tilt         : int  31 31 26 26 31 33 30 30 30 30 ...
##  $ peak_power_per_hour  : num  4.98 4.98 6.39 6.39 4.97 ...
##  $ total_power          : num  25 66.2 101 107 180 ...
# 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 DE AGRUPACIÓN**"), 
    subtitle = "Frecuencias por Tipo de Pendiente (Orden Lógico)") %>%
  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 DE AGRUPACIÓN
Frecuencias por Tipo de Pendiente (Orden Lógico)
Tipo de Pendiente Frecuencia (ni) Porcentaje (hi%)
Plano o casi plano 6183 86.57
Suave 776 10.87
Moderado 147 2.06
Fuerte 27 0.38
Muy fuerte 6 0.08
Escarpado o abrupto 1 0.01
No Asignado / Otros 2 0.03
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 1**"), 
    subtitle = "Distribución del Tipo de Pendiente en Proyectos") %>%
  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 1
Distribución del Tipo de Pendiente en Proyectos
Tipo de Pendiente Frecuencia (ni) Porcentaje (hi%)
Plano o casi plano 6183 86.57
Suave 776 10.87
Moderado 147 2.06
Fuerte 27 0.38
Muy fuerte 6 0.08
Escarpado o abrupto 1 0.01
No Asignado / Otros 2 0.03
TOTAL 7142 100.00
Autor: Martin Sarmiento

5 Gráfico 1 – Frecuencia local

# Diagrama de barrras local ni
par(mar = c(13, 4, 4, 2)) 
barplot(tabla_resumen$ni,
        main="Gráfica N°1: Distribución del tipo de pendiente",
        xlab = "", 
        ylab = "Cantidad", 
        col = "#FAEBD7", 
        names.arg=tabla_resumen$Pendiente, 
        cex.names = 0.7, 
        las = 2)
mtext("Tipo de Pendiente", side = 1, line = 11)

6 Gráfico 2 – Frecuencia global

# Diagrama de barrras global ni
par(mar = c(13, 4, 4, 2)) 
barplot(tabla_resumen$ni,
        main="Gráfica N°2: Distribución Global",
        xlab = "", 
        ylab = "Cantidad", 
        col = "#FAEBD7", 
        ylim = c(0,8000), 
        names.arg=tabla_resumen$Pendiente, 
        cex.names = 0.7, 
        las = 2)
mtext("Tipo de Pendiente", side = 1, line = 11)

7 Gráfico 3 – Porcentaje local

# Diagrama de barrras local hi
par(mar = c(13, 4, 4, 2))
barplot(tabla_resumen$`hi (%)`,
        main="Gráfica N°3: Distribución porcentual",
        xlab = "", 
        ylab = "Porcentaje %", 
        col = "#FAEBD7", 
        names.arg=tabla_resumen$Pendiente, 
        cex.names = 0.7, 
        las = 2)
mtext("Tipo de Pendiente", side = 1, line = 11)

8 Gráfico 4 – Porcentaje global

# Diagrama de barrras global hi
par(mar = c(13, 4, 4, 2))
barplot(tabla_resumen$`hi (%)`,main="Gráfica N°4: Distribución porcentual global",
        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)

9 Gráfico 5 – Diagrama Circular

## Diagrma 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 = "Gráfica N°5: Distribución porcentual",
    radius = 0.9,
    labels = labels_formato,
    col = colores_finales,
    cex = 0.7)

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

10 Tabla de Conlusiones

# Tabla de conclusiones
tabla_indicadores <- data.frame(
  "Variable" = "Tipo de Pendiente",
  "Rango" = "Categorías de inclinación (Ordinal)", # Actualizado a Ordinal
  "X" = "-", "Me" = "-", "Mo" = "Plano o casi plano", 
  "V" = "-", "Sd" = "-", "Cv" = "-", "As" = "-", "K" = "-", 
  "Valores_Atipicos" = "-")

tabla_conclusiones_gt <- tabla_indicadores %>%
  gt() %>%
  tab_header(
    title = md("**CONCLUSIONES**"),
    subtitle = "Análisis de la variable Pendiente") %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  cols_label(Valores_Atipicos = "Valores Atípicos") %>%
  tab_options(column_labels.background.color = "#f0f0f0")

tabla_conclusiones_gt
CONCLUSIONES
Análisis de la variable Pendiente
Variable Rango X Me Mo V Sd Cv As K Valores Atípicos
Tipo de Pendiente Categorías de inclinación (Ordinal) - - Plano o casi plano - - - - - -
Autor: Martin Sarmiento