Logo Studenta

447251

¡Este material tiene más páginas!

Vista previa del material en texto

ESCUELA TÉCNICA SUPERIOR DE INGENIEROS
INDUSTRIALES Y DE TELECOMUNICACIÓN
UNIVERSIDAD DE CANTABRIA
Trabajo Fin de Grado
Predicción y optimización del consumo energético
de clientes mediante algoritmos de análisis y
modelado de datos.
(Prediction and optimization of customer energy consumption
using data analysis and modeling algorithms.)
Para acceder al Título de
Graduado en
Ingeniería de Tecnologías de Telecomunicación
Autor: Palomeque Reyes, Ángel Luis
Julio - 2023
E.T.S. DE INGENIEROS INDUSTRIALES Y DE TELECOMUNICACIÓN
GRADUADO EN INGENIERÍA DE TECNOLOGÍAS DE
TELECOMUNICACIÓN
CALIFICACIÓN DEL TRABAJO FIN DE GRADO
Realizado por: Palomeque Reyes, Ángel Luis
Director del TFG: Pedraja Lombilla, Iván
Profesor ponente: Mirapeix Serrano, Jesús María
Título: “Predicción y optimización del consumo energético de clientes
mediante algoritmos de análisis y modelado de datos.”
Title: “Prediction and optimization of customer energy consumption using
data analysis and modeling algorithms.”
Presentado a examen el día: 21 de julio de 2023
para acceder al Título de
GRADUADO EN INGENIERÍA DE TECNOLOGÍAS DE
TELECOMUNICACIÓN
Composición del tribunal:
Presidente: Mañana Canteli, Mario
Secretario: García Gutierrez, Alberto Eloy
Vocal: Llata García, José Ramón
Este Tribunal ha resulto otorgar la calificación de: ......................................
Fdo.: El Presidente Fdo.: El Secretario
Fdo.: El Vocal Fdo.: El Director del TFG
(solo si es distinto del Secretario)
Vo Bo del Subdirector Trabajo Fin de Grado No
(a asignar por Secretaría)
Agradecimientos
Agradezco a mi familia, por apoyarme desde siempre.
A mi profesor Jesús, por confiar en mí para realizar este proyecto.
A mis compañeros y amigos Álvaro, Alexandru, Sergio, Julio y Matías, por todo el apoyo
mostrado durante mi carrera universitaria.
A Jana, por todo el feedback positivo y la ayuda que me ha brindado.
A mis grandes profesores del Grupo de Ingeniería Telemática (GIT), por hacerme amar el
sector y descubrir mi verdadera pasión por la tecnología y las telecomunicaciones.
Y a Iván y Rodolfo de Nippon Telegraph and Telephone (NTT) DATA, por ayudarme en el
mundo laboral dentro de las empresas tecnológicas y guiarme en mi trayectoria profesional.
2
Resumen
El presente Trabajo de Fin de Grado se centra en el desarrollo de un programa informático
destinado a realizar previsiones de consumo de energía para una comercializadora eléctrica. El
objetivo principal es determinar la cantidad de megavatios (MW), por hora y por día, que la
empresa debe adquirir con antelación para cubrir la demanda de energía de sus suministros.
El programa implementado utiliza técnicas de análisis y modelado de datos para estimar de
manera precisa los niveles de consumo de energía de cada uno de los suministros asociados a
la comercializadora. Para ello, se recopilan y analizan datos históricos presentes en bases de
datos, así como otros factores relevantes, como las condiciones meteorológicas, los patrones
de consumo estacionales y las tendencias del mercado energético.
Mediante algoritmos de pronóstico y procesamiento de datos, el programa genera predic-
ciones a corto, medio y largo plazo sobre los niveles de consumo de energía. Estas previsiones
permiten a la comercializadora tomar decisiones informadas y estratégicas sobre la compra
anticipada de la cantidad adecuada de energía, evitando así problemas de desabastecimiento o
exceso de oferta.
La implementación de este programa proporcionará a la comercializadora una ventaja
competitiva al optimizar su gestión de compras de energía, reducir los costos asociados a la
adquisición y garantizar una cobertura adecuada de la demanda. Además, contribuirá a una
mayor eficiencia energética al evitar desperdicios y ajustar la producción a las necesidades
reales.
3
Abstract
This Bachelor’s Thesis focuses on the development of a computer program aimed at fore-
casting energy consumption for an electricity retailer. The main objective is to determine the
amount of megawatts (MW), per hour and per day, that the company needs to acquire in advance
to meet the energy demand of its supplies.
The implemented program utilizes data analysis and modeling techniques to accurately
estimate the energy consumption levels of each supply associated with the retailer. Historical
data stored in databases, along with other relevant factors such as weather conditions, seasonal
consumption patterns, and energy market trends, are collected and analyzed.
Through forecasting algorithms and data processing, the program generates short, medium,
and long-term predictions of energy consumption levels. These forecasts enable the retailer to
make informed and strategic decisions regarding the proactive procurement of the appropriate
amount of energy, thereby avoiding supply shortages or excess.
The implementation of this program will provide the retailer with a competitive advantage
by optimizing their energy purchasing management, reducing acquisition costs, and ensuring
adequate coverage of demand. Furthermore, it will contribute to greater energy efficiency by
avoiding waste and adjusting production to real needs.
4
Índice general
Índice de figuras 7
Índice de tablas 8
Índice de acrónimos 9
Listings 11
1 Objetivos y contexto 12
1.1. Contexto empresarial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2. Ekiluz, empresa comercializadora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3. NTT DATA, consultora tecnológica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4. OMIE y la compra de electricidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5. Inicio del proyecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2 Fundamentos teóricos 16
2.1. Conceptos básicos de previsión de energía. . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2. Principios del Machine Learning (ML) aplicados a la previsión. . . . . . . . . . . . . . . 18
2.3. Introducción a Python, Pandas y bibliotecas relevantes. . . . . . . . . . . . . . . . . . . 18
3 Análisis de datos 20
3.1. Recopilación y descripción de los datos utilizados. . . . . . . . . . . . . . . . . . . . . 21
3.2. Análisis exploratorio de los datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3. Procesamiento de los datos utilizando Pandas. . . . . . . . . . . . . . . . . . . . . . . . 22
4 Modelado y entrenamiento 24
4.1. Selección y justificación del modelo de ML adecuado. . . . . . . . . . . . . . . . . . . 25
4.2. Entrenamiento y evaluación del modelo. . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.3. Implementación del modelo en el programa. . . . . . . . . . . . . . . . . . . . . . . . . 26
5 Interfaz de usuario con Figma 28
5.1. Introducción a Figma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2. Diseño y prototipado de la interfaz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5
5.3. Integración de la interfaz de usuario en el programa. . . . . . . . . . . . . . . . . . . . . 30
5.4. Funcionalidad del programa con interfaz. . . . . . . . . . . . . . . . . . . . . . . . . . 30
6 Docker y automatización 32
6.1. Introducción a Docker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6.2. Configuración del entorno de ejecución. . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.3. Envío automatizado de correo electrónico. . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.4. Reporting utilizando webhooks de Microsoft Teams. . . . . . . . . . . . . . . . . . . . . 36
6.5. Funcionalidad del programa, versión Docker. . . . . . . . . . . . . . . . . . . . . . . . 37
7 Conclusiones 38
7.1. Resumen de los resultados obtenidos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
7.2. Cumplimiento de los objetivos planteados. . . . . . . . . . . . . . . . . . . . . . . . . . 39
7.3. Reflexiónsobre posibles mejoras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
7.4. Despliegue en la nube pública con Azure. . . . . . . . . . . . . . . . . . . . . . . . . . 41
Bibliografía 43
A Extractos de código 44
B Repositorios de GitHub 50
C Calculo del valor previsión 51
D Excels de resultados 52
6
Índice de figuras
1.1. Logo de Ekiluz. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2. Logo de NTT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3. Logo de Operador del Mercado Ibérico de Energía (OMIE). . . . . . . . . . . . . . . . . . . 14
2.1. Ciclo de compra de energía. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2. Logo de PostgreSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3. Logo de scikit-learn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4. Logo de Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5. Logo de Pandas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.1. Funcionamiento de una vista materializada. [3] . . . . . . . . . . . . . . . . . . . . . . . . 22
4.1. Método del codo. [5] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.1. Logo de Figma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2. Interfaz del programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.3. Esquema funcional del programa con interfaz. Elaboración propia. . . . . . . . . . . . . . . 31
6.1. Logo de Docker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6.2. Características del contenerdor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.3. Panel de control del contenerdor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.4. Esquema funcional del programa en Docker. Elaboración propia. . . . . . . . . . . . . . . . 37
7.1. Logo de Apache Spark. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7.2. Logo de Azure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
B.1. Logo de GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
D.1. Excel de previsión, con las unidades en vatios hora. . . . . . . . . . . . . . . . . . . . . . . 52
D.2. Excel de compra, con las unidades en megavatios hora (Mwh) y aproximado a décimas. . . . 53
7
Índice de tablas
1.1. Road Map del proyecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1. Ejemplo de dato en tabla p5d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
C.1. Valores de la variable Cy para el día y hora 05/07/2023-14:00:00, en vatios hora. . . . . . . . 51
C.2. Valores de la variable Cw para el día y hora 05/07/2023-14:00:00, en vatios hora. . . . . . . 51
C.3. Resultado de previsión, en vatios hora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8
Índice de acrónimos
ACR Azure Container Registry.
AKS Azure Kubernetes Service.
AML Azure Machine Learning.
ARIMA Autoregressive Integrated Moving Average.
BO Back Office.
CNN Convolutional Neural Network.
CSV Comma Separated Values.
CUPS Código Universal de Punto de Suministro.
DAO Data Access Object.
DNI Documento Nacional de Identidad.
GIT Grupo de Ingeniería Telemática.
GUI Graphical User Interface.
HTTP Hypertext Transfer Protocol.
KNN K-Nearest Neighbors.
ML Machine Learning.
Mwh megavatios hora.
NTT Nippon Telegraph and Telephone.
OMIE Operador del Mercado Ibérico de Energía.
RNN Red Neuronal Recurrente.
9
SARIMA Seasonal Autoregressive Integrated Moving Avera-
ge.
SMTP Simple Mail Transfer Protocol.
SQL Structured Query Language.
SSL Secure Sockets Layer.
TLS Transport Layer Security.
10
Listings
A.1. Función encargada de la extracción de consumos. . . . . . . . . . . . . . . . . . . . . . 44
A.2. Data Access Object (DAO) de la tabla p5d. . . . . . . . . . . . . . . . . . . . . . . . . 44
A.3. Archivo Dockerfile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
A.4. Función encargada del envío de correo electrónico mediante Simple Mail Transfer Protocol
(SMTP). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
A.5. Función encargada del reporte en Microsoft Teams. . . . . . . . . . . . . . . . . . . . . 47
A.6. Graphical User Interface (GUI) del programa. . . . . . . . . . . . . . . . . . . . . . . . 48
11
Capítulo 1
Objetivos y contexto
En este capítulo vamos a centrar el contexto del proyecto y cuáles eran las necesidades que se debían
suplir. Se hablará de cómo se realiza la compra de la electricidad por parte de las comercializadoras
energéticas, de dónde sacamos los datos de entrada y las métricas, del procedimiento que se llevaba a
cabo en la empresa antes de esta solución y de las primeras ideas de cómo abordar el proyecto.
1.1. Contexto empresarial.
El proyecto es un encargo de la comercializadora eléctrica Ekiluz 1.1 y lo realiza NTT DATA 1.2 en un
contexto de prácticas en la empresa.
Ekiluz, como comercializadora eléctrica, tiene la responsabilidad de abastecer a sus clientes con energía
eléctrica de manera eficiente y competitiva. Para lograr esto, es esencial que la compañía cuente con un
sistema de compras sólido y eficaz que le permita adquirir electricidad al mejor precio y en las condiciones
más favorables. Gracias a la colaboración entre las dos empresas, se espera que la comercializadora pueda
mejorar significativamente su capacidad para realizar compras de electricidad de manera más eficiente y
estratégica. Esto se traducirá en un ahorro de costos para Ekiluz y, en última instancia, en la capacidad de
ofrecer precios más competitivos a sus clientes.
Figura 1.1: Logo de Ekiluz. Figura 1.2: Logo de NTT.
12
1.2. Ekiluz, empresa comercializadora.
Ekiluz es una empresa impulsada por Repsol y Krean para para promover la creación de cooperativas
ciudadanas de generación renovable.
Este tipo de comunidades energéticas, alineadas con la normativa climática europea, facilitan una mayor
involucración de la ciudadanía en la generación renovable y, en el caso de Ekiluz, posibilitan un acceso
generalizado a la energía eléctrica fotovoltaica, incluso en entornos complejos como núcleos urbanos con
edificios verticales y sin espacios inmediatos para ubicar los paneles solares. Ekiluz también permite a
zonas rurales organizarse y acceder a instalaciones colectivas, contribuyendo a su desarrollo socioeconó-
mico.
Para lograrlo, Ekiluz utiliza infraestructuras energéticas de una dimensión significativa, con parques
fotovoltaicos que generan energía de cercanía (kilómetro 0). El objetivo es que los cooperativistas puedan
aprovechar las economías asociadas a este tipo de instalaciones y generar en las mismas un volumen de
energía equivalente a todo su consumo eléctrico anual.
Los resultados revierten en la factura eléctrica de cada cooperativista, que podrá realizar un seguimiento
de la generación de electricidad renovable de los paneles que tiene asignados, así como de la mejora
ambiental conseguida.
Además de este modelo renovable, también se compra electricidad para suplir todos los suministros de la
compañía, que ronda los 150 clientes.
1.3. NTT DATA, consultora tecnológica.
NTT DATA es una empresa líder a nivel mundial en servicios de tecnología de la información y consultoría.
Con una presencia global y una vasta experiencia en diversos sectores, NTT DATA ofrece soluciones
innovadoras y de vanguardia para ayudar a sus clientes a alcanzar sus objetivos empresariales.
La compañía se destaca por su enfoque centrado en el cliente, brindando soluciones personalizadas y
adaptadas a las necesidadesespecíficas de cada organización. Con un profundo conocimiento tecnológico
y un amplio abanico de servicios, NTT DATA colabora estrechamente con sus clientes para impulsar la
transformación digital, mejorar la eficiencia operativa y lograr un crecimiento sostenible.
13
1.4. OMIE y la compra de electricidad.
La OMIE es el operador del mercado eléctrico en España y Portugal. Organiza subastas para la compra
y venta de energía eléctrica, las cuales siguen un proceso específico. A continuación, se explica cómo
funciona el proceso de compras de subastas en OMIE:
1. Convocatoria de la subasta. La OMIE anuncia la convocatoria de una subasta, indicando la fecha y
hora en la que se llevará a cabo. Este anuncio se realiza con antelación para permitir a los participantes
prepararse y presentar sus ofertas.
2. Participantes. Los participantes en las subastas de OMIE suelen ser generadores de energía, comer-
cializadores y grandes consumidores de electricidad. Estos actores tienen la posibilidad de presentar
ofertas de compra de energía en la subasta.
3. Registro de ofertas. Los participantes deben registrar sus ofertas antes de la fecha y hora límite
establecidas por la OMIE. Cada oferta debe especificar la cantidad de energía que desean comprar y
el precio máximo que están dispuestos a pagar por ella.
4. Cierre de la subasta. Una vez que finaliza el plazo para registrar las ofertas, la OMIE cierra la subasta
y se procede a la asignación de los volúmenes de energía en función de las ofertas presentadas.
5. Proceso de asignación. La asignación de energía se realiza utilizando un algoritmo de casación que
tiene en cuenta el precio máximo ofrecido por los participantes. Se asigna la energía a los participantes
en orden descendente de precios, comenzando por aquellos que ofrecieron los precios más altos.
6. Resultados y liquidación. Una vez finalizada la asignación, la OMIE publica los resultados de la
subasta, indicando los volúmenes de energía asignados a cada participante y el precio de casación.
Este proyecto tiene una gran importancia en el registro de ofertas, ya que calcula el monto total de la
energía que la compañía debe comprar para suplir la demanda prevista.
Figura 1.3: Logo de OMIE.
14
1.5. Inicio del proyecto.
El proyecto comienza a finales de febrero de 2023, debido a la necesidad de mejorar los datos obtenidos en
la previsión del consumo energético por parte de todos los clientes de la compañía, ya que es esencial para
realizar la compra, por adelantado, de los Mwh que se consumirán semana a semana. En ese momento la
forma de calcular esa previsión no era precisa, ya que se utilizaban los consumos que se habían dado el
mismo día del año anterior, sin tener ningún otro factor en cuenta, por lo que necesita una mejora para que
sea viable.
Para optimizar el tiempo y los recursos disponibles se ha realizado un road map del proyecto que se puede
ver en la Tabla 1.1. La segmentación en objetivos a corto plazo favorece la gestión del proyecto y facilita
la entrega en la fecha deseada.
Tabla 1.1: Road Map del proyecto.
Fecha Objetivo
Primera quincena de marzo. Presentación del proyecto e ideas iniciales.
Segunda quincena de marzo. Exploración y selección de tecnologías a utilizar.
Primera quincena de abril. Desarrollo del algoritmo.
Segunda quincena de abril. Diseño e implementación de la interfaz gráfica.
Primera quincena de mayo. Testing y automatización.
15
Capítulo 2
Fundamentos teóricos
En este capítulo, se abordan los fundamentos teóricos que sustentan el desarrollo del programa de
previsión de energía utilizando Python con Pandas y ML. Comprender los conceptos clave es esencial
para adentrarnos en el proceso de análisis de datos y la implementación del modelo.
En primer lugar, se explorarán los conceptos básicos de previsión de energía, donde se analizará la
importancia de este campo en el contexto actual y se examinarán los factores que influyen en la demanda y
producción de energía. Además, se revisarán las técnicas tradicionales de previsión utilizadas en el sector.
A continuación, se presentarán los principios fundamentales del ML aplicados a la previsión de energía.
Se discutirán los diferentes enfoques de aprendizaje automático, como el aprendizaje supervisado y no
supervisado, y se explorará el algoritmo utilizado para la clasificación.
Por último, se ofrecerá una introducción a Python y las bibliotecas relevantes, como Pandas, que desem-
peñarán un papel crucial en el procesamiento y análisis de datos. Se describirán las funcionalidades y
características clave de estas herramientas, así como su importancia en el desarrollo del programa de
previsión de energía.
Este capítulo sentará las bases teóricas necesarias para comprender el proceso de análisis de datos y
modelado que se llevará a cabo en los siguientes capítulos. Al adquirir un conocimiento sólido en los
fundamentos de previsión de energía y ML, estaremos preparados para abordar los desafíos técnicos y
obtener resultados precisos y fiables en nuestro programa.
16
2.1. Conceptos básicos de previsión de energía.
La previsión de energía es un campo crucial para la planificación y gestión eficiente de los recursos
energéticos, permitiendo anticipar la demanda futura y optimizar la generación y distribución de energía.
A continuación, se describirán los principales conceptos abordados en esta sección:
1. Demanda energética. Se refiere a la cantidad de energía requerida por un determinado sistema,
área geográfica o sector en un período de tiempo específico. La comprensión de los patrones y
tendencias de la demanda energética es esencial para la planificación y gestión efectiva de los recursos
energéticos.
2. Factores influyentes. La previsión de energía puede estar influenciada por diversos factores, como el
clima, los días festivos, los cambios estacionales y otros eventos externos. Es importante tener en
cuenta estos factores y considerar su impacto al realizar las predicciones.
3. Métodos de previsión. Existen diversos enfoques y técnicas utilizadas para realizar la previsión
de energía. El proyecto está enfocado en esta parte, donde se calcula mediante técnicas de ML y
modelado de datos dicha previsión.
4. Validación y evaluación de la precisión. Una vez realizada la previsión de energía, es importante
evaluar la precisión y el rendimiento del modelo utilizado. Esto implica comparar las predicciones
realizadas con los valores reales observados en un conjunto de datos independiente. En el Capítulo ??
se analizan en mayor profundidad.
En la Figura 2.1 se explica gráficamente el ciclo de compra de la energía una vez se ha calculado la
previsión. Se comprueba que el OMIE es el encargado de gestionar las subastas diarias de electricidad,
cuya compra es realizada por las comercializadoras.
Figura 2.1: Ciclo de compra de energía.
17
2.2. Principios del ML aplicados a la previsión.
El ML [1] es una disciplina que permite a los sistemas informáticos aprender y mejorar automáticamente
a través de la experiencia, sin ser programados explícitamente para realizar una tarea específica. En el
contexto de la previsión de energía, el uso de técnicas de ML ha demostrado ser altamente efectivo para
analizar y modelar los patrones y tendencias de los datos energéticos.
Una de las bibliotecas más populares y ampliamente utilizadas para implementar algoritmos de ML en
Python es scikit-learn. Dicha biblioteca es la utilizada en este proyecto y proporciona una amplia gama de
algoritmos y herramientas para realizar tareas de previsión, incluida la previsión de energía.
Al aplicar los principios del ML a la previsión de energía utilizando scikit-learn, se siguen algunos
pasos clave. En primer lugar, se requiere un conjunto de datos de entrenamiento que contenga ejemplos
históricos de la variable a predecir, en este caso, datos de consumo energéticos que disponemos dentro de
tablas en PostgreSQL. Este conjunto de datos servirá como base para que el modelo aprenda lospatrones
y relaciones existentes en los datos y pueda realizar predicciones futuras.
Una vez seleccionado el modelo, se procede al entrenamiento utilizando el conjunto de datos de entrena-
miento. Durante el entrenamiento, el modelo analiza los patrones y relaciones presentes en los datos para
ajustar sus parámetros internos y aprender a realizar predicciones precisas. En este proyecto se agrupan en
clústeres los suministros teniendo en cuenta los factores de zona, potencia y consumo, asignando a los
Código Universal de Punto de Suministro (CUPS) sin datos de consumo previo el valor de su clúster.
Figura 2.2: Logo de PostgreSQL.
Figura 2.3: Logo de scikit-learn.
2.3. Introducción a Python, Pandas y bibliotecas relevantes.
En este apartado, se introducirá Python, Pandas y otras bibliotecas relevantes utilizadas en el desarrollo
del programa de previsión de energía. Python es un lenguaje de programación ampliamente utilizado en
el ámbito del análisis de datos debido a su simplicidad, legibilidad y su amplio conjunto de bibliotecas
especializadas.
Pandas es una biblioteca de Python que proporciona estructuras de datos y herramientas para el análisis y
manipulación de datos. Es especialmente útil para trabajar con datos tabulares y series temporales, como
los conjuntos de datos de clientes utilizados este proyecto. Pandas permite cargar datos desde diferentes
fuentes, realizar operaciones de filtrado, agregación y transformación, y realizar cálculos estadísticos de
18
manera eficiente. Además permite exportar los dataframes generados a formato Excel. Gran parte de los
conceptos son extraídos del libro Pandas for Everyone: Python Data Analysis [2].
Además de Pandas, existen otras bibliotecas relevantes que complementan su funcionalidad y permiten
realizar tareas más avanzadas en el análisis de datos. Algunas de las más importantes son:
1. NumPy. Proporciona estructuras de datos y funciones para realizar cálculos numéricos eficientes. Es
fundamental para muchas operaciones de manipulación y procesamiento de datos en Python.
2. Matplotlib. Permite crear visualizaciones gráficas de los datos, como gráficos de líneas, histogramas,
diagramas de dispersión, entre otros. Es una herramienta útil para analizar y comunicar los resultados
del programa de previsión de energía.
3. Tkinter. Es una biblioteca de interfaz GUI para Python. Proporciona una amplia gama de widgets
y herramientas para crear aplicaciones de escritorio interactivas. Con Tkinter, se ha desarrollado e
implementado una interfaz de usuario sencilla y funcional en conjunto con Figma, herramienta que se
tratará en el Capítulo 5.
En conclusión, estas bibliotecas combinadas ofrecen un conjunto sólido de herramientas para abordar los
desafíos en la previsión de energía y maximizar la precisión y rendimiento del programa.
Figura 2.4: Logo de Python. Figura 2.5: Logo de Pandas.
19
Capítulo 3
Análisis de datos
En el presente capítulo, se aborda el análisis de datos como un componente fundamental en el desarrollo
del programa de previsión de energía utilizando Python con Pandas y ML principalmente. El análisis
exhaustivo de los datos es un paso crucial para comprender y extraer información relevante que nos
permita realizar predicciones precisas y fundamentadas.
En primer lugar, se realiza una recopilación de los datos utilizados en el proyecto, resaltando su importancia
y relevancia en el contexto de la previsión de energía. Se describirán las fuentes de datos y se explicará
cómo se han recolectado, asegurando la fiabilidad y calidad de la información obtenida.
Posteriormente, se llevará a cabo un análisis exploratorio de los datos recopilados. Mediante técnicas y
herramientas estadísticas, se examinarán las características principales de los datos, identificando patrones,
tendencias y posibles anomalías. Este análisis nos permitirá obtener una visión detallada y comprensiva
del conjunto de datos, sentando las bases para la toma de decisiones en etapas posteriores.
Una vez realizado el análisis exploratorio, se procederá al procesamiento de los datos utilizando la
biblioteca Pandas. Se abordarán técnicas de filtrado, transformación y normalización de los datos con
el objetivo de prepararlos adecuadamente para el modelado y entrenamiento de los algoritmos de ML.
Este paso resulta esencial para garantizar la calidad y coherencia de los datos utilizados en la fase de
predicción.
En resumen, este capítulo se enfoca en el análisis de datos como una etapa esencial en el desarrollo del
programa de previsión de energía. A través de la recopilación, análisis exploratorio y procesamiento de los
datos, se busca obtener una comprensión profunda del conjunto de datos y prepararlos óptimamente para
el modelado. De esta manera, se sientan las bases para la obtención de predicciones precisas y fiables.
20
3.1. Recopilación y descripción de los datos utilizados.
En esta sección, se abordará el proceso de recopilación y descripción de los datos utilizados en el programa
de previsión de energía. La calidad y relevancia de los datos son fundamentales para el éxito de cualquier
proyecto de análisis y predicción.
La recopilación de datos puede involucrar diversas fuentes, como bases de datos, registros históricos,
sensores o dispositivos de medición. En el caso de este proyecto, se utiliza una base de datos PostgreSQL
en la cuál están almacenados los datos de los clientes.
La base de datos PostgreSQL es un sistema de gestión de bases de datos relacional que proporciona una
estructura eficiente y segura para almacenar grandes volúmenes de información. Se utiliza ampliamente
en aplicaciones que requieren un almacenamiento confiable y una manipulación eficiente de datos.
En este caso, disponemos de tres tablas de datos:
1. Tabla contratos. Aquí se encuentran los datos del cliente, como Documento Nacional de Identidad
(DNI) o número de contrato, asociado a los identificadores de suministro.
2. Tabla p5d. Es la que almacena los datos de energía consumida y generada, en caso de tener fuente de
energía solar, en vatios hora. Se almacena por cada CUPS, en cada hora del día concreto. Se puede
ver un ejemplo en la tabla 3.1
3. Tabla f5d. Su estructura es similar a la tabla p5d, ya que son los datos de consumo o generación que
ya han sido evaluados para facturar.
Tabla 3.1: Ejemplo de dato en tabla p5d
fecha cups entrante (wh) saliente (wh)
2022-10-24 22:00:00.000 ES0021XXXXXXXXXXXXAA 203 0
2022-10-24 23:00:00.000 ES0021XXXXXXXXXXXXAA 145 0
3.2. Análisis exploratorio de los datos.
En esta sección, se abordará el análisis exploratorio de los datos utilizados en el programa de previsión de
energía. El análisis exploratorio es una etapa crucial en cualquier proyecto de análisis de datos, ya que
permite comprender la estructura, la distribución y las relaciones entre las variables.
El objetivo del análisis exploratorio es obtener información relevante sobre los datos, identificar patrones,
detectar valores atípicos y realizar visualizaciones que ayuden a comprender mejor la naturaleza de los
datos.
Lo primero que se puede comprobar es que disponemos de dos tablas con valores parecidos, en este
caso serían las tablas p5d y f5d, por lo que se comparan los valores de ambas tablas para cada hora y
suministro concreto, y en caso de que el valor de la tabla f5d este vacío, que significaría que todavía no se
ha actualizado el valor facturado, se usa los vatios hora de la tabla p5d por lo que siempre se dispone del
consumo actualizado.
21
Para poder comparar sendos datos se crean vistas materializadas. Una vista materializada en una base de
datos es una copia física de los resultados de una consulta almacenada como una tabla independiente. A
diferencia de una vista convencional, que es una representación virtual de los datos, una vista materializada
guarda los datos de forma persistente en disco. En resumen, una vista materializada es una tabla física que
almacena los resultados de una consulta paramejorar el rendimiento de las consultas frecuentes 3.1.
La función encargada de extraer los datos de consumo se puede ver en el Anexo A
Figura 3.1: Funcionamiento de una vista materializada. [3]
3.3. Procesamiento de los datos utilizando Pandas.
Pandas es una biblioteca de análisis de datos de código abierto que proporciona estructuras de datos y
herramientas eficientes para manipular y analizar datos. Una de las funcionalidades clave de Pandas es la
capacidad de cargar y leer diferentes formatos de datos, como archivos Comma Separated Values (CSV),
Excel, Structured Query Language (SQL) y muchos otros. Esto permite acceder a los datos almacenados
en diferentes fuentes y prepararlos para su posterior análisis.
En este proyecto, tal como se comentaba anteriormente, los datos de las tablas de la base de datos se
cargarán en forma de dataframes mediante el uso de una DAO. Una DAO es un componente de software
que suministra una interfaz común entre la aplicación y la base de datos. Este código se puede consultar
en el Anexo A.
Al disponer de los dataframes con toda la información, ésta puede ser filtrada y manipulada de tal
forma que calculamos la media de consumo de cada suministro en la misma época de hace un año
complementado con lo consumido hace dos semanas para disponer de datos más precisos. Se identifica la
potencia que se dispone en todos los CUPS y la provincia a la que pertenecen, para su posterior utilización
como factores dentro del algoritmo de ML.
22
Después del paso por el algoritmo de ML disponemos del dataframe final en el cuál se identifica la
previsión vatio/hora de cada suministro en el periodo de tiempo deseado. Se filtran los datos de tal forma
que quede el total de electricidad consumida por todos los suministros, separándolo de tal forma que las
filas sean las horas y las columnas los días. En el apartado 7.1 se puede comprobar la representación en el
formato final.
23
Capítulo 4
Modelado y entrenamiento
En este capítulo, se aborda el proceso de modelado y entrenamiento de nuestro programa de previsión de
energía, basado en Python con Pandas y ML. El modelado preciso y eficiente es fundamental para obtener
predicciones confiables y de calidad en el campo de la previsión de energía.
En primer lugar, se realizará una selección rigurosa del modelo de ML más apropiado para abordar el
problema de previsión de energía. Se examinarán diversos algoritmos, teniendo en cuenta las características
de los datos y los objetivos establecidos. La elección del modelo adecuado resulta esencial para garantizar
resultados óptimos y representativos.
Una vez seleccionado el modelo, se procederá a preparar los datos para el entrenamiento. Se realizará
una partición adecuada del conjunto de datos en conjuntos de entrenamiento y prueba, y se aplicarán
técnicas de preprocesamiento adicionales según las necesidades específicas del modelo seleccionado.
Esto permitirá que el modelo aprenda los patrones y relaciones presentes en los datos y pueda realizar
predicciones precisas sobre nuevas instancias.
A continuación, se implementará el modelo en Python utilizando las bibliotecas de ML elegida, en este
caso scikit-learn, y se llevará a cabo el proceso de entrenamiento, explicando como funciona internamente
y su función dentro del programa.
En resumen, este capítulo se enfoca en el modelado y entrenamiento del programa de previsión de energía.
A través de la selección del modelo adecuado, la preparación de los datos, el entrenamiento y la evaluación
rigurosa, buscamos obtener un modelo preciso y confiable que permita realizar predicciones significativas
en el campo de la previsión de energía.
24
4.1. Selección y justificación del modelo de ML adecuado.
En esta sección, abordaremos la selección y justificación del modelo de ML adecuado para la previsión de
energía en nuestro programa. La elección de un modelo apropiado es esencial para obtener resultados
precisos y confiables en nuestras previsiones.
Al considerar la previsión de energía, se pueden utilizar modelos, como modelos de regresión, modelos
de series de tiempo o modelos de redes neuronales. Cada uno de estos enfoques tiene sus propias
características y suposiciones, por lo que es importante seleccionar el modelo que mejor se adapte a
nuestra problemática y a los datos disponibles.
Uno de los modelos ampliamente utilizados en la previsión de energía es el modelo de regresión. Este
tipo de modelo busca establecer una relación entre las variables de entrada, como el consumo de energía
histórico y las condiciones climáticas, con la variable de salida, que es la demanda de energía futura. La
regresión lineal, la regresión polinomial y la regresión de series de tiempo son algunos ejemplos comunes.
Otro enfoque popular es el uso de modelos de series de tiempo, especialmente cuando se trata de datos que
muestran una dependencia temporal clara. Estos modelos tienen en cuenta la tendencia, la estacionalidad
y los patrones cíclicos presentes en los datos históricos para realizar la previsión futura. Algunos ejemplos
de modelos de series de tiempo incluyen el modelo Autoregressive Integrated Moving Average (ARIMA),
Seasonal Autoregressive Integrated Moving Average (SARIMA) y Prophet.
Además, los modelos de redes neuronales, como las Red Neuronal Recurrente (RNN) y las redes neu-
ronales de atención (Transformer), son capaces de capturar relaciones complejas en los datos y pueden
adaptarse a diferentes patrones y condiciones. Sin embargo, su implementación es compleja y poco
efectiva en el contexto en el que nos encontramos.
En nuestro caso, para la previsión de energía, hemos decidido utilizar el modelo sklearn debido a su
simplicidad y capacidad para capturar relaciones lineales entre las variables de entrada y la demanda.
La selección del modelo de ML adecuado para la previsión de energía es un paso crucial en nuestro
programa. Al elegir el enfoque correcto y justificar nuestra elección basada en las características de los
datos y los objetivos del proyecto, podemos obtener previsiones más precisas y confiables, lo que es
fundamental para una gestión eficiente de la energía y la toma de decisiones informadas.
4.2. Entrenamiento y evaluación del modelo.
El algoritmo K-Nearest Neighbors (KNN) [1], o Vecinos más Cercanos en español, es un algoritmo de
aprendizaje supervisado utilizado tanto para problemas de clasificación como de regresión. Es considerado
uno de los algoritmos más sencillos y fáciles de entender en el campo del aprendizaje automático.
El algoritmo KNN se basa en la idea de que objetos similares tienden a estar cerca unos de otros en el
espacio de características. Funciona de la siguiente manera:
1. Preparación de los datos. En esta etapa, se recopilan y preparan los datos de entrenamiento, los
cuales consisten en un conjunto de características (variables) y sus respectivas etiquetas.
2. Cálculo de la distancia. Para determinar qué vecinos son los más cercanos a un punto dado, el
25
algoritmo KNN calcula la distancia entre ese punto y todos los demás puntos en el conjunto de
entrenamiento. La distancia más comúnmente utilizada es la distancia euclidiana, aunque también se
pueden utilizar otras métricas de distancia según la naturaleza del problema.
3. Selección de vecinos. Una vez calculadas las distancias, el algoritmo selecciona los K puntos más
cercanos al punto de interés. El valor de K se elige previamente y determina la cantidad de vecinos
considerados en la clasificación.
4. Votación y clasificación: En el caso de un problema de clasificación, los vecinos seleccionados votan
por la clase a la que pertenecen. La clase más frecuente entre los vecinos se asigna como la clase del
punto de interés. En el caso de un problema de regresión, los vecinos seleccionados promedian sus
valores objetivo y se utiliza el promedio como el valor de predicción.
El algoritmo KNN no requiere un proceso de entrenamiento explícito, ya que se basa en la comparacióndirecta de puntos de datos. Sin embargo, es importante elegir adecuadamente el valor de K, ya que un
valor demasiado pequeño puede hacer que el modelo sea sensible a ruido y valores atípicos, mientras que
un valor demasiado grande puede hacer que el modelo pierda precisión y generalización.
En resumen, el algoritmo KNN es un método simple pero poderoso de aprendizaje automático que clasifica
objetos basándose en la similitud con sus vecinos más cercanos. Es ampliamente utilizado debido a su
facilidad de implementación y adaptabilidad a problemas de clasificación y regresión, siendo una solución
muy potente para la previsión del consumo energético.
4.3. Implementación del modelo en el programa.
La implementación del modelo en el programa consiste en traducir el algoritmo de aprendizaje automático
seleccionado, en este caso el algoritmo KNN, en código Python que pueda ejecutarse.
En primer lugar, se importa la biblioteca de aprendizaje automático, scikit-learn [4], que proporciona una
amplia gama de algoritmos y herramientas para el desarrollo de modelos de ML.
En este proyecto, se utiliza el algoritmo que nos permite agrupar los suministros teniendo en cuenta
semejanzas dependiendo de unas determinadas características. En este caso, los factores son:
1. Zona. La localización en la que se encuentra el suministro es esencial para conocer las rutinas de
consumo, ya que factores como el clima influyen de forma directa en el uso de la electricidad.
2. Potencia contratada. La potencia máxima contratada por el cliente, medida en kilovatios, indica la
capacidad de uso de electricidad en un momento específico. Normalmente, a mayor potencia, mayor
consumo eléctrico.
3. Previsión. Valor calculado con los datos que disponemos de los consumos históricos de cada sumi-
nistro, su cálculo se puede comprobar en el Anexo C, donde Cw es del consumo a esa misma hora
hace 24 días y Cy es el consumo de hace 368 días. Para evitar tener valores de previsión alterados
(consumos en días especiales, festivos u otros casos especiales) realizamos una media con los valores
de esa semana.
26
Después de determinar los factores, debemos calcular el número de clústeres en los que vamos a agrupar
los suministros, para ello utilizamos el método del codo. [5]
El objetivo principal del método del codo es encontrar el punto de inflexión en la gráfica de la suma de los
cuadrados de los errores en función del número de clústeres. La suma de los cuadrados de los errores es
una medida de la variabilidad dentro de cada clúster y se calcula como la suma de las distancias cuadradas
entre cada punto y el centroide de su clúster.
Para aplicar el método del codo, se realiza un análisis de agrupamiento con diferentes valores de k, que
representa el número de clústeres. Se calcula la suma de los cuadrados de los errores para cada valor de k
y se grafica en función de k.
En la gráfica resultante, se observará que inicialmente la suma de los cuadrados de los errores disminuye
rápidamente a medida que aumenta el número de clústeres. Esto se debe a que cada clúster adicional
ayuda a reducir la variabilidad dentro de los grupos. Sin embargo, en algún punto, el beneficio de agregar
más clústeres disminuye significativamente y la curva se aplana.
El punto de inflexión en la gráfica, que se asemeja a un codo, indica el número óptimo de clústeres. Este
punto representa el equilibrio entre una reducción significativa de la variabilidad dentro de los clústeres y
evitar una segmentación excesiva.
Es importante tener en cuenta que el método del codo es una técnica heurística y subjetiva, ya que la
interpretación del punto de inflexión puede variar según el contexto y los datos específicos. En el caso de
este algoritmo, se determinó que el número óptimo de clústeres es 4.
Figura 4.1: Método del codo. [5]
27
Capítulo 5
Interfaz de usuario con Figma
En este capítulo, nos adentramos en el diseño de la interfaz de usuario utilizando la herramienta Figma
como parte del desarrollo del programa de previsión de energía. La creación de una interfaz intuitiva
y atractiva es fundamental para mejorar la experiencia del usuario al interactuar con el programa y
comprender los resultados obtenidos.
En primer lugar, se brindará una introducción completa a Figma, una herramienta de diseño de interfaces
de usuario ampliamente utilizada. Además, se destacarán las características y funcionalidades clave de
Figma que nos permitirán diseñar una interfaz de usuario visualmente atractiva y funcional.
En segundo lugar, nos centraremos en el diseño y prototipado de una interfaz de usuario intuitiva para el
programa de previsión de energía. Se abordará la importancia de comprender las necesidades y expectativas
del usuario final, así como los principios de diseño centrado en el usuario. A través de Figma, diseñaremos
la interfaz, teniendo en cuenta la usabilidad, la legibilidad y la coherencia visual.
En tercer lugar, se explorará la integración de la interfaz de usuario diseñada con el programa de
previsión de energía. Se abordarán aspectos técnicos relacionados con la conexión de la interfaz con las
funcionalidades del programa, lo que permitirá una experiencia de usuario fluida y una comprensión clara
de los resultados obtenidos.
Por último se explorará, de forma secuencial, la funcionalidad del programa.
En resumen, este capítulo se centra en el diseño de la interfaz de usuario utilizando Figma como parte del
programa de previsión de energía. A través de la creación de una interfaz intuitiva y atractiva, buscamos
mejorar la experiencia del usuario final y facilitar la comprensión de los resultados obtenidos.
28
5.1. Introducción a Figma.
Figma [6] es una herramienta de diseño de interfaces GUI basada en la nube que permite crear, colaborar
y prototipar diseños de manera eficiente. Una de las principales ventajas de Figma es su capacidad de
funcionar en línea, lo que significa que los diseños y prototipos se pueden acceder y editar desde cualquier
lugar, sin la necesidad de descargar o instalar software adicional.
Figma ofrece una amplia gama de herramientas y funciones que permiten a los diseñadores crear diseños
atractivos y funcionales. Esto incluye la capacidad de crear componentes reutilizables, establecer estilos y
variaciones de diseño, y aplicar animaciones y transiciones a los elementos del diseño. Además, Figma
permite crear prototipos interactivos que simulan la experiencia de uso de una aplicación o sitio web, lo
que facilita la validación y prueba del diseño antes de su implementación.
En resumen, Figma es una poderosa herramienta de diseño de interfaces de usuario basada en la nube
que permite a los diseñadores crear y colaborar en diseños de manera eficiente. Con su enfoque en el
diseño colaborativo en tiempo real y sus diversas funciones y características, Figma se ha convertido en
una opción popular en la industria del diseño, por lo que es la opción elegida para la realización de la
interfaz de este programa.
Figura 5.1: Logo de Figma.
5.2. Diseño y prototipado de la interfaz.
En el diseño y prototipado de una interfaz de usuario intuitiva para el programa de previsión de energía,
es importante considerar elementos que permitan a los usuarios interactuar de manera efectiva con la
aplicación. Una funcionalidad clave para ello es la inclusión de calendarios que permitan seleccionar la
fecha de inicio y fin de la previsión de energía.
Para ello, se integra un calendario en la interfaz que brinda la posibilidad al usuario de elegir la fecha de
inicio deseada para la previsión. Este calendario debe ser intuitivo y fácil de navegar, lo que permitirá al
usuario desplazarse entre los meses y años para ubicar rápidamente la fecha deseada. De manera similar,
se incluye otro calendario para seleccionar la fecha de fin de la previsión. Este calendario debe permitir al
usuario elegir una fecha posterior a la fecha de inicio seleccionada previamente, asegurando así que la
previsión serealice en el rango de fechas adecuado.
Además de los calendarios, se debe incluir un botón de ejecución en la interfaz. Este botón activará la
generación de la previsión de energía utilizando las fechas seleccionadas. Al hacer clic en este botón, el
programa llevará a cabo los cálculos y procesamientos necesarios para generar la previsión y mostrar los
resultados correspondientes al usuario.
29
Es importante diseñar la interfaz de manera que los calendarios y el botón de ejecución sean fácilmente
identificables y estén ubicados en lugares visibles y accesibles. Además de dichos iconos se busca que la
interfaz tenga un diseño acorde con la empresa NTT Data, por lo que se realiza un diseño en Figma con
los colores corporativos.
Finalmente, la interfaz queda con el diseño que se puede apreciar en la Figura 5.2
Figura 5.2: Interfaz del programa.
5.3. Integración de la interfaz de usuario en el programa.
Tras la finalización del diseño de la interfaz en Figma, es necesario llevar a cabo su implementación dentro
del programa. En este proyecto, se opta por exportar directamente el diseño desde Figma a código Python,
utilizando una herramienta llamada Tkinter-Designer desarrollada por Parth Jadhav, cuyo repositorio de
GitHub se encuentra en el Anexo B.
Esta herramienta nos permite convertir de manera eficiente y precisa el diseño realizado en la plataforma
web a código Python. De esta forma, se evita la necesidad de crear la interfaz de forma manual, introdu-
ciendo los valores y figuras necesarias.
Una vez exportado el diseño, se procede a incluir la biblioteca tkcalendar, la cual nos facilita la creación
de calendarios interactivos para que el usuario final pueda seleccionar fácilmente la fecha de inicio y la
fecha de fin. Esta biblioteca amplía las capacidades de Tkinter, permitiendo la incorporación de elementos
visuales funcionales y amigables.
El código resultante de esta implementación, el cual forma la GUI del programa, se encuentra detallado
en el Anexo A.
5.4. Funcionalidad del programa con interfaz.
En esta Sección se explicará la parte puramente funcional del programa con la interfaz integrada. De
forma secuencial, el programa se basa en los siguientes pasos:
1. Introducción de parámetros. El usuario final introduce el día inicial y final, como se observa en la
30
Figura 5.2, que determinan el periodo temporal en el cual se va a calcular la previsión de consumo
energético.
2. Extracción de datos. Se extraen los datos de las tres tablas que se encuentran en la base de datos
PostgreSQL. Por una parte se extraen los datos relacionados con los suministros de la tabla contratos
y por otra se construye la vista materializada combinando los datos de consumo de las tablas p5d y
f5d. Estos datos serán los utilizados para calcular la previsión de consumo.
3. Cálculo provisional. En este paso se utilizan los valores históricos de consumo, haciendo un cálculo
utilizando los vatios hora gastados en cada suministro, y en esa determinada hora, hace exactamente
365 días y 21 días. Para evitar valores corruptos, por ejemplo días festivos, se realiza una media del
día utilizado con los 7 días que pertenecen a su semana. El cálculo se puede ver claramente, con un
caso de uso concreto, en el Anexo C.
4. Compartimentación en clústeres con ML. Después del cálculo provisional sobre el consumo, se
utilizan tres variables (zona, potencia y previsión) para la formación de los clústeres mediante el
uso del algoritmo KNN. Esto da un valor de consumo para cada clúster, lo que facilita que haya
previsiones de consumo en aquellos suministros que no dispongan de consumos históricos ya que son
nuevos clientes.
5. Previsión final. Se realiza un cálculo combinando el valor previsión y el valor medio de consumo de
su clúster, consiguiendo un dato de previsión de consumo más preciso.
6. Resultados. Los resultados que devuelve el programa son tres archivos Excel: Dataframe.xlsx,
Exactos.xlsx y Compra.xlsx. Se tratará con mayor profundidad en la Sección 7.1.
Figura 5.3: Esquema funcional del programa con interfaz. Elaboración propia.
31
Capítulo 6
Docker y automatización
En este capítulo, se aborda la implementación del entorno Docker para poder automatizar el programa
de previsión de energía. Docker desempeña un papel fundamental en la portabilidad, escalabilidad y
distribución del programa, al proporcionar un entorno de ejecución aislado y consistente.
En primer lugar, se explicará en detalle el concepto y la importancia de Docker en el contexto de nuestro
proyecto. Se destacará cómo Docker nos permite crear entornos de desarrollo y despliegue estandarizados,
reproducibles y aislados. Al encapsular el programa de previsión de energía y todas sus dependencias en
un contenedor, garantizamos que pueda ejecutarse en diferentes plataformas y entornos.
En segundo lugar, se describirá el proceso de implementación del programa de previsión de energía en
un contenedor Docker. Se explorarán los pasos necesarios para crear una imagen de Docker que incluya
todas las bibliotecas y dependencias requeridas por el programa.
Por último, se explorarán dos funcionalidades que apoyan la automatización. Estos dos nuevos com-
plementos son el envío automático de los resultados por correo electrónico y el reporte de errores y
ejecuciones en un equipo de Microsoft Teams, lo que aporta información a tiempo real del estado del
proceso.
En resumen, este capítulo se enfoca en la implementación de Docker en el programa de previsión
de energía. A través de la utilización de Docker, buscamos garantizar la portabilidad y escalabilidad
del programa, facilitando su ejecución en diferentes plataformas y entornos de manera consistente y
reproducible. La adopción de Docker como herramienta de despliegue permitirá una distribución eficiente
y confiable del programa, mejorando su accesibilidad y asegurando su funcionamiento óptimo, añadiendo
además funcionalidades que permiten una automatización completa.
32
6.1. Introducción a Docker.
Docker [7] es una plataforma de código abierto que permite la creación, distribución y ejecución de apli-
caciones en entornos virtualizados conocidos como contenedores. Los contenedores son entornos ligeros
y portátiles que encapsulan una aplicación y todas sus dependencias, lo que facilita la implementación
y la ejecución de aplicaciones de manera consistente en diferentes sistemas operativos y entornos de
desarrollo.
La principal ventaja de Docker radica en su capacidad para abstraer y aislar las aplicaciones y sus
dependencias del entorno subyacente. Esto significa que las aplicaciones empaquetadas en contenedores
pueden ejecutarse de manera confiable y consistente en diferentes entornos, sin preocuparse por las
diferencias en la infraestructura o la configuración del sistema.
Docker utiliza una arquitectura cliente-servidor, donde el cliente Docker interactúa con el daemon de
Docker, que es el componente responsable de construir, ejecutar y administrar los contenedores. Los
contenedores se crean a partir de imágenes, que son plantillas de solo lectura que contienen todos los
archivos necesarios para ejecutar una aplicación. Estas imágenes se pueden almacenar en un registro de
Docker, que actúa como un repositorio centralizado para compartir y distribuir imágenes.
Una de las características clave de Docker es su capacidad para la creación y gestión de redes y volúmenes.
Esto permite la comunicación entre contenedores y el almacenamiento persistente de datos, lo que facilita
el desarrollo de aplicaciones complejas que constan de múltiples componentes interconectados.
En resumen, Docker es una plataforma que permite la creación, distribución y ejecución de aplicaciones
en contenedores virtualizados. Con su capacidad para abstraer y aislar las aplicaciones y sus dependencias,
Docker simplifica el desarrollo, la implementación y la administración de aplicaciones en diferentes
entornos. Al proporcionar un entorno consistente y portátil,facilita la creación de aplicaciones escalables
y confiables en diferentes sistemas operativos y arquitecturas.
Figura 6.1: Logo de Docker.
33
6.2. Configuración del entorno de ejecución.
Tal como se explica en el capítulo introductorio a Docker, se necesitan varios pasos para poder construir
y lanzar el contenedor. Lo principal es la creación de la imagen Docker, para la cuál necesitamos un
archivo en el cuál se identifiquen e importen todas las librerías utilizadas en el conjunto total del programa.
Este archivo recibe el nombre de Dockerfile y debe ser creado dentro de la carpeta raíz del programa. El
archivo creado para este programa se encuentra en el Anexo A. Como se puede comprobar, en el archivo
de construcción se incluyen las bibliotecas a importar, el directorio con todos los scripts del programa y
las instrucciones CMD necesarias.
Teniendo ya el Dockerfile, se lanzan instrucciones en la ventana de comandos para la construcción de la
imagen Docker y la creación del contenedor en el cuál se encuentra dicha imagen. Dichas instrucciones
son:
1. docker build -t gestionenergia -f Dockerfile .
Se construye la imagen con el programa.
2. docker run –env TZ=Europe/Madrid gestionenergia
Corre la imagen en un contenedor nuevo, cuya zona horaria es la de Madrid, España. Es importante
determinar la zona horaria del contenedor por temas de automatización.
En la Figura 6.2 se reflejan las características del contenedor Docker creado, donde se puede comprobar
la zona horaria y la versión de Python entre otros.
Figura 6.2: Características del contenerdor.
34
A parte de este listado de características, la aplicación Docker Desktop dispone también de un panel de
control que nos indica el porcentaje de uso de la CPU o el uso de red, entre otras cosas, lo que permite
una monitorización continua.
Figura 6.3: Panel de control del contenerdor.
6.3. Envío automatizado de correo electrónico.
El envío automatizado de correos electrónicos es una funcionalidad importante, ya que permite enviar los
informes con los resultados de la previsión de forma eficiente.
El protocolo SMTP [8] es un protocolo de red utilizado para el envío de correos electrónicos en Internet.
Funciona sobre el protocolo de transferencia de datos TCP/IP y utiliza el puerto 25 de forma predetermi-
nada. El protocolo SMTP se basa en una arquitectura cliente-servidor, donde el cliente envía comandos al
servidor SMTP para entregar el correo electrónico al destinatario.
Durante la comunicación SMTP, el cliente establece una conexión con el servidor utilizando un saludo
inicial. Luego, se intercambian comandos SMTP, como:
1. HELO. Saludo del cliente y para abrir una sesión con el servidor.
2. MAIL FROM. Especificación del remitente.
3. RCPT TO. Especificación del destinatario.
4. DATA. Inicio del contenido del correo electrónico.
5. QUIT. Finalización de la conexión SMTP.
35
Además, SMTP utiliza códigos de respuesta para indicar el estado de la operación realizada por el cliente
o el servidor. Estos códigos incluyen respuestas de éxito (250, OK), respuestas de error (550, No such
user) y respuestas de redireccionamiento (251, User not local; will forward).
En resumen, el protocolo SMTP es un protocolo de red utilizado para enviar correos electrónicos a través
de Internet. Utiliza una arquitectura cliente-servidor, intercambia comandos para especificar remitentes,
destinatarios y contenido del correo electrónico, admite autenticación de clientes y utiliza códigos de
respuesta para indicar el estado de la operación.
Para implementar esta funcionalidad, se utiliza la biblioteca de Python llamada smtplib, que proporciona
una interfaz para enviar correos electrónicos a través del protocolo SMTP. Se puede comprobar un extracto
del código encargado del envío en el Anexo A.
Es importante tener en cuenta la configuración de seguridad al implementar el envío automatizado de
correos electrónicos. Esto incluye asegurarse de que la conexión con el servidor SMTP se realice a través
de una conexión segura (por ejemplo, Secure Sockets Layer (SSL)/Transport Layer Security (TLS)) y que
se autentique correctamente utilizando las credenciales adecuadas. En el caso del programa realizado, no
se utiliza una capa de seguridad debido a su ejecución dentro de un entorno local y controlado, pero queda
pendiente una implementación más segura de cara al entorno generalizado de producción.
El envío automatizado de correos electrónicos mejora la capacidad del programa para notificar a los
usuarios encargados de realizar la gestión de compra con el OMIE, lo que agiliza el proceso.
6.4. Reporting utilizando webhooks de Microsoft Teams.
La biblioteca pymsteams [9] permite utilizar webhooks de Microsoft Teams para generar informes y
notificaciones dentro de la plataforma. Un webhooks es una forma de comunicación entre diferentes
aplicaciones a través de Hypertext Transfer Protocol (HTTP), que permite enviar mensajes y datos a
un canal o equipo específico en Microsoft Teams. Luego, se pueden configurar diferentes aspectos del
mensaje, como el título, el texto, los enlaces y los archivos adjuntos. Esto permite personalizar el contenido
del informe según las necesidades específicas.
Una vez configurado el mensaje, se puede enviar utilizando el método send del objeto de equipo. Esto
enviará el mensaje al webhooks correspondiente en Microsoft Teams, y el informe será visible en el canal
o equipo configurado.
La utilización de webhooks de Microsoft Teams en la generación de informes proporciona una forma
efectiva de visualizar y compartir información con los miembros del equipo a tiempo real, lo que facilita
actuar de forma rápida y efectiva en caso de error del programa y facilita el mantenimiento del mismo.
En resumen, la biblioteca pymsteams de Python proporciona una forma sencilla y conveniente de utilizar
webhooks de Microsoft Teams para generar informes y notificaciones del programa y que pueda ser
consulatado a tiempo real por todos los miembros del equipo, tanto de los encargados de mantenimiento
como los usuarios finales de la previsión.
La función encargada de notificar estos reportes se encuentra en el Anexo A
36
6.5. Funcionalidad del programa, versión Docker.
En esta Sección se explicará la parte puramente funcional del programa con la interfaz integrada. De
forma secuencial, el programa se basa en los siguientes pasos:
1. Bucle y comprobación horaria. Dentro del propio código se realiza una comprobación a tiempo real
de la hora a la cuál se encuentra el contenedor Docker. Si el día es martes y la hora local son las 5 de
la madrugada se inicia el proceso de previsión, calculando los valores para dentro de dos semanas
consecutivas al martes de ejecución. Por ejemplo, si el contenedor se inicia un martes 8, la previsión
iría del lunes 21 al domingo 27. Para realizar la compra con antelación, se debe conocer el valor de
previsión de energía con más de una semana de antelación. Se envía un mensaje informativo al equipo
de Microsoft Teams indicando el inicio de cada ejecución todos los martes.
2. Error técnico. Si ocurre un error en el programa, se envía un mensaje de tipo log, al equipo de
Microsoft Teams, con el error literal que devuelve el intérprete de Python.
3. Algoritmo. El algoritmo de previsión tiene el mismo funcionamiento que el visto en la Sección 5.4.
4. Envío de resultados Se envían los archivos Excel a los correos electrónicos correspondientes de forma
automática, tal como se explica en la Sección 6.3. Los archivos Dataframe.xlsx y Exactos.xlsx los
recibe la persona encargada del mantenimiento del programa, mientras que el archivo Compra.xlsx se
envía directamente a todos los integrantes del equipo Back Office (BO) de Ekiluz, para su gestión
en las subastas del OMIE. Además de este envío de correos electrónicos, se informa en el equipo de
Teams el fin de la ejecución y el correcto envío de los emails.
Figura 6.4: Esquema funcional del programa en Docker. Elaboraciónpropia.
37
Capítulo 7
Conclusiones
En este capítulo, se presentan las conclusiones y reflexiones sobre el trabajo realizado en el programa
de previsión de energía, así como las posibles mejoras futuras que podrían llevarse a cabo. Se evaluarán
los resultados obtenidos y se analizará si los objetivos planteados al inicio del proyecto se han cumplido
satisfactoriamente.
En primer lugar, se realizará un resumen detallado de los resultados obtenidos a lo largo del desarrollo del
programa. Se presentarán los resultados, destacando el desempeño del modelo de ML implementado, la
precisión de las predicciones y cualquier otro aspecto relevante en relación con los datos y el funciona-
miento del programa.
A continuación, se evaluará el grado de cumplimiento de los objetivos planteados al inicio del proyecto.
Se compararán los resultados obtenidos con los objetivos establecidos, y se analizará si se lograron
satisfactoriamente o si hubo desviaciones o limitaciones en su consecución.
Por último, se realizará una reflexión crítica sobre posibles mejoras y trabajos futuros que podrían ser
implementados en el programa. Se analizarán las implicaciones y beneficios de estas mejoras propuestas y
se discutirá su viabilidad y relevancia en el contexto del algoritmo de previsión de energía.
En resumen, este capítulo se centra en las conclusiones y reflexiones finales sobre el programa desarrollado.
A través del resumen de los resultados obtenidos, la evaluación de los objetivos planteados y la reflexión
sobre posibles mejoras, se busca brindar una visión global de los logros alcanzados, las limitaciones
encontradas y las oportunidades de mejora.
38
7.1. Resumen de los resultados obtenidos.
En esta sección, se presenta un resumen detallado de los resultados obtenidos durante el desarrollo del
programa de previsión de energía. Se analizan y se destacan los resultados clave, incluyendo el desempeño
del modelo de ML implementado, la precisión de las predicciones y otros aspectos relevantes relacionados
con los datos y el funcionamiento del programa.
Tras el entrenamiento y evaluación del modelo de ML, se ha observado un desempeño prometedor en la
previsión de energía. El modelo ha logrado capturar las tendencias y patrones presentes en los datos de
entrada, generando predicciones que se acercan a los valores reales con un nivel satisfactorio de precisión.
Además de los resultados de las predicciones, se ha llevado a cabo una evaluación exhaustiva del
rendimiento del programa en términos de eficiencia y tiempos de ejecución. Se ha verificado que el
programa es capaz de manejar grandes volúmenes de datos y realizar las predicciones en un tiempo
razonable, lo que garantiza su aplicabilidad en entornos prácticos y en tiempo real.
El programa de previsión da como resultado tres archivos Excel.
1. Dataframe completo. En este archivo se imprime el dataframe completo, con los datos del suministro
y contrato.
2. Previsión exacta. En este archivo se imprimen los valores de consumo total de los suministros que
conforman toda la comercializadora, agrupados por hora y día, ya que la compra se realiza de esta
forma en el OMIE. El valor es en vatios hora.
3. Previsión aproximada. En este archivo se representan los valores del archivo anterior en Mwh y se
aproxima a la décima, siendo el documento final necesario para la compra en las subastas del OMIE.
Después del análisis de los resultados, que se pueden ver en el Anexo D, se comprueba los valores
previstos tienen un rango de error que varía del 0 % al 5 % como máximo respecto a los valores reales de
consumo en el periodo de tiempo concreto.
7.2. Cumplimiento de los objetivos planteados.
En este apartado, se evaluará el grado de cumplimiento de los objetivos planteados al inicio del proyecto y
se compararán los resultados obtenidos con dichos objetivos.
El primer objetivo establecido fue desarrollar un programa de previsión de energía utilizando Python,
Pandas y técnicas de ML. En este sentido, se ha logrado cumplir con éxito este objetivo, ya que se ha
creado un programa funcional que es capaz de realizar predicciones de energía basadas en datos históricos
y utilizando un algoritmo de ML, en concreto, un algoritmo KNN.
El segundo objetivo consistía en implementar la funcionalidad de Docker para facilitar el despliegue y
la ejecución del programa en diferentes entornos. Se ha logrado cumplir con este objetivo, ya que se ha
creado una imagen de Docker para el programa de previsión de energía, lo que permite su fácil distribución
y ejecución en diferentes plataformas y sistemas operativos.
39
El tercer objetivo se centraba en el diseño y la implementación de una interfaz de usuario intuitiva
utilizando Figma. En este caso, se ha logrado cumplir con éxito, ya que se ha diseñado una interfaz
visualmente atractiva y funcional utilizando Figma, que proporciona una experiencia de usuario mejorada
y facilita la interacción con el programa de previsión de energía, pudiendo ser utilizado de forma sencilla
y efectiva por cualquier perfil de usuario.
El cuarto objetivo planteaba la evaluación de los resultados obtenidos y la identificación de posibles
mejoras y ajustes. Durante el análisis de los resultados, se han evaluado las métricas de rendimiento del
modelo de ML, la precisión de las predicciones y el rendimiento general del programa. Se han identificado
áreas de mejora y posibles ajustes para perfeccionar el programa y mejorar la precisión de las predicciones
en futuras iteraciones, que se comentarán en profundidad en la Sección 7.3.
En general, se puede concluir que se ha logrado un alto grado de cumplimiento de los objetivos planteados
al inicio del proyecto. Aunque se han identificado áreas de mejora y posibles ajustes, el programa de
previsión de energía desarrollado cumple con su propósito principal y ofrece una funcionalidad sólida y
confiable. El uso conjunto de todas las herramientas descritas en este proyecto ha permitido alcanzar los
objetivos de manera efectiva y brindar una solución integral para la previsión de energía.
7.3. Reflexión sobre posibles mejoras.
En esta sección, se realizará una reflexión crítica sobre posibles mejoras y trabajos futuros que podrían
implementarse en el programa de previsión de energía. Se analizarán las implicaciones y beneficios de
estas mejoras propuestas, así como su viabilidad y relevancia en el contexto del algoritmo de previsión de
energía.
Una posible mejora sería explorar el uso de PySpark [10] en lugar de Pandas para el procesamiento de
datos. PySpark es una biblioteca de Python que permite el procesamiento distribuido de datos a gran
escala utilizando la tecnología de Apache Spark. Al utilizar PySpark, se podrían aprovechar los beneficios
del procesamiento distribuido para mejorar el rendimiento y la escalabilidad del programa. Esto sería
especialmente útil cuando se trabaja con conjuntos de datos muy grandes, lo que permitiría acelerar el
procesamiento y la generación de predicciones.
Además, se podría considerar la sustitución del algoritmo KNN utilizado actualmente por una red
neuronal [11], como una Convolutional Neural Network (CNN) o una RNN. Las redes neuronales son
modelos de ML más complejos que pueden capturar relaciones y patrones más sofisticados en los datos.
Al utilizar una red neuronal, se podría mejorar la precisión de las predicciones y tener en cuenta relaciones
temporales o características más complejas en los datos de energía.
Sin embargo, es importante tener en cuenta que tanto el uso de PySpark como la implementación de una
red neuronal requieren recursos computacionales más avanzados y una mayor capacidad de procesamiento.
Esto implica que, dependiendo del contexto y los recursos disponibles, estas mejoras pueden requerir una
infraestructura más robusta y mayores tiempos de entrenamiento.
Otras mejoras adicionales podrían incluir la optimización de hiperparámetros del modelo de ML utilizado,
la incorporación de técnicasde preprocesamiento de datos más avanzadas, como la normalización o el
escalado, o la exploración de otros algoritmos más adecuados para el problema de previsión de energía.
40
En resumen, existen varias mejoras y trabajos futuros que podrían considerarse para mejorar el programa
de previsión de energía. La utilización de PySpark podría mejorar el rendimiento y la escalabilidad del
programa, mientras que la implementación de una red neuronal podría permitir capturar relaciones y
patrones más complejos en los datos. Estas mejoras pueden requerir recursos computacionales adicionales
y una mayor capacidad de procesamiento, por lo que es importante evaluar su viabilidad y relevancia
en función del contexto y los recursos disponibles. Además, se podrían explorar otras mejoras, como la
optimización de hiperparámetros y el uso de técnicas de preprocesamiento más avanzadas, para seguir
mejorando la precisión y el rendimiento del programa en futuras iteraciones.
Figura 7.1: Logo de Apache Spark.
7.4. Despliegue en la nube pública con Azure.
Otra gran mejora para el programa de previsión de energía sería la creación de un servicio web en
Azure [12] basado en la imagen de Docker utilizada. Azure es una nube pública propiedad de Microsoft
que proporciona una amplia gama de servicios para el desarrollo, implementación y administración de
aplicaciones en la nube.
La implementación del programa en forma de servicio web en Azure ofrece varias ventajas significativas.
En primer lugar, permite el acceso a la aplicación desde cualquier ubicación y dispositivo, lo que facilita
su disponibilidad y uso por parte de los usuarios finales. Además, proporciona escalabilidad automática, lo
que significa que el servicio puede adaptarse de manera dinámica a la demanda de usuarios, garantizando
un rendimiento óptimo incluso en períodos de alta carga.
Al utilizar Docker, la implementación del servicio web en Azure se simplifica considerablemente. La
imagen de Docker creada previamente se puede cargar fácilmente en Azure Container Registry (ACR),
un registro de contenedores en la nube, lo que permite su administración y distribución centralizada. A
continuación, se puede crear un servicio de contenedor en Azure Kubernetes Service (AKS), que permitirá
administrar y orquestar los contenedores en un entorno escalable y de alta disponibilidad.
Una vez implementado el servicio web en Azure, se pueden aprovechar las capacidades de Azure para
mejorar la aplicación aún más. Por ejemplo, se pueden utilizar servicios como Azure Machine Learning
(AML) para mejorar y optimizar el modelo de previsión de energía.
La implementación del servicio web en Azure no solo mejora la disponibilidad y escalabilidad de la
aplicación, sino que también brinda beneficios en términos de seguridad y administración. Además, Azure
proporciona herramientas de monitorización y administración que permiten supervisar y gestionar el
41
rendimiento y el estado del servicio en tiempo real, de una forma parecida a como funciona en Docker
Desktop 6.3.
En resumen, la creación de un servicio web en Azure a partir de la imagen de Docker utilizada en el
programa de previsión de energía representa una gran mejora en términos de disponibilidad, escalabilidad,
seguridad y administración. Azure ofrece una plataforma sólida y completa para implementar y administrar
la aplicación en la nube, lo que proporciona beneficios significativos para los usuarios finales y facilita la
gestión y el mantenimiento de la aplicación.
Figura 7.2: Logo de Azure.
42
Bibliografía
[1] A. Burkov. The Hundred-Page Machine Learning Book. 1.a ed. Self-published, 2019.
[2] D. Chen. Pandas for Everyone: Python Data Analysis. 1.a ed. Addison-Wesley Professional, 2017.
[3] A. Redshift. https://docs.aws.amazon.com/eses/redshift/latest/dg/materialized − view −
overview.html. 12 de febrero de 2023.
[4] scikit-learn.org. https://scikit-learn.org/stable. 12 de julio de 2023.
[5] GitHub. https://gist.github.com/rpgove/0060ff3b656618e9136b. 12 de julio de 2023.
[6] F. Staiano. Designing and Prototyping Interfaces with Figma. 1.a ed. Packt Publishing, 2022.
[7] A. González Ríodrguez. DOCKER. Guía práctica. 1.a ed. RC Libros, 2017.
[8] J. Rhoton. Programmer’s Guide to Internet Mail: SMTP, POP, IMAP, and LDAP. 1.a ed. Digital
Press, 1999.
[9] R. Veach. https://pypi.org/project/pymsteams. 9 de octubre de 2022.
[10] T. Drabas. Learning PySpark. 1.a ed. Packt Publishing, 2017.
[11] E. Wein. Artificial Intelligence Making Machines Learn: A friendly Introduction. 1.a ed. Self-
published, 2018.
[12] M. Lindsey. Azure: Build, manage, and scale cloud applications using the Azure Infrastructure.
1.a ed. Self-published, 2020.
43
Apéndice A
Extractos de código
1 def get_cups_date_consumption(self, cups, date):
2 initial = date - timedelta(days=368)
3 dates = [initial + timedelta(days=i) for i in range(7)]
4 lamb = lambda x: x.strftime(’%Y-%m-%d %H:%M:%S’)
5 dates = list(map(lamb, dates))
6 df_consumos = self.dao.query_dataframe(f"select * from
7 reports.vw_f5dp5d where cups = ’{cups}’ and fecha in {tuple(dates)}")
8 return df_consumos
Listing A.1: Función encargada de la extracción de consumos.
1 def p5d_dataframe(self, cups, dates):
2 try:
3 metadata = MetaData()
4 p5d = Table(’p5d’, metadata, autoload=True, autoload_with=self.engine)
5 with Session(self.engine) as session:
6 query = session.query(p5d).filter(and_(p5d.c.cups == cups, p5d.c.fecha.in_(
dates)))
7 result = query.all()
8 logging.debug(f"Query: {query} executed successfully")
9 return DataFrame(result)
10 except Exception as error:
11 logging.error(f"Error while executing query:{error}")
12 raise Exception(f"Error while executing query:{error}")
Listing A.2: DAO de la tabla p5d.
44
1 # Imagen base de Python
2 FROM python:3
3
4 # Copiar todo el directorio actual al contenedor
5 COPY . /gestion_energia_1.3_docker
6
7 # Establecer el directorio de trabajo
8 WORKDIR /gestion_energia_1.3_docker
9
10 # Instalar las dependencias
11 RUN pip install datetime
12 RUN pip install pandas
13 RUN pip install cryptography
14 RUN pip install sqlalchemy==1.4.22
15 RUN pip install sqlalchemy.orm
16 RUN pip install scikit-learn
17 RUN pip install pymsteams
18 RUN pip install psycopg2
19 RUN pip install openpyxl
20
21 # Ejecutar el programa principal
22 CMD ["python", "main.py"]
Listing A.3: Archivo Dockerfile.
45
1 def send_file_by_email(file_path, subject):
2 # Crea un objeto MIMEMultipart para el correo electronico
3 msg = MIMEMultipart()
4
5 # Carga las credenciales de correo electronico desde el archivo de
configuraci n
6 sender_email, sender_password, recipient_email, recipient_tech =
load_credentials()
7
8 # Configura los detalles del remitente y destinatario
9 msg[’From’] = sender_email
10 msg[’To’] = recipient_email
11 msg[’Subject’] = subject
12
13 # Adjunta el archivo al correo electronico
14 with open(file_path, ’rb’) as file:
15 attachment = MIMEBase(’application’, ’octet-stream’)
16 attachment.set_payload(file.read())
17 encoders.encode_base64(attachment)
18 attachment.add_header(’Content-Disposition’, f’attachment; filename="{
file_path}"’)
19 msg.attach(attachment)
20
21 # Agrega la frase en el cuerpo del mensaje
22 message = "Adjunto el archivo de Excel de compra de MWh para su env o a Ekiluz.
Quedo a su disposici n para cualquier consulta adicional. Gracias."
23 msg.attach(MIMEText(message, ’plain’))
24
25 # Conecta con el servidor SMTP de Outlook y envia el correo electronico
26 try:
27 server = smtplib.SMTP(’smtp.office365.com’, 587)
28 server.starttls()
29 server.login(sender_email, sender_password)
30 server.send_message(msg)
31 server.quit()
32 send_info_message(’Correo electr nico enviado correctamente.’)
33 except Exception as e:
34 send_error_message(f’Error al enviar el correo electronico: {str(e)}’)
Listing A.4: Función encargada del envío de correo electrónico mediante SMTP.
46
1 import pymsteams

Continuar navegando