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.
Israel Herrera Gonzalez 2b5daa1dd8 Mod 4 days ago
README.md Mod 4 days ago
analisis_med.R first commit 4 days ago
med.csv first commit 4 days ago

README.md

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:
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

# 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

# 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

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

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

# 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

# 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

# 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

# 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

  1. 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

  1. 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

  1. ¿Cuál es el patrón diario de producción?

Respuesta: Forma de campana con pico al mediodía

  1. ¿Hay relación entre temperatura y producción?

Respuesta: Sí, moderada (r = 0.292)

  1. ¿Cómo afecta la humedad?

Respuesta: Poco efecto (r = -0.155)

  1. ¿Se puede predecir la potencia con la iluminación?

Respuesta: Sí, con R² alto (aprox. 0.90)