Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- close all; clear all; clc;
- %datos = readtable('electricityConsumptionAndProductioction.csv');
- %datos = readtable('electricityConsumptionAndProductioction-enero2023.csv');
- datos = readtable('electricityConsumptionAndProductioction-enero2023-temp.csv');
- %datos
- %datos = datos(2:end, :); %quitamos la primera fila
- % Agrega un campo de índice
- datos.Indice = (1:height(datos))';
- datos.FechaHora = datetime(datos.DateTime, 'InputFormat', 'yyyy-MM-dd HH:mm:ss'); %2019-01-01 03:00:00
- datos.Hora = hour(datos.FechaHora);
- datos.day = day(datos.FechaHora);
- datos.dayofweek = day(datos.FechaHora, 'dayofweek');
- resultadosPromedioDia = groupsummary(datos, 'Hora', 'mean');
- %datos.hdd = temperatura(datos.FechaHora);
- % Guarda la tabla actualizada en un nuevo archivo CSV
- %writetable(datos, 'datos_actualizados_temp.csv');
- %datos = datos(2:100, :); %tomamos los primeros 100 registros
- %DateTime,Consumption,Production,Nuclear,Wind,Hydroelectric,OilandGas,Coal,Solar,Biomass
- %verHistograma(datos);
- %graficarPorDiaFull(datos);
- %graficarPromediosPorHoraFull(datos);
- %graficarPorHora(datos);
- %graficarPorHoraFull(datos);
- %calcularCorrelacionPorHora(datos);
- %graficarPorDiaMasPromedioFull(datos);
- %graficarPorDayofweekFull(datos);
- % Paso 3: Calcula el promedio agrupado por fecha
- %graficarPorHora(resultadosPromedioDia);
- %datos
- %calcularCorrelacion(datos);
- %Consumption
- %datos.day datos.Consumption datos.Production datos.Nuclear datos.Wind datos.Hydroelectric datos.OilAndGas datos.Coal datos.Solar datos.Biomass datos.HDD
- dataTrain = [datos.Hora datos.Consumption datos.Production datos.Nuclear datos.Wind datos.Hydroelectric datos.OilAndGas datos.Coal datos.Solar datos.Biomass datos.HDD];
- dimension = [5 5];
- epochs = 10000;
- coverSteps = 100;
- initNeighbor = 3;
- topologyFcn = 'hextop';
- distanceFcn = 'linkdist';
- SOM(dataTrain, dimension, epochs, coverSteps, initNeighbor, topologyFcn, distanceFcn);
- %SOM([datos.dayofweek datos.Consumption datos.HDD], [5 5], 10000);
- %SOM([datos.dayofweek datos.Consumption datos.Production datos.Nuclear datos.Wind datos.Wind datos.HDD], [5 5], 10000);
- %Consumption,Production,Nuclear,Wind,Hydroelectric,OilandGas,Coal,Solar,Biomass
- %graficarPorHoraFull(datos);
- %calcularCorrelacionPorHora(datos);
- function SOM(data, dimensions, epochs, coverSteps, initNeighbor, topologyFcn, distanceFcn)
- dataNormalized =minMaxScaler(data, -0.5, 0.5);
- dataNormalized %visualización de los datos normalizados
- net = selforgmap(dimensions, coverSteps, initNeighbor, topologyFcn, distanceFcn)
- net.trainParam.epochs = epochs;
- % Entrenamiento SOM con datos normalizados
- net = train(net, dataNormalized');
- clusterAssignments = vec2ind(net(dataNormalized'));
- clusterAssignments
- % Visualización de grilla SOM
- plotsompos(net, dataNormalized');
- % Trazar los datos originales con grupos codificados por colores
- gscatter(dataNormalized(:,1), dataNormalized(:,2), clusterAssignments);
- end
- function temp = temperatura(obj1)
- temp = 1;
- end
- function verHistograma()
- histograma(datos.Consumption, 'Consumption');
- histograma(datos.Production, 'Production');
- histograma(datos.Nuclear, 'Nuclear');
- histograma(datos.Wind, 'Wind');
- histograma(datos.Hydroelectric, 'Hydroelectric');
- histograma(datos.OilAndGas, 'OilAndGas');
- histograma(datos.Coal, 'Coal');
- histograma(datos.Solar, 'Solar');
- histograma(datos.Biomass, 'Biomass');
- end
- function calcularCorrelacion(datos)
- % Seleccionar columnas de interés
- %DateTime Consumption Production Nuclear Wind Hydroelectric OilAndGas Coal Solar Biomass Indice FechaHora Hora
- columnas_de_interes = [2, 3, 4, 5, 6, 7, 8, 9, 10, 13];
- datos_seleccionados = datos(:, columnas_de_interes);
- % Calcular la matriz de correlación para las columnas seleccionadas
- matriz_correlacion = corr(datos_seleccionados{:,:});
- % Visualizar la matriz de correlación
- disp('Matriz de correlación para columnas seleccionadas:');
- disp(matriz_correlacion);
- end
- function calcularCorrelacionPorHora(datos)
- %DateTime Consumption Production Nuclear Wind Hydroelectric OilAndGas Coal Solar Biomass Indice FechaHora Hora
- columnas_de_interes = [2 19];
- datos_seleccionados = datos(:, columnas_de_interes);
- datos_seleccionados
- [matriz_correlacion p] = corr(datos_seleccionados{:,:});
- % Visualizar la matriz de correlación
- disp('Matriz de correlación para columnas seleccionadas:');
- disp(matriz_correlacion);
- disp('Valores p:');
- disp(p);
- end
- function graficarPorHora(datos)
- figure;
- plot(datos.Hora, datos.mean_Consumption, 'o-', 'LineWidth', 2, 'DisplayName', 'Dato1');
- hold on;
- plot(datos.Hora, datos.mean_Production, 's-', 'LineWidth', 2, 'DisplayName', 'Dato2');
- hold off;
- xlabel('Hora de la Semana');
- ylabel('Energía');
- legend('Consumption', 'Production');
- end
- function graficarPorDia(datos)
- figure;
- datosFecha = datetime(datos.DateTime, 'InputFormat', 'yyyy-MM-dd HH:mm:ss'); %2019-01-01 03:00:00
- datos.Hora = hour(datos.Fecha);
- plot(datosFecha, datos.Consumption, 'o-', 'LineWidth', 2, 'DisplayName', 'Dato1');
- hold on;
- plot(datosFecha, datos.Production, 's-', 'LineWidth', 2, 'DisplayName', 'Dato2');
- hold off;
- xlabel('Tiempo (días)');
- ylabel('Energía');
- legend('Consumption', 'Production');
- end
- function graficarPorHoraFull(datos)
- datosResp = datos
- %datos.Hora = hour(datos.Fecha);
- figure;
- hold on;
- plot(datos.Hora, datos.Consumption, 'k-', 'LineWidth', 0.5, 'DisplayName', 'Dato1');
- datos = groupsummary(datos, 'Hora', 'mean');
- plot(datos.Hora, datos.mean_Consumption,'r-', 'LineWidth', 2, 'DisplayName', 'Dato1');
- hold off;
- xlabel('Tiempo (hora del día)');
- ylabel('Energía');
- legend('diario', 'promedio');
- figure;
- hold on;
- %datos = groupsummary(datos, 'Hora', 'mean');
- datos =datosResp
- plot(datos.day, datos.HDD,'b-', 'LineWidth', 2, 'DisplayName', 'Dato1');
- hold off;
- xlabel('Tiempo (hora del día)');
- ylabel('Energía');
- legend('diario', 'promedio');
- end
- function graficarPorDayofweekFull(datos)
- %datos.Hora = hour(datos.Fecha);
- figure;
- hold on;
- datos
- datos = groupsummary(datos, ['day'], 'mean', 'Consumption');
- plot(datos.day, datos.mean_Consumption, 'k-', 'LineWidth', 0.5, 'DisplayName', 'Dato1');
- %datos = groupsummary(datos, ['day'], 'mean', 'Consumption');
- datos
- plot(datos.day, datos.mean_Consumption,'r-', 'LineWidth', 2, 'DisplayName', 'Dato1');
- hold off;
- xlabel('Tiempo Dia de la semana');
- ylabel('Energía');
- legend('diario', 'promedio');
- end
- function graficarPorDiaMasPromedioFull(datos)
- %datos.Hora = hour(datos.Fecha);
- datos
- figure;
- hold on;
- plot(datos.FechaHora, datos.Consumption, 'k-', 'LineWidth', 0.5, 'DisplayName', 'Dato1');
- datos = groupsummary(datos, 'FechaHora', 'mean');
- plot(datos.FechaHora, datos.mean_Consumption,'r-', 'LineWidth', 2, 'DisplayName', 'Dato1');
- hold off;
- xlabel('Tiempo (hora del día)');
- ylabel('Energía');
- legend('diario', 'promedio');
- end
- function graficarPromediosPorHoraFull(datos)
- %datos.Hora = hour(datos.Fecha);
- datos = groupsummary(datos, 'Hora', 'mean');
- figure;
- %datosFecha = datetime(datos.DateTime, 'InputFormat', 'yyyy-MM-dd HH:mm:ss'); %2019-01-01 03:00:00
- plot(datos.Hora, datos.mean_Consumption, 'r-', 'LineWidth', 1, 'DisplayName', 'Dato1');
- hold on;
- plot(datos.Hora, datos.mean_Production, 'b-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- plot(datos.Hora, datos.mean_Nuclear, 'r-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- plot(datos.Hora, datos.mean_Wind, 'g-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- plot(datos.Hora, datos.mean_Hydroelectric, 'y-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- plot(datos.Hora, datos.mean_OilAndGas, 'c-', 'LineWidth',1, 'DisplayName', 'Dato2');
- plot(datos.Hora, datos.mean_Coal, 'm-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- plot(datos.Hora, datos.mean_Solar, 'b-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- plot(datos.Hora, datos.mean_Biomass, 'k-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- hold off;
- xlabel('Tiempo (hora del día)');
- ylabel('Energía');
- legend('Consumption', 'Production', 'Nuclear', 'Wind', 'Hydroelectric', 'OilAndGas', 'Coal', 'Solar', 'Biomass');
- end
- function graficarPorDiaFull(datos)
- figure;
- datosFecha = datetime(datos.DateTime, 'InputFormat', 'yyyy-MM-dd HH:mm:ss'); %2019-01-01 03:00:00
- %datos.Hora = hour(datos.Fecha);
- plot(datosFecha, datos.Consumption, 'r-', 'LineWidth', 1, 'DisplayName', 'Dato1');
- hold on;
- plot(datosFecha, datos.Production, 'b-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- plot(datosFecha, datos.Nuclear, 'r-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- plot(datosFecha, datos.Wind, 'g-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- plot(datosFecha, datos.Hydroelectric, 'y-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- plot(datosFecha, datos.OilAndGas, 'c-', 'LineWidth',1, 'DisplayName', 'Dato2');
- plot(datosFecha, datos.Coal, 'm-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- plot(datosFecha, datos.Solar, 'b-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- plot(datosFecha, datos.Biomass, 'k-', 'LineWidth', 1, 'DisplayName', 'Dato2');
- hold off;
- xlabel('Tiempo (días)');
- ylabel('Energía');
- legend('Consumption', 'Production', 'Nuclear', 'Wind', 'Hydroelectric', 'OilAndGas', 'Coal', 'Solar', 'Biomass');
- end
- function histograma(datos, texto)
- figure;
- % Crear un histograma
- histObj = histogram(datos, 'Normalization', 'pdf');
- % Obtener los bordes de los contenedores y las probabilidades
- bordes_contenedores = histObj.BinEdges;
- probabilidades = histObj.Values;
- % Ajustar una distribución de probabilidad (por ejemplo, ajuste normal)
- ajuste_normal = fitdist(datos, 'Normal');
- % Calcular la PDF de la distribución ajustada
- x = linspace(min(datos), max(datos), 100);
- pdf_ajustada = pdf(ajuste_normal, x);
- % Graficar el histograma y la distribución ajustada
- bar(bordes_contenedores(1:end-1), probabilidades, 'hist');
- hold on;
- plot(x, pdf_ajustada, 'r', 'LineWidth', 2);
- xlabel(strcat('Datos: ',' ',texto));
- ylabel(strcat('Densidad de probabilidad ',''));
- title(strcat('Distribución de Densidad y Ajuste: ',texto));
- legend('Histograma', 'Distribución Ajustada');
- hold off;
- end
- %%%%%%%%%%%%%%%%%%%%%%%%%%%
- %%%%%%%%%%%%%Utiles
- function X_norm = minMaxScaler(X, newMin, newMax)
- % Normalizar los datos utilizando Min-Max Scaler
- if nargin < 2
- newMin = 0; % Valor mínimo por defecto
- newMax = 1; % Valor máximo por defecto
- end
- X_min = min(X);
- X_max = max(X);
- X_norm = (X - X_min) ./ (X_max - X_min) * (newMax - newMin) + newMin;
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement