一、 导入原始负荷数据 Excel 文件
input_filename = 'your_data_file.xlsx'; % 修改为你的实际文件名
output_filename = 'output_peak_valley.xlsx'; % 修改为导出的文件名
`input_filename` 是要读取的 Excel 文件的名称,这里需要替换为你实际的数据文件名。-`output_filename` 是你要保存结果的 Excel 文件名称,可以按需修改。
二、读取负荷数据,假设编号在第一列,日期在第六列,负荷数据从第七列开始
data_table = readtable(input_filename);
`readtable` 函数用于从 Excel 文件中读取数据,并将其存储在 `data_table` 中。
假设表格中的用户编号列名称是 `SerialNumber`,日期列名称是 `Date`,负荷数据从第七列(`P1` 到 `P96`)开始。
三、 初始化输出表格,保留编号和日期
output_data = data_table(:, {'SerialNumber', 'Date'});
这里初始化了一个输出表格 `output_data`,只保留编号 (`SerialNumber`) 和日期 (`Date`) 两列。
四、 获取负荷数据,从第七列开始
load_data = data_table(:, 7:end);
通过 `data_table(:, 7:end)` 语句,从原始表格中提取负荷数据,即第七列到最后一列。
五、 获取负荷数据的行数和列数
[num_rows, num_cols] = size(load_data);
`num_rows` 和 `num_cols` 分别表示负荷数据的行数和列数,用于后续循环操作。
六、 初始化峰谷标记矩阵
peak_valley_data = zeros(num_rows, num_cols);
创建一个大小与 `load_data` 相同的矩阵 `peak_valley_data`,初始值为零,存储峰谷平标记(峰为1,谷为-1,平为0)。
七、遍历每一行数据,计算平均值并标记峰谷
for i = 1:num_rows
daily_data = table2array(load_data(i, :)); % 将每行数据转换为数组
daily_avg = mean(daily_data); % 计算当天的平均负荷
八、 标记峰谷平
peak_valley_data(i, daily_data > daily_avg) = 1; % 峰时段
peak_valley_data(i, daily_data < daily_avg) = -1; % 谷时段
peak_valley_data(i, daily_data == daily_avg) = 0; % 平时段
end
使用 `for` 循环逐行遍历 `load_data`。
`daily_data` 是当前行的数据转换为数组。
`daily_avg` 计算当天的平均负荷值。
根据每个时段的负荷值与当天平均值的比较:
高于平均值的时段标记为峰(1)
低于平均值的时段标记为谷(-1)
等于平均值的时段标记为平(0)
九、 创建时间段列名称,一小时一段
time_labels = {};
for i = 0:23
for j = 0:3
start_minute = j * 15;
end_minute = start_minute + 15;
time_labels{end + 1} = sprintf('%02d:%02d-%02d:%02d', i, start_minute, i, end_minute);
end
end
使用嵌套循环生成时间段的列名称,从 `00:00-00:15` 到 `23:45-00:00`,每小时分为四段,每段15分钟。
`sprintf` 用于格式化时间段并添加到 `time_labels` 中。
十、 将标记结果转换为表格,列名称为时间段
peak_valley_table = array2table(peak_valley_data, ...
'VariableNames', time_labels);
`array2table` 函数将 `peak_valley_data` 转换为一个 MATLAB 表格。
使用 `time_labels` 设置表格的列名称,使之与生成的时间段名称一致。
十一、 将标记结果与编号和日期合并
output_data = [output_data, peak_valley_table];
将 `SerialNumber` 和 `Date` 列与峰谷标记表格合并,形成最终输出数据。
十二、导出结果为 Excel 文件
writetable(output_data, output_filename);
disp('峰谷平标记数据已成功导出为 Excel 文件!');
`writetable` 将合并后的数据导出为 Excel 文件,文件名为 `output_filename`。
使用 `disp` 函数输出一条消息,表示导出成功