##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: MARTIN SARMIENTO ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####
#### VARIABLE APTITUD SOLAR REDONDEADA ####
## DATASET ##
setwd("~/R/SOLAR_APTITUDE_ROUNDED")
# 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" ...
##
## 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
# Extraer variable
solar_aptitude_rounded <- na.omit(Datos$solar_aptitude_rounded)
# Creamos la tabla base de conteos
TDF_solar_aptitude_rounded <- table(solar_aptitude_rounded)
# Convertir a Dataframe
tabla_solar <- as.data.frame(TDF_solar_aptitude_rounded)
colnames(tabla_solar) <- c("Variable", "Freq")
# Cálculo de Frecuencia Relativa (hi)
hi_solar <- (tabla_solar$Freq / sum(tabla_solar$Freq)) * 100
tabla_solar$hi <- round(hi_solar, 2)
# Cálculo de Frecuencias Acumuladas (Ni y Hi)
# Ascendentes
Niasc_solar <- cumsum(tabla_solar$Freq)
Hiasc_solar <- cumsum(tabla_solar$hi)
# Descendentes
Nidsc_solar <- rev(cumsum(rev(tabla_solar$Freq)))
Hidsc_solar <- rev(cumsum(rev(tabla_solar$hi)))
# Crear Dataframe
tabla_final <- data.frame(
Aptitud = as.numeric(as.character(tabla_solar$Variable)),
Frecuencia = tabla_solar$Freq,
Porcentaje = tabla_solar$hi,
Niasc = Niasc_solar,
Hiasc = round(Hiasc_solar, 2),
Nidsc = Nidsc_solar,
Hidsc = round(Hidsc_solar, 2)
)
# Visualización de Tabla con librería GT
tabla_final %>%
gt() %>%
tab_header(
title = md("**Tabla N°1 de Distribución de Frecuencias de la Aptitud Solar de las Plantas Solares**"),
) %>%
cols_label(
Aptitud = "Aptitud Solar",
Frecuencia = "Frec. Abs (ni)",
Porcentaje = "Frec. Rel (%)",
Niasc = "Ni (Asc)",
Hiasc = "Hi (Asc)",
Nidsc = "Ni (Desc)",
Hidsc = "Hi (Desc)"
) %>%
tab_options(
heading.title.font.size = px(16),
column_labels.background.color = "#F0F0F0")| Tabla N°1 de Distribución de Frecuencias de la Aptitud Solar de las Plantas Solares | ||||||
| Aptitud Solar | Frec. Abs (ni) | Frec. Rel (%) | Ni (Asc) | Hi (Asc) | Ni (Desc) | Hi (Desc) |
|---|---|---|---|---|---|---|
| 5 | 3 | 0.06 | 3 | 0.06 | 5075 | 100.00 |
| 6 | 1912 | 37.67 | 1915 | 37.73 | 5072 | 99.94 |
| 7 | 2531 | 49.87 | 4446 | 87.60 | 3160 | 62.27 |
| 8 | 581 | 11.45 | 5027 | 99.05 | 629 | 12.40 |
| 9 | 47 | 0.93 | 5074 | 99.98 | 48 | 0.95 |
| 10 | 1 | 0.02 | 5075 | 100.00 | 1 | 0.02 |
par(mar = c(8, 5, 4, 2))
barplot(tabla_final$Frecuencia,
names.arg = tabla_final$Aptitud,
main = "Gráfica N°1: Distribución de Cantidad de Plantas Solares por Aptitud Solar Redondeada",
cex.main = 0.9,
xlab = "",
ylab = "Cantidad",
col = "#CD6600",
las = 1)
mtext("Aptitud Solar", side = 1, line = 4)par(mar = c(8, 5, 4, 2))
barplot(tabla_final$Frecuencia,
main = "Gráfica N°2: Distribución de Cantidad de Plantas Solares por Aptitud Solar Redondeada",
xlab = "",
ylab = "Cantidad",
names.arg = tabla_final$Aptitud,
col = "#CD6600",
cex.main = 0.9,
ylim = c(0, sum(tabla_final$Frecuencia)),
las = 1)
mtext("Aptitud Solar", side = 1, line = 4)par(mar = c(8, 5, 4, 2))
barplot(tabla_final$Porcentaje,
main = "Gráfica N°3: Distribución Porcentual de Plantas Solares por Aptitud Solar Redondeada",
xlab = "",
ylab = "Porcentaje (%)",
col = "#CD6600",
names.arg = tabla_final$Aptitud,
cex.main = 0.9,
ylim = c(0, max(tabla_final$Porcentaje) * 1.1),
las = 1)
mtext("Aptitud Solar", side = 1, line = 4)par(mar = c(8, 5, 4, 2))
barplot(tabla_final$Porcentaje,
main = "Gráfica N°4: Distribución Porcentual de Plantas Solares por Aptitud Solar Redondeada",
xlab = "",
ylab = "Porcentaje (%)",
col = "#CD6600",
cex.main = 0.9,
names.arg = tabla_final$Aptitud,
ylim = c(0, 100),
las = 1)
mtext("Aptitud Solar", side = 1, line = 4)boxplot(solar_aptitude_rounded,
horizontal = TRUE,
col = "#CD6600",
xlab = "Aptitud Solar",
main = "Gráfica N°5: Distribución de la Aptitud Solar Redondeada en las Plantas Solares",
cex.main = 0.9)par(mar = c(5, 5, 4, 10), xpd = TRUE)
# Coordenadas
x_asc <- tabla_final$Aptitud
x_desc <- tabla_final$Aptitud
y_asc <- tabla_final$Niasc
y_desc <- tabla_final$Nidsc
# 1. Dibujar la Ascendente
plot(x_asc, y_asc,
type = "b",
main = "Gráfica N°6: Ojivas Ascendentes y Descendentes de la Distribución de la Altitud Solar Redondeada en las Plantas Solares",
cex.main = 0.6,
xlab = "Aptitud Solar",
ylab = "Frecuencia Acumulada",
col = "black",
pch = 19,
xlim = c(min(x_asc), max(x_asc)),
ylim = c(0, sum(tabla_final$Frecuencia)))
# 2. Agregar la Descendente
lines(x_desc, y_desc, col = "orange", type = "b", pch = 19)
grid()
legend("right",
legend = c("Ascendente", "Descendente"),
col = c("black", "orange"),
lty = 1,
pch = 1,
cex = 0.6,
inset = c(0.05, 0.05),
bty = "n")Variable <- as.numeric(as.character(na.omit(Datos$solar_aptitude_rounded)))
## INDICADORES DE TENDENCIA CENTRAL
# Media aritmética
media <- round(mean(Variable), 2)
# Mediana
mediana <- round(median(Variable), 2)
# Moda
max_frecuencia <- max(tabla_final$Frecuencia)
moda_vals <- tabla_final$Aptitud[tabla_final$Frecuencia == max_frecuencia]
moda_txt <- paste(round(moda_vals, 2), collapse = ", ")
## INDICADORES DE DISPERSIÓN
# Varianza
varianza <- var(Variable)
# Desviación Estándar
sd_val <- sd(Variable)
# Coeficiente de Variación
cv <- round((sd_val / abs(media)) * 100, 2)
## INDICADORES DE FORMA
# Coeficiente de Asimetría
asimetria <- skewness(Variable, type = 2)
# Curtosis
curtosis <- kurtosis(Variable)
# Outliers
outliers_data <- boxplot.stats(Variable)$out
if(length(outliers_data) > 0) {
num_out <- length(outliers_data)
min_out <- round(min(outliers_data), 2)
max_out <- round(max(outliers_data), 2)
# Formato Total [Min; Max]
msg_atipicos <- paste0(" ", num_out, " [", min_out, " ; ", max_out, "]")
} else {
msg_atipicos <- "No hay presencia de valores atípicos"
}
tabla_indicadores <- data.frame(
"Variable" = c("Aptitud Solar"),
"Rango_MinMax" = paste0("[", round(min(Variable), 2), "; ", round(max(Variable), 2), "]"),
"X" = c(media),
"Me" = c(mediana),
"Mo" = c(moda_txt),
"V" = c(varianza),
"Sd" = c(sd_val),
"Cv" = c(cv),
"As" = c(asimetria),
"K" = c(curtosis),
"Outliers" = msg_atipicos)
tabla_conclusiones_gt <- tabla_indicadores %>%
gt() %>%
tab_header(title = md("**Tabla N°2 de Conclusiones de Aptitud Solar Redondeada de las Plantas Solares**")) %>%
tab_source_note(source_note = "Autor: Martin Sarmiento") %>%
cols_label(
Variable = "Variable",
Rango_MinMax = "Rango",
X = "Media (X)",
Me = "Mediana (Me)",
Mo = "Moda (Mo)",
V = "Varianza (V)",
Sd = "Desv. Est. (Sd)",
Cv = "C.V. (%)",
As = "Asimetría (As)",
K = "Curtosis (K)",
Outliers = "Outliers"
) %>%
tab_options(
heading.title.font.size = px(16),
column_labels.background.color = "#F0F0F0")
tabla_conclusiones_gt| Tabla N°2 de Conclusiones de Aptitud Solar Redondeada de las Plantas Solares | ||||||||||
| Variable | Rango | Media (X) | Mediana (Me) | Moda (Mo) | Varianza (V) | Desv. Est. (Sd) | C.V. (%) | Asimetría (As) | Curtosis (K) | Outliers |
|---|---|---|---|---|---|---|---|---|---|---|
| Aptitud Solar | [5; 10] | 6.76 | 7 | 7 | 0.4728074 | 0.6876099 | 10.17 | 0.5339932 | -0.04084686 | 48 [9 ; 10] |
| Autor: Martin Sarmiento | ||||||||||
La variable “Aptitud Solar” fluctúa entre 5 y 10 y sus valores se encuentran alrededor de 7, con una desviación estándar de 0.6876099, siendo una variable homogénea, cuyos valores se concentran en la parte media baja de la variable con la agregación de valores atípicos de 48 outliers; por todo lo anterior, el comportamiento de la variable es bueno.