You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

236 lines
8.8 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Análisis de Datos Fotovoltaicos - Ciencia de Datos
## Descripción del Proyecto
Proyecto de análisis exploratorio de datos (EDA) utilizando R para estudiar mediciones de producción de paneles solares fotovoltaicos. El dataset contiene mediciones tomadas cada 5 minutos durante 15 días, incluyendo variables ambientales y eléctricas.
##📁 Dataset: med.csv
Estructura de los datos
| Variable | Descripción | Unidades | Tipo |
|----------|-------------------------------------------|-----------------|-----------|
| luxes | Nivel de iluminación en el panel | Lux (lx) | Numérico |
| temp | Temperatura ambiente | °C | Entero |
| hum | Humedad relativa | %RH | Entero |
| curr | Corriente eléctrica producida | Amperios (A) | Numérico |
| volt | Voltaje eléctrico producido | Voltios (V) | Numérico |
| power | Potencia calculada (curr × volt) | Watts (W) | Numérico |
| dd | Día del mes | 1-31 | Entero |
| hh | Hora del día | 0-23 | Entero |
| mm | Minuto de la hora | 0-59 | Entero |
Características principales
- 4320 registros (15 días × 24 horas × 12 mediciones/hora)
- Mediciones cada 5 minutos
- 9 variables por registro
- Sin valores faltantes (dataset limpio)
## Reqsuititos
- Tener el lenguaje R intalado en tu computadora
- Tener unstalado el IDE R Studio, con que que vamos a ejecutar el scrip
- Tener instalados los paquetes de tidyverse y ggplot2 con el siguiente comando:
```r
install.packages("tidyverse")
install.packages("ggplot2")
```
## Script de Análisis Completo
A continuación se presenta el código completo con explicaciones detalladas:
### Configuración inicial y carga de datos
```r
# 1. CARGAR LIBRERÍAS (solo las esenciales)
library(tidyverse) # Para manipulación de datos (dplyr, tidyr)
library(ggplot2) # Para creación de gráficos
```
- Carga las librerías necesarias para el análisis
- tidyverse: Conjunto de paquetes para ciencia de datos
- ggplot2: Sistema de gráficos avanzado
### Carga y exploración inicial
```r
# 2. LEER LOS DATOS
datos <- read.csv("med.csv") # Lee el archivo CSV
# 3. VISTAZO INICIAL
cat("=== INFORMACIÓN BÁSICA ===\n")
cat("Filas:", nrow(datos), "\n") # Cuenta número de filas
cat("Columnas:", ncol(datos), "\n\n") # Cuenta número de columnas
cat("Primeras 6 filas:\n")
print(head(datos)) # Muestra las primeras 6 filas
cat("\n")
```
- Carga los datos desde el archivo med.csv
- Muestra información básica sobre el dataset
- Permite verificar que los datos se cargaron correctamente
### Análisis estadístico descriptivo
```r
# 4. ESTADÍSTICAS DESCRIPTIVAS
cat("=== ESTADÍSTICAS DESCRIPTIVAS ===\n")
print(summary(datos)) # Resumen estadístico de todas las variables
# 5. VALORES FALTANTES
cat("\n=== VALORES FALTANTES ===\n")
cat("Total NA:", sum(is.na(datos)), "\n") # Cuenta valores faltantes
```
- summary(): Calcula estadísticas básicas (mínimo, máximo, media, cuartiles)
- is.na(): Detecta valores faltantes en el dataset
- Proporciona un primer vistazo a la distribución de los datos
### Visualización de datos (Gráficos)
```r
# 6.1 Histograma de potencia - Distribución de valores
ggplot(datos, aes(x = power)) +
geom_histogram(bins = 30, fill = "blue", alpha = 0.7) +
labs(title = "Distribución de Potencia Generada",
x = "Potencia (W)", y = "Frecuencia") +
theme_minimal()
```
- Muestra cómo se distribuyen los valores de potencia
- Ayuda a identificar patrones y valores atípicos
- bins=30: Divide los datos en 30 intervalos
```r
# 6.2 Relación entre luz y potencia - Análisis de correlación
ggplot(datos, aes(x = luxes, y = power)) +
geom_point(alpha = 0.3, color = "darkgreen") + # Puntos semitransparentes
geom_smooth(method = "lm", color = "red") + # Línea de tendencia
labs(title = "Luxes vs Potencia",
x = "Iluminación (lux)", y = "Potencia (W)") +
theme_minimal()
```
- Analiza la relación entre iluminación y potencia
- geom_smooth(): Ajusta una línea de regresión lineal
- alpha=0.3: Hace los puntos semitransparentes para evitar sobreposición
```r
# 6.3 Potencia por hora del día - Análisis temporal
datos %>%
group_by(hh) %>% # Agrupa por hora
summarise(potencia_promedio = mean(power)) %>% # Calcula promedio por hora
ggplot(aes(x = factor(hh), y = potencia_promedio)) +
geom_col(fill = "orange") + # Gráfico de barras
labs(title = "Potencia Promedio por Hora",
x = "Hora del día", y = "Potencia promedio (W)") +
theme_minimal()
```
- group_by(hh): Agrupa los datos por hora (0-23)
- summarise(): Calcula el promedio de potencia para cada hora
- Muestra el patrón diario de producción
### Análisis de correlaciones
```r
# 7. CORRELACIONES BÁSICAS
cat("\n=== CORRELACIONES ===\n")
# Selecciona solo variables numéricas clave
correlaciones <- cor(datos[, c("luxes", "temp", "hum", "power")])
print(round(correlaciones, 3)) # Muestra con 3 decimales
```
- cor(): Calcula la matriz de correlación de Pearson
- Las correlaciones van de -1 a 1:
1: Correlación positiva perfecta
0: No hay correlación
-1: Correlación negativa perfecta
- round(..., 3): Redondea a 3 decimales para mejor legibilidad
### Análisis por día
```r
# 8. ANÁLISIS POR DÍA
cat("\n=== PRODUCCIÓN POR DÍA ===\n")
produccion_dia <- datos %>%
group_by(dd) %>% # Agrupa por día del mes
summarise(
potencia_total = sum(power), # Suma toda la potencia del día
potencia_promedio = mean(power), # Promedio de potencia
mediciones = n() # Cuenta número de mediciones
)
print(produccion_dia) # Muestra la tabla
```
- group_by(dd): Separa los datos por día (dd = día del mes)
- sum(power): Calcula la producción total diaria
- mean(power): Calcula la potencia promedio
- n(): Cuenta cuántas mediciones hay por día
### Modelado predictivo simple
```r
# 9. MODELO LINEAL SIMPLE
cat("\n=== MODELO LINEAL (Potencia ~ Luxes) ===\n")
modelo_simple <- lm(power ~ luxes, data = datos) # Ajusta modelo lineal
print(summary(modelo_simple)) # Muestra resultados del modelo
```
- lm(): Ajusta un modelo de regresión lineal
- power ~ luxes: Predice potencia en función de la iluminación
- summary(): Muestra coeficientes, R², estadísticas del modelo
- R²: Indica qué porcentaje de la variación en potencia es explicado por luxe
### Conclusiones y exportación
```r
# 10. RESUMEN FINAL
cat("\n=== HALLAZGOS PRINCIPALES ===\n")
cat("1. La potencia máxima observada es:", max(datos$power), "W\n")
cat("2. Horas de mayor producción: 11:00 - 15:00\n")
cat("3. Correlación luxes-power:", round(cor(datos$luxes, datos$power), 3), "\n")
cat("4. Temperatura promedio:", round(mean(datos$temp), 1), "°C\n")
cat("5. Humedad promedio:", round(mean(datos$hum), 1), "%\n")
# Guardar resultados si es necesario
write.csv(produccion_dia, "produccion_por_dia.csv", row.names = FALSE)
```
- Resumen de los hallazgos más importantes
- write.csv(): Guarda los resultados en un archivo CSV
- row.names=FALSE: Evita incluir números de fila en el CSV
## Ejecucion de scrip
1. Abrir RStudio
2. File → New File → R Script
3. Copiar y pegar todo el código
4. File → Save As → "analisis.R"
5. Session → Set Working Directory → To Source File Location
6. Ctrl + A (seleccionar todo) → Ctrl + Enter (ejecutar)
## Interpretación de Resultados
1. Correlación luxes-power = 0.951
Interpretación: Relación muy fuerte y positiva
Significado: Cuando aumenta la iluminación, la potencia aumenta proporcionalmente
Conclusión: La iluminación es el factor más importante para predecir producción
2. Patrón diario de producción
Noche (0:00-6:00): Producción cero (sin luz solar)
Mañana (6:00-11:00): Producción creciente
Mediodía (11:00-15:00): Producción máxima
Tarde (15:00-20:00): Producción decreciente
3. Eficiencia del panel
Voltaje constante: ~14.7V (sistema estable)
Corriente variable: Depende de la iluminación
Potencia máxima: 2.97W (capacidad del panel)
## Archivos Generados
Gráficos en pantalla:
- distribucion_potencia.png - Histograma de potencia
- luxes_vs_potencia.png - Dispersión con línea de tendencia
- potencia_por_hora.png - Barras de producción horaria
## Preguntas de Investigación Respondidas
1. ¿Qué factor ambiental afecta más la producción?
Respuesta: La iluminación (luxes), con correlación de 0.951
2. ¿Cuál es el patrón diario de producción?
Respuesta: Forma de campana con pico al mediodía
3. ¿Hay relación entre temperatura y producción?
Respuesta: Sí, moderada (r = 0.292)
4. ¿Cómo afecta la humedad?
Respuesta: Poco efecto (r = -0.155)
5. ¿Se puede predecir la potencia con la iluminación?
Respuesta: Sí, con R² alto (aprox. 0.90)