##### 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("Data_Mundial_Final.csv", sep = ";", fileEncoding = "latin1")
# 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" ...
##
## 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_solar_raw <- (tabla_solar$Freq / sum(tabla_solar$Freq)) * 100
tabla_solar$hi <- round(hi_solar_raw, 2)
# Cálculo de Frecuencias Acumuladas (Ni y Hi)
Niasc_solar <- cumsum(tabla_solar$Freq)
Hiasc_solar <- round(cumsum(hi_solar_raw), 2)
Hiasc_solar[length(Hiasc_solar)] <- 100.00
# Descendentes
Nidsc_solar <- rev(cumsum(rev(tabla_solar$Freq)))
Hidsc_solar <- round(rev(cumsum(rev(hi_solar_raw))), 2)
Hidsc_solar[1] <- 100.00
# 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 = Hiasc_solar,
Nidsc = Nidsc_solar,
Hidsc = Hidsc_solar
)
# Visualización con 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) |
|---|---|---|---|---|---|---|
| 0 | 71 | 0.12 | 71 | 0.12 | 58771 | 100.00 |
| 1 | 185 | 0.31 | 256 | 0.44 | 58700 | 99.88 |
| 2 | 450 | 0.77 | 706 | 1.20 | 58515 | 99.56 |
| 3 | 740 | 1.26 | 1446 | 2.46 | 58065 | 98.80 |
| 4 | 818 | 1.39 | 2264 | 3.85 | 57325 | 97.54 |
| 5 | 6333 | 10.78 | 8597 | 14.63 | 56507 | 96.15 |
| 6 | 12202 | 20.76 | 20799 | 35.39 | 50174 | 85.37 |
| 7 | 19304 | 32.85 | 40103 | 68.24 | 37972 | 64.61 |
| 8 | 13163 | 22.40 | 53266 | 90.63 | 18668 | 31.76 |
| 9 | 5505 | 9.37 | 58771 | 100.00 | 5505 | 9.37 |
par(mar = c(6, 7, 5, 2))
barplot(tabla_final$Frecuencia,
names.arg = tabla_final$Aptitud,
main = "",
xlab = "",
ylab = "",
col = "#CD6600",
ylim = c(0, max(tabla_final$Frecuencia) * 1.2),
las = 1)
mtext("Cantidad", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Aptitud Solar", side = 1, line = 4)
mtext("Gráfica N°1: Distribución de Cantidad de Plantas Solares por Aptitud Solar Redondeada",
side = 3,
line = 2,
adj = 0.5,
cex = 0.8,
font = 2)par(mar = c(6, 7, 5, 2))
barplot(tabla_final$Frecuencia,
main = "",
xlab = "",
ylab = "",
names.arg = tabla_final$Aptitud,
col = "#CD6600",
ylim = c(0, 58771),
las = 1)
mtext("Cantidad", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Aptitud Solar", side = 1, line = 4)
mtext("Gráfica N°2: Distribución de Cantidad de Plantas Solares por Aptitud Solar Redondeada",
side = 3,
line = 2,
adj = 0.5,
cex = 0.8,
font = 2)par(mar = c(8, 5, 5, 2))
bp3 <- barplot(tabla_final$Porcentaje,
main = "",
xlab = "",
ylab = "Porcentaje (%)",
col = "#CD6600",
ylim = c(0, max(tabla_final$Porcentaje) * 1.3),
names.arg = tabla_final$Aptitud,
las = 1)
mtext("Aptitud Solar", side = 1, line = 4)
mtext("Gráfica N°3: Distribución Porcentual de Plantas Solares por Aptitud Solar Redondeada",
side = 3,
line = 2,
adj = 0.5,
cex = 0.9,
font = 2)
text(x = bp3,
y = tabla_final$Porcentaje,
labels = paste0(round(tabla_final$Porcentaje, 1), "%"),
pos = 3,
cex = 0.8)par(mar = c(8, 5, 5, 2))
bp4 <- barplot(tabla_final$Porcentaje,
main = "",
xlab = "",
ylab = "Porcentaje (%)",
col = "#CD6600",
names.arg = tabla_final$Aptitud,
ylim = c(0, 110),
las = 1)
mtext("Aptitud Solar", side = 1, line = 4)
mtext("Gráfica N°4: Distribución Porcentual de Plantas Solares por Aptitud Solar Redondeada",
side = 3,
line = 2,
adj = 0.5,
cex = 0.9,
font = 2)
text(x = bp4,
y = tabla_final$Porcentaje,
labels = paste0(round(tabla_final$Porcentaje, 1), "%"),
pos = 3,
cex = 0.8)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, 6, 11), 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 = "",
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()
mtext("Gráfica N°6: Ojivas Ascendentes y Descendentes de la\nDistribución de la Aptitud Solar Redondeada",
side = 3,
line = 3,
adj = 0.5,
cex = 0.9,
font = 2)
legend("left",
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
Q1 <- quantile(Variable, 0.25)
Q3 <- quantile(Variable, 0.75)
IQR_val <- Q3 - Q1
lim_inf <- Q1 - 1.5 * IQR_val
lim_sup <- Q3 + 1.5 * IQR_val
outliers_data <- Variable[Variable < lim_inf | Variable > lim_sup]
num_outliers <- length(outliers_data)
if(num_outliers > 0){
rango_outliers <- paste0(num_outliers, " [", min(outliers_data), "; ", max(outliers_data), "]")
} else {
rango_outliers <- "0 [Sin Outliers]"
}
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" = rango_outliers)
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 [Intervalo]"
) %>%
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 [Intervalo] |
|---|---|---|---|---|---|---|---|---|---|---|
| Aptitud Solar | [0; 9] | 6.83 | 7 | 7 | 1.899235 | 1.378127 | 20.18 | -0.9010812 | 1.946554 | 706 [0; 2] |
| Autor: Martin Sarmiento | ||||||||||
La variable “Aptitud Solar” fluctúa entre 0 y 9 y sus valores se encuentran alrededor de 7, con una desviación estándar de 1.378127, siendo una variable homogénea, cuyos valores se concentran en la parte media alta de la variable con la agregación de valores atípicos de 706 outliers; por todo lo anterior, el comportamiento de la variable es bueno.