1 Configuración y Carga de Datos

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


#### VARIABLE ESTADO OPERATIVO ####
## DATASET ##
setwd("~/R/OPERATIONAL_STATUS")
# 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
Status <- Datos$operational_status
# EDAvariable nominal
TDF_status <- table(Status)

tabla_status <- as.data.frame(TDF_status)
hi <- tabla_status$Freq/sum(tabla_status$Freq)
hi_porc <- hi*100
sum(hi_porc)
## [1] 100
tabla_STATUS <- data.frame(tabla_status,hi_porc)

colnames(tabla_STATUS)[1] <- "Status"

3 Categorización y Ordenamiento Lógico

### Agrupación ###
tabla_resumen <- tabla_STATUS %>%
  mutate(grupo = case_when(
    grepl("cancelled - inferred 4 y", Status, ignore.case = TRUE) ~ "Cancelado (Inferred 4y)",
    grepl("shelved - inferred 2 y", Status, ignore.case = TRUE) ~ "Archivado (Inferred 2y)",
    grepl("operating", Status, ignore.case = TRUE) ~ "Operativo",
    grepl("announced", Status, ignore.case = TRUE) ~ "Anunciado",
    grepl("pre-construction", Status, ignore.case = TRUE) ~ "Pre-Construcción", 
    grepl("construction", Status, ignore.case = TRUE) ~ "Construcción",
    grepl("mothballed", Status, ignore.case = TRUE) ~ "Inactivo (Mothballed)",
    grepl("shelved", Status, ignore.case = TRUE) ~ "Archivado (Shelved)",
    grepl("cancelled", Status, ignore.case = TRUE) ~ "Cancelado",
    grepl("retired", Status, ignore.case = TRUE) ~ "Retirada",
    TRUE ~ "Otros"))

# Definimos el orden
orden_especifico <- c(
  "Operativo",
  "Anunciado",
  "Construcción",
  "Pre-Construcción",
  "Inactivo (Mothballed)",
  "Archivado (Shelved)",
  "Archivado (Inferred 2y)",
  "Cancelado",
  "Cancelado (Inferred 4y)",
  "Retirada",
  "Otros")

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

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

# Tabla Intermedia GT
tabla_resumen_gt <- tabla_resumen %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°1 de Agrupación por Estado Operativo de las Plantas Solares**")) %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  cols_label(
    Estado = "Estado Operativo",
    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 Estado Operativo de las Plantas Solares
Estado Operativo Frecuencia (ni) Porcentaje (hi%)
Operativo 47538 80.60
Anunciado 1382 2.34
Construcción 2005 3.40
Pre-Construcción 6246 10.59
Inactivo (Mothballed) 9 0.02
Archivado (Shelved) 246 0.42
Archivado (Inferred 2y) 530 0.90
Cancelado 564 0.96
Cancelado (Inferred 4y) 426 0.72
Retirada 32 0.05
Autor: Martin Sarmiento

4 Tabla de Distribución de Frecuencias

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

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

# TABLA 1
tabla_final_gt <- tabla_Status_Final %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N°2 de Distribución de Frecuencias del Estado Operativo de las Plantas Solares**")) %>%
  tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
  cols_label(
    Estado = "Estado Operativo",
    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 del Estado Operativo de las Plantas Solares
Estado Operativo Frecuencia (ni) Porcentaje (hi%)
Operativo 47538 80.60
Anunciado 1382 2.34
Construcción 2005 3.40
Pre-Construcción 6246 10.59
Inactivo (Mothballed) 9 0.02
Archivado (Shelved) 246 0.42
Archivado (Inferred 2y) 530 0.90
Cancelado 564 0.96
Cancelado (Inferred 4y) 426 0.72
Retirada 32 0.05
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 = "#D8BFD8", 
        ylim = c(0, max(tabla_resumen$ni) * 1.1),
        names.arg=tabla_resumen$Estado,         
        cex.names = 0.6,
        las = 2)
mtext("Cantidad", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Estado Operativo", side = 1, line = 10)

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

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

5.2 Diagramas de Barras Porcentual

par(mar = c(12, 4, 4, 2))
bp3 <- barplot(tabla_resumen$`hi (%)`,
        main="",
        xlab = "", 
        ylab = "Porcentaje %", 
        col = "#D8BFD8", 
        ylim = c(0, max(tabla_resumen$`hi (%)`) * 1.2),
        names.arg=tabla_resumen$Estado,         
        cex.names = 0.6, 
        las = 2)
mtext("Estado Operativo", side = 1, line = 10)

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

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

tonos_base <- c("#4A148C", "#7B1FA2", "#AB47BC", "#CE93D8", "#F3E5F5")

paleta_violeta <- colorRampPalette(tonos_base)
colores_finales <- paleta_violeta(length(tabla_resumen$Estado))

pie (tabla_resumen$`hi (%)`,
     main = "",
     radius = 1,
     labels = paste0(round(tabla_resumen$`hi (%)`,2),"%"),
     col = colores_finales,
     cex = 0.6,)

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

legend(x = 1.25, y = 1,
       legend = tabla_resumen$Estado,
       fill = colores_finales,
       cex = 0.5, 
       title = "Estado Operativo",
       bty = "n")

6 Indicadores Estadísticos

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

# Tabla de Indicadores
tabla_indicadores <- data.frame(
  "Variable" = "Estado Operativo",
  "Rango" = "announced, pre-construction, construction, operating, mothballed, shelved, shelved–inferred 2y, cancelled, cancelled–inferred 4y, retired", 
  "Media (X)" = "-", 
  "Mediana (Me)" = "-", 
  "Moda (Mo)" = moda_estado, 
  "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 Estado Operativo 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 Estado Operativo de las Plantas Solares
Variable Rango Media (X) Mediana (Me) Moda (Mo) Varianza (V) Desv. Est. (Sd) C.V. (%) Asimetría (As) Curtosis (K)
Estado Operativo announced, pre-construction, construction, operating, mothballed, shelved, shelved–inferred 2y, cancelled, cancelled–inferred 4y, retired - - Operativo - - - - -
Autor: Martin Sarmiento

7 Conclusiones

La variable “Estado Operacional”, presenta como valor más frecuente es Operativo, con una participación destacada en la muestra.