Advertisement
davidcastrosalinas

Untitled

Jan 2nd, 2024
1,369
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 11.16 KB | Science | 0 0
  1. close all; clear all; clc;
  2.  
  3. %datos  = readtable('electricityConsumptionAndProductioction.csv');
  4.  
  5. %datos  = readtable('electricityConsumptionAndProductioction-enero2023.csv');
  6. datos  = readtable('electricityConsumptionAndProductioction-enero2023-temp.csv');
  7. %datos
  8. %datos  = datos(2:end, :); %quitamos la primera fila
  9. % Agrega un campo de índice
  10. datos.Indice = (1:height(datos))';
  11. datos.FechaHora = datetime(datos.DateTime, 'InputFormat', 'yyyy-MM-dd HH:mm:ss'); %2019-01-01 03:00:00
  12. datos.Hora = hour(datos.FechaHora);
  13. datos.day = day(datos.FechaHora);
  14. datos.dayofweek =  day(datos.FechaHora, 'dayofweek');
  15. resultadosPromedioDia = groupsummary(datos, 'Hora', 'mean');
  16. %datos.hdd =  temperatura(datos.FechaHora);
  17.  
  18.  
  19.  
  20. % Guarda la tabla actualizada en un nuevo archivo CSV
  21. %writetable(datos, 'datos_actualizados_temp.csv');
  22. %datos = datos(2:100, :); %tomamos los primeros 100 registros
  23.  
  24. %DateTime,Consumption,Production,Nuclear,Wind,Hydroelectric,OilandGas,Coal,Solar,Biomass
  25.  
  26.  
  27. %verHistograma(datos);
  28. %graficarPorDiaFull(datos);
  29. %graficarPromediosPorHoraFull(datos);
  30. %graficarPorHora(datos);
  31.  
  32. %graficarPorHoraFull(datos);
  33. %calcularCorrelacionPorHora(datos);
  34. %graficarPorDiaMasPromedioFull(datos);
  35. %graficarPorDayofweekFull(datos);
  36. % Paso 3: Calcula el promedio agrupado por fecha
  37.  
  38.  
  39. %graficarPorHora(resultadosPromedioDia);
  40.  
  41.  
  42. %datos
  43. %calcularCorrelacion(datos);
  44. %Consumption
  45. %datos.day datos.Consumption datos.Production datos.Nuclear datos.Wind datos.Hydroelectric datos.OilAndGas datos.Coal datos.Solar datos.Biomass datos.HDD
  46.  
  47. dataTrain = [datos.Hora datos.Consumption datos.Production datos.Nuclear datos.Wind datos.Hydroelectric datos.OilAndGas datos.Coal datos.Solar datos.Biomass datos.HDD];
  48. dimension = [5 5];
  49. epochs = 10000;
  50. coverSteps = 100;
  51. initNeighbor = 3;
  52. topologyFcn = 'hextop';
  53. distanceFcn = 'linkdist';
  54.  
  55. SOM(dataTrain, dimension, epochs, coverSteps, initNeighbor, topologyFcn, distanceFcn);
  56.  
  57.  
  58.  
  59. %SOM([datos.dayofweek datos.Consumption  datos.HDD], [5 5], 10000);
  60.  
  61. %SOM([datos.dayofweek datos.Consumption  datos.Production datos.Nuclear datos.Wind datos.Wind datos.HDD], [5 5], 10000);
  62. %Consumption,Production,Nuclear,Wind,Hydroelectric,OilandGas,Coal,Solar,Biomass
  63.  
  64.  
  65. %graficarPorHoraFull(datos);
  66. %calcularCorrelacionPorHora(datos);
  67.  
  68.  
  69. function SOM(data, dimensions, epochs, coverSteps, initNeighbor, topologyFcn, distanceFcn)
  70.     dataNormalized =minMaxScaler(data, -0.5, 0.5);
  71.     dataNormalized %visualización de los datos normalizados
  72.  
  73.     net = selforgmap(dimensions, coverSteps, initNeighbor, topologyFcn, distanceFcn)
  74.    
  75.     net.trainParam.epochs = epochs;
  76.    
  77.     % Entrenamiento SOM con datos normalizados
  78.     net = train(net, dataNormalized');
  79.    
  80.     clusterAssignments = vec2ind(net(dataNormalized'));
  81.     clusterAssignments
  82.     % Visualización de grilla SOM
  83.     plotsompos(net, dataNormalized');
  84.    
  85.     % Trazar los datos originales con grupos codificados por colores
  86.     gscatter(dataNormalized(:,1), dataNormalized(:,2), clusterAssignments);
  87. end
  88.  
  89.  
  90.  
  91. function temp = temperatura(obj1)
  92.     temp = 1;
  93. end
  94.  
  95. function verHistograma()
  96.     histograma(datos.Consumption, 'Consumption');
  97.     histograma(datos.Production, 'Production');
  98.     histograma(datos.Nuclear, 'Nuclear');
  99.     histograma(datos.Wind, 'Wind');
  100.     histograma(datos.Hydroelectric, 'Hydroelectric');
  101.     histograma(datos.OilAndGas, 'OilAndGas');
  102.     histograma(datos.Coal, 'Coal');
  103.     histograma(datos.Solar, 'Solar');
  104.     histograma(datos.Biomass, 'Biomass');
  105. end
  106.  
  107. function calcularCorrelacion(datos)
  108.     % Seleccionar columnas de interés
  109.  
  110.     %DateTime          Consumption    Production    Nuclear    Wind    Hydroelectric    OilAndGas    Coal    Solar    Biomass    Indice         FechaHora         Hora
  111.     columnas_de_interes = [2, 3, 4, 5, 6, 7, 8, 9, 10, 13];
  112.     datos_seleccionados = datos(:, columnas_de_interes);
  113.    
  114.     % Calcular la matriz de correlación para las columnas seleccionadas
  115.     matriz_correlacion = corr(datos_seleccionados{:,:});
  116.    
  117.     % Visualizar la matriz de correlación
  118.     disp('Matriz de correlación para columnas seleccionadas:');
  119.     disp(matriz_correlacion);
  120. end
  121.  
  122.  
  123. function calcularCorrelacionPorHora(datos)
  124.     %DateTime          Consumption    Production    Nuclear    Wind    Hydroelectric    OilAndGas    Coal    Solar    Biomass    Indice         FechaHora         Hora
  125.     columnas_de_interes = [2 19];
  126.     datos_seleccionados = datos(:, columnas_de_interes);
  127.     datos_seleccionados
  128.     [matriz_correlacion p] = corr(datos_seleccionados{:,:});
  129.    
  130.     % Visualizar la matriz de correlación
  131.     disp('Matriz de correlación para columnas seleccionadas:');
  132.     disp(matriz_correlacion);
  133.     disp('Valores p:');
  134.     disp(p);
  135. end
  136.  
  137.  
  138. function graficarPorHora(datos)
  139.     figure;
  140.     plot(datos.Hora, datos.mean_Consumption, 'o-', 'LineWidth', 2, 'DisplayName', 'Dato1');
  141.     hold on;
  142.     plot(datos.Hora, datos.mean_Production, 's-', 'LineWidth', 2, 'DisplayName', 'Dato2');
  143.     hold off;
  144.     xlabel('Hora de la Semana');
  145.     ylabel('Energía');
  146.     legend('Consumption', 'Production');
  147. end
  148.  
  149. function graficarPorDia(datos)
  150.     figure;
  151.     datosFecha = datetime(datos.DateTime, 'InputFormat', 'yyyy-MM-dd HH:mm:ss'); %2019-01-01 03:00:00
  152.     datos.Hora = hour(datos.Fecha);
  153.     plot(datosFecha, datos.Consumption, 'o-', 'LineWidth', 2, 'DisplayName', 'Dato1');
  154.     hold on;
  155.     plot(datosFecha, datos.Production, 's-', 'LineWidth', 2, 'DisplayName', 'Dato2');
  156.     hold off;
  157.     xlabel('Tiempo (días)');
  158.     ylabel('Energía');
  159.     legend('Consumption', 'Production');
  160. end
  161.  
  162.  
  163.  
  164. function graficarPorHoraFull(datos)
  165.     datosResp = datos
  166.     %datos.Hora = hour(datos.Fecha);
  167.     figure;
  168.     hold on;
  169.     plot(datos.Hora, datos.Consumption, 'k-', 'LineWidth', 0.5, 'DisplayName', 'Dato1');    
  170.     datos = groupsummary(datos, 'Hora', 'mean');
  171.     plot(datos.Hora, datos.mean_Consumption,'r-', 'LineWidth', 2, 'DisplayName', 'Dato1');
  172.     hold off;
  173.     xlabel('Tiempo (hora del día)');
  174.     ylabel('Energía');
  175.     legend('diario', 'promedio');
  176.  
  177.  
  178.     figure;
  179.     hold on;
  180.     %datos = groupsummary(datos, 'Hora', 'mean');
  181.     datos =datosResp
  182.     plot(datos.day, datos.HDD,'b-', 'LineWidth', 2, 'DisplayName', 'Dato1');
  183.     hold off;
  184.     xlabel('Tiempo (hora del día)');
  185.     ylabel('Energía');
  186.     legend('diario', 'promedio');    
  187. end
  188.  
  189. function graficarPorDayofweekFull(datos)
  190.     %datos.Hora = hour(datos.Fecha);
  191.     figure;
  192.     hold on;
  193.     datos
  194.     datos = groupsummary(datos, ['day'], 'mean', 'Consumption');
  195.     plot(datos.day, datos.mean_Consumption, 'k-', 'LineWidth', 0.5, 'DisplayName', 'Dato1');
  196.     %datos = groupsummary(datos, ['day'], 'mean', 'Consumption');
  197.     datos
  198.    
  199.     plot(datos.day, datos.mean_Consumption,'r-', 'LineWidth', 2, 'DisplayName', 'Dato1');
  200.     hold off;
  201.     xlabel('Tiempo Dia de la semana');
  202.     ylabel('Energía');
  203.     legend('diario', 'promedio');
  204. end
  205.  
  206.  
  207.  
  208.  
  209. function graficarPorDiaMasPromedioFull(datos)
  210.     %datos.Hora = hour(datos.Fecha);
  211.     datos
  212.     figure;
  213.     hold on;
  214.     plot(datos.FechaHora, datos.Consumption, 'k-', 'LineWidth', 0.5, 'DisplayName', 'Dato1');
  215.     datos = groupsummary(datos, 'FechaHora', 'mean');
  216.     plot(datos.FechaHora, datos.mean_Consumption,'r-', 'LineWidth', 2, 'DisplayName', 'Dato1');
  217.     hold off;
  218.     xlabel('Tiempo (hora del día)');
  219.     ylabel('Energía');
  220.     legend('diario', 'promedio');
  221. end
  222.  
  223. function graficarPromediosPorHoraFull(datos)
  224.     %datos.Hora = hour(datos.Fecha);
  225.     datos = groupsummary(datos, 'Hora', 'mean');
  226.     figure;
  227.     %datosFecha = datetime(datos.DateTime, 'InputFormat', 'yyyy-MM-dd HH:mm:ss'); %2019-01-01 03:00:00
  228.    
  229.     plot(datos.Hora, datos.mean_Consumption, 'r-', 'LineWidth', 1, 'DisplayName', 'Dato1');
  230.     hold on;
  231.     plot(datos.Hora, datos.mean_Production, 'b-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  232.     plot(datos.Hora, datos.mean_Nuclear, 'r-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  233.     plot(datos.Hora, datos.mean_Wind, 'g-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  234.     plot(datos.Hora, datos.mean_Hydroelectric, 'y-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  235.     plot(datos.Hora, datos.mean_OilAndGas, 'c-', 'LineWidth',1, 'DisplayName', 'Dato2');
  236.     plot(datos.Hora, datos.mean_Coal, 'm-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  237.     plot(datos.Hora, datos.mean_Solar, 'b-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  238.     plot(datos.Hora, datos.mean_Biomass, 'k-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  239.  
  240.     hold off;
  241.     xlabel('Tiempo (hora del día)');
  242.     ylabel('Energía');
  243.     legend('Consumption', 'Production', 'Nuclear', 'Wind', 'Hydroelectric', 'OilAndGas', 'Coal', 'Solar', 'Biomass');
  244. end
  245.  
  246. function graficarPorDiaFull(datos)
  247.     figure;
  248.     datosFecha = datetime(datos.DateTime, 'InputFormat', 'yyyy-MM-dd HH:mm:ss'); %2019-01-01 03:00:00
  249.     %datos.Hora = hour(datos.Fecha);
  250.     plot(datosFecha, datos.Consumption, 'r-', 'LineWidth', 1, 'DisplayName', 'Dato1');
  251.     hold on;
  252.     plot(datosFecha, datos.Production, 'b-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  253.     plot(datosFecha, datos.Nuclear, 'r-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  254.     plot(datosFecha, datos.Wind, 'g-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  255.     plot(datosFecha, datos.Hydroelectric, 'y-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  256.     plot(datosFecha, datos.OilAndGas, 'c-', 'LineWidth',1, 'DisplayName', 'Dato2');
  257.     plot(datosFecha, datos.Coal, 'm-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  258.     plot(datosFecha, datos.Solar, 'b-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  259.     plot(datosFecha, datos.Biomass, 'k-', 'LineWidth', 1, 'DisplayName', 'Dato2');
  260.  
  261.     hold off;
  262.     xlabel('Tiempo (días)');
  263.     ylabel('Energía');
  264.     legend('Consumption', 'Production', 'Nuclear', 'Wind', 'Hydroelectric', 'OilAndGas', 'Coal', 'Solar', 'Biomass');
  265. end
  266.  
  267. function histograma(datos, texto)
  268.     figure;
  269.     % Crear un histograma
  270.     histObj = histogram(datos, 'Normalization', 'pdf');
  271.    
  272.     % Obtener los bordes de los contenedores y las probabilidades
  273.     bordes_contenedores = histObj.BinEdges;
  274.     probabilidades = histObj.Values;
  275.    
  276.     % Ajustar una distribución de probabilidad (por ejemplo, ajuste normal)
  277.     ajuste_normal = fitdist(datos, 'Normal');
  278.    
  279.     % Calcular la PDF de la distribución ajustada
  280.     x = linspace(min(datos), max(datos), 100);
  281.     pdf_ajustada = pdf(ajuste_normal, x);
  282.    
  283.     % Graficar el histograma y la distribución ajustada
  284.    
  285.     bar(bordes_contenedores(1:end-1), probabilidades, 'hist');
  286.     hold on;
  287.     plot(x, pdf_ajustada, 'r', 'LineWidth', 2);
  288.     xlabel(strcat('Datos: ',' ',texto));
  289.     ylabel(strcat('Densidad de probabilidad ',''));
  290.     title(strcat('Distribución de Densidad y Ajuste:  ',texto));
  291.     legend('Histograma', 'Distribución Ajustada');
  292.     hold off;
  293. end
  294.  
  295. %%%%%%%%%%%%%%%%%%%%%%%%%%%
  296. %%%%%%%%%%%%%Utiles
  297.  
  298. function X_norm = minMaxScaler(X, newMin, newMax)
  299.     % Normalizar los datos utilizando Min-Max Scaler
  300.    
  301.     if nargin < 2
  302.         newMin = 0;  % Valor mínimo por defecto
  303.         newMax = 1;  % Valor máximo por defecto
  304.     end
  305.    
  306.     X_min = min(X);
  307.     X_max = max(X);
  308.    
  309.     X_norm = (X - X_min) ./ (X_max - X_min) * (newMax - newMin) + newMin;
  310. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement