# 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)