##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTOR: Juleydi Miles ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####
#### VARIABLE CAPACIDAD ####
## DATASET ##
# Cargar dataset
suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(readxl))
Datos <- read_excel(file.choose(), sheet = "Dataset_Mundial_Final")
str(Datos)## tibble [58,978 × 29] (S3: tbl_df/tbl/data.frame)
## $ OBJECTID : num [1:58978] 2 3 4 5 6 7 8 9 10 11 ...
## $ code : chr [1:58978] "00001-AFG-P" "00002-AFG-P" "00003-AFG-P" "00004-AFG-P" ...
## $ plant_name : chr [1:58978] "Badghis Solar Power Plant" "Balkh solar farm" "Behsood solar farm" "Dab Pal 4 solar farm" ...
## $ country : chr [1:58978] "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ operational_status : chr [1:58978] "cancelled - inferred 4 y" "cancelled - inferred 4 y" "cancelled - inferred 4 y" "shelved - inferred 2 y" ...
## $ longitude : num [1:58978] 62.9 67.1 70.4 66.2 65.7 ...
## $ latitude : num [1:58978] 35.1 36.7 34.4 33.8 31.7 ...
## $ elevation : num [1:58978] 918 359 629 2288 1060 ...
## $ area : num [1:58978] 6.74 10.72 487.73 111.8 1929.96 ...
## $ size : chr [1:58978] "Small" "Small" "Small" "Small" ...
## $ slope : num [1:58978] 7.38 0.49 1.1 6.16 1.23 ...
## $ slope_type : chr [1:58978] "Moderado" "Plano o casi plano" "Plano o casi plano" "Moderado" ...
## $ curvature : num [1:58978] -0.024 0 0 0.045 -0.005 -0.005 -0.015 0 0 -0.009 ...
## $ curvature_type : chr [1:58978] "Superficies cóncavas / Valles" "Superficies planas o intermedias" "Superficies planas o intermedias" "Superficies convexas / Crestas" ...
## $ aspect : num [1:58978] 96.8 358.5 36.2 305.8 248.4 ...
## $ aspect_type : chr [1:58978] "East" "North" "Northeast" "Northwest" ...
## $ dist_to_road : num [1:58978] 7037.1 92.7 112.1 1705.3 115.8 ...
## $ ambient_temperature : num [1:58978] 14.4 17.88 21.32 8.86 19.64 ...
## $ ghi : num [1:58978] 5.82 5.58 5.8 6.75 6.62 ...
## $ humidity : num [1:58978] 47.7 42.3 36.4 37.3 24.2 ...
## $ wind_speed : num [1:58978] 0.039 0.954 0.234 0.943 0.37 ...
## $ wind_direction : num [1:58978] 187.5 207.4 255.6 160.3 97.7 ...
## $ dt_wind : chr [1:58978] "South" "Southwest" "West" "South" ...
## $ solar_aptitude : num [1:58978] 0.72 0.635 0.685 0.659 0.819 0.819 0.818 0.642 0.63 0.374 ...
## $ solar_aptitude_rounded: num [1:58978] 7 6 7 7 8 8 8 6 6 4 ...
## $ solar_aptittude_class : chr [1:58978] "Alta" "Alta" "Alta" "Alta" ...
## $ capacity : num [1:58978] 32 40 60 3000 100 100 36 50 25 100 ...
## $ optimal_tilt : num [1:58978] 30 31 31.1 33 31 ...
## $ pv_potential : num [1:58978] 4.61 4.41 4.57 5.42 5.17 ...
library(readxl)
library(dplyr)
library(gt)
datos <- read_excel("C:\\Users\\Luis\\Downloads\\prima\\Dataset_Mundial_Final.xls")
Variable <- datos %>%
mutate(dist_km = as.numeric(dist_to_road) / 1000) %>%
filter(dist_km >= 0 & dist_km <= 3) %>%
pull(dist_km) %>%
na.omit()
N <- length(Variable)
min_dec <- min(Variable)
max_dec <- max(Variable)
k_dec <- floor(1 + 3.322 * log10(N))
rango_dec <- max_dec - min_dec
amplitud_dec <- rango_dec / k_dec
cortes_dec <- seq(min_dec, max_dec, length.out = k_dec + 1)
cortes_dec[length(cortes_dec)] <- max_dec + 0.0001
inter_dec <- cut(Variable, breaks = cortes_dec, include.lowest = TRUE, right = FALSE)
ni_dec <- as.vector(table(inter_dec))
hi_dec <- (ni_dec / N) * 100
Ni_asc_dec <- cumsum(ni_dec)
Hi_asc_dec <- cumsum(hi_dec)
Ni_desc_dec <- rev(cumsum(rev(ni_dec)))
Hi_desc_dec <- rev(cumsum(rev(hi_dec)))
TDF_Decimal <- data.frame(
Li = cortes_dec[1:k_dec],
Ls = cortes_dec[2:(k_dec+1)],
MC = (cortes_dec[1:k_dec] + cortes_dec[2:(k_dec+1)]) / 2,
ni = ni_dec,
hi = hi_dec,
Ni_asc = Ni_asc_dec,
Ni_desc = Ni_desc_dec,
Hi_asc = Hi_asc_dec,
Hi_desc = Hi_desc_dec
)
TDF_Final <- TDF_Decimal %>%
mutate(across(c(Li, Ls, MC, hi, Hi_asc, Hi_desc), ~ as.character(round(., 2))),
across(c(ni, Ni_asc, Ni_desc), as.character))
fila_total <- c("TOTAL", "-", "-", as.character(sum(ni_dec)), "100.00", "-", "-", "-", "-")
TDF_Final <- rbind(TDF_Final, fila_total)
TDF_Final %>%
gt() %>%
tab_header(
title = md("**Tabla Nº 1: Distribución de Frecuencias de Distancia a la Vía (km)**"),
subtitle = md("*Rango: 0 a 3 km*")
) %>%
cols_label(
Li = "Lim. Inf", Ls = "Lim. Sup", MC = "Marca Clase",
ni = "ni", hi = "hi (%)", Ni_asc = "Ni (Asc)",
Ni_desc = "Ni (Desc)", Hi_asc = "Hi Asc (%)", Hi_desc = "Hi Desc (%)"
) %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(
style = list(cell_fill(color = "#F0F0F0"), cell_text(weight = "bold")),
locations = cells_column_labels()
) %>%
tab_source_note(source_note = md("**Autor:** Juleydi Miles")) %>%
tab_options(table.width = pct(100))| Tabla Nº 1: Distribución de Frecuencias de Distancia a la Vía (km) | ||||||||
| Rango: 0 a 3 km | ||||||||
| Lim. Inf | Lim. Sup | Marca Clase | ni | hi (%) | Ni (Asc) | Ni (Desc) | Hi Asc (%) | Hi Desc (%) |
|---|---|---|---|---|---|---|---|---|
| 0 | 0.19 | 0.09 | 13583 | 29.97 | 13583 | 45315 | 29.97 | 100 |
| 0.19 | 0.37 | 0.28 | 6889 | 15.2 | 20472 | 31732 | 45.18 | 70.03 |
| 0.37 | 0.56 | 0.47 | 5252 | 11.59 | 25724 | 24843 | 56.77 | 54.82 |
| 0.56 | 0.75 | 0.66 | 4308 | 9.51 | 30032 | 19591 | 66.27 | 43.23 |
| 0.75 | 0.94 | 0.84 | 3764 | 8.31 | 33796 | 15283 | 74.58 | 33.73 |
| 0.94 | 1.12 | 1.03 | 2273 | 5.02 | 36069 | 11519 | 79.6 | 25.42 |
| 1.12 | 1.31 | 1.22 | 1471 | 3.25 | 37540 | 9246 | 82.84 | 20.4 |
| 1.31 | 1.5 | 1.41 | 1328 | 2.93 | 38868 | 7775 | 85.77 | 17.16 |
| 1.5 | 1.69 | 1.59 | 1134 | 2.5 | 40002 | 6447 | 88.28 | 14.23 |
| 1.69 | 1.87 | 1.78 | 1030 | 2.27 | 41032 | 5313 | 90.55 | 11.72 |
| 1.87 | 2.06 | 1.97 | 934 | 2.06 | 41966 | 4283 | 92.61 | 9.45 |
| 2.06 | 2.25 | 2.16 | 779 | 1.72 | 42745 | 3349 | 94.33 | 7.39 |
| 2.25 | 2.44 | 2.34 | 751 | 1.66 | 43496 | 2570 | 95.99 | 5.67 |
| 2.44 | 2.62 | 2.53 | 653 | 1.44 | 44149 | 1819 | 97.43 | 4.01 |
| 2.62 | 2.81 | 2.72 | 599 | 1.32 | 44748 | 1166 | 98.75 | 2.57 |
| 2.81 | 3 | 2.91 | 567 | 1.25 | 45315 | 567 | 100 | 1.25 |
| TOTAL | - | - | 45315 | 100.00 | - | - | - | - |
| Autor: Juleydi Miles | ||||||||
# 1. Configuración de márgenes y área gráfica
# Aumentamos el margen inferior para el título y el autor
par(mar = c(7, 7, 5, 3))
# Obtenemos la cantidad de intervalos de tu TDF_Decimal
k_barras <- nrow(TDF_Decimal)
# 2. Creación del Gráfico (Histograma de barras juntas)
# xaxt = "n" elimina el eje X por defecto para poner el nuestro de 0 a 3
# xaxs = "i" asegura que las barras peguen exactamente en los bordes
grafico <- barplot(TDF_Decimal$ni,
main = "",
xlab = "",
ylab = "",
col = "#B0C4DE",
border = "black",
ylim = c(0, max(TDF_Decimal$ni) * 1.2),
space = 0,
las = 1,
xaxt = "n",
xaxs = "i")
# 3. Personalización del Eje X (Separación exacta 0, 1, 2, 3 km)
# Colocamos marcas cada 1 km dividiendo el ancho total de las barras
axis(1,
at = seq(0, k_barras, length.out = 4),
labels = c("0", "1", "2", "3"),
cex.axis = 1,
font = 2)
# 4. Textos y Etiquetas (Usando tus parámetros de km)
mtext("Cantidad de Plantas (ni)", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Distancia a la Vía (km)", side = 1, line = 3, font = 2)
mtext("Gráfica Nº 1: Distribución de Plantas Solares por Distancia Vial",
side = 3,
line = 2,
adj = 0.5,
cex = 1,
font = 2)
# Créditos
mtext("Autor: Juleydi Miles", side = 1, line = 5, adj = 1, cex = 0.8, font = 3)
# Cuadrícula de guía opcional
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")# 1. Configuración de márgenes
par(mar = c(7, 7, 5, 3))
# Obtenemos la cantidad de intervalos
k_barras <- nrow(TDF_Decimal)
# 2. Creación del Gráfico Global
# El ylim se fija en 58978 (Total de la muestra)
grafico_global <- barplot(TDF_Decimal$ni,
main = "",
xlab = "",
ylab = "",
col = "#B0C4DE",
border = "black",
ylim = c(0, 58978),
space = 0,
las = 1,
xaxt = "n",
xaxs = "i")
# 3. Personalización del Eje X (0 a 3 km)
axis(1,
at = seq(0, k_barras, length.out = 4),
labels = c("0", "1", "2", "3"),
cex.axis = 1,
font = 2)
# 4. Textos y Etiquetas
mtext("Cantidad de Plantas (ni)", side = 2, line = 4.5, cex = 1, font = 1)
mtext("Distancia a la Vía (km)", side = 1, line = 3, font = 2)
mtext("Gráfica Nº 2: Distribución Global de Plantas Solares por Distancia Vial",
side = 3,
line = 2,
adj = 0.5,
cex = 1,
font = 2)
# Créditos
mtext("Autor: Juleydi Miles", side = 1, line = 5, adj = 1, cex = 0.8, font = 3)
# Cuadrícula de guía
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")
# Etiquetas de valor sobre las barras
text(x = grafico_global,
y = TDF_Decimal$ni,
labels = TDF_Decimal$ni,
pos = 3,
cex = 0.7)# 1. Configuración de márgenes
par(mar = c(7, 7, 5, 3))
# 2. Cantidad de barras
k_barras <- nrow(TDF_Decimal)
# 3. Barplot Porcentual Local
# ylim se ajusta al porcentaje más alto encontrado en la tabla
bp_p_local <- barplot(TDF_Decimal$hi,
main = "",
xlab = "",
ylab = "Porcentaje (%)",
col = "#B0C4DE",
border = "black",
space = 0,
las = 1,
xaxt = "n",
xaxs = "i",
ylim = c(0, max(TDF_Decimal$hi) * 1.3))
# 4. Eje X (0 a 3 km)
axis(1, at = seq(0, k_barras, length.out = 4), labels = c("0", "1", "2", "3"), font = 2)
# 5. Títulos y Etiquetas
mtext("Distancia a la Vía (km)", side = 1, line = 3, font = 2)
mtext("Gráfica Nº 3: Distribución Porcentual Local de Plantas Solares",
side = 3, line = 2, adj = 0.5, cex = 1, font = 2)
# 6. Etiquetas de % sobre las barras
text(x = bp_p_local,
y = TDF_Decimal$hi,
labels = paste0(round(TDF_Decimal$hi, 2), "%"),
pos = 3, cex = 0.8)
# Autor
mtext("Autor: Juleydi Miles", side = 1, line = 5, adj = 1, cex = 0.8, font = 3)
grid(nx = NA, ny = NULL, col = "gray90", lty = "dotted")# Este gráfico es fundamental para mostrar qué tan grande es el porcentaje de los intervalos respecto al total (100%).
# 1. Configuración de márgenes
par(mar = c(7, 7, 5, 3))
# 2. Barplot Porcentual Global
# El ylim se fija en 100 para representar la totalidad
bp_p_global <- barplot(TDF_Decimal$hi,
main = "",
xlab = "",
ylab = "Porcentaje (%)",
col = "#B0C4DE",
border = "black",
space = 0,
las = 1,
xaxt = "n",
xaxs = "i",
ylim = c(0, 100)) # Límite global del 100%
# 3. Eje X (0 a 3 km)
axis(1, at = seq(0, k_barras, length.out = 4), labels = c("0", "1", "2", "3"), font = 2)
# 4. Títulos y Etiquetas
mtext("Distancia a la Vía (km)", side = 1, line = 3, font = 2)
mtext("Gráfica Nº 4: Distribución Porcentual Global de Plantas Solares",
side = 3, line = 2, adj = 0.5, cex = 1, font = 2)
# 5. Etiquetas de % sobre las barras
text(x = bp_p_global,
y = TDF_Decimal$hi,
labels = paste0(round(TDF_Decimal$hi, 2), "%"),
pos = 3, cex = 0.8)
# Autor
mtext("Autor: Juleydi Miles", side = 1, line = 5, adj = 1, cex = 0.8, font = 3)
grid(nx = NA, ny = NULL, col = "gray90", lty = "dotted")| Tabla Nº 3: Indicadores Estadísticos de la Distancia a la Vía | ||||||||||
| Resumen de tendencia central, dispersión y forma | ||||||||||
| Variable | Rango | Media (X) | Mediana (Me) | Moda (Mo) | Varianza (V) | Desv. Est. (Sd) | C.V. (%) | Asimetría (As) | Curtosis (K) | Outliers [Intervalo] |
|---|---|---|---|---|---|---|---|---|---|---|
| Distancia a la Vía (km) | [0; 3] | 0.69 | 0.45 | 0.09 | 0.506 | 0.711 | 103.06 | 1.377 | 1.168 | 2959 [2.16; 3] |
| Autor: Juleydi Miles | ||||||||||
La variable “Distancia a la Vía (m)” fluctúa entre [0 ; 3] km y sus valores se encuentran alrededor de 0.45, con una desviación estándar de 0.711, siendo una variable muy heterogénea, cuyos valores se concentran en la parte media alta de la variable con la agregación de valores atípicos de 2959 outliers; por todo lo anterior, el comportamiento de la variable es regular.