需求响应计算用户月平均负荷数据

一、 清空工作空间和命令行
clear;
clc;

`clear`:清除当前工作区中的所有变量,以确保没有旧的数据干扰。
 `clc`:清空命令行窗口,使输出更清晰。


二、 设定输入文件路径和输出文件夹
input_file = 'your_data.xlsx';  % 替换为你的实际文件名
output_folder = 'output';       % 输出文件夹名,可根据需要调整
```
- `input_file`:输入 Excel 文件的路径。需要替换为实际的文件名。
- `output_folder`:指定结果保存的文件夹名称。

三、 创建输出文件夹(如果不存在)
if ~exist(output_folder, 'dir')
    mkdir(output_folder);
end

- 检查 `output_folder` 是否存在,如果不存在,则使用 `mkdir` 创建文件夹,确保后续的输出文件有地方保存。


四、 读取 Excel 文件的选定列
opts = detectImportOptions(input_file);
opts.SelectedVariableNames = {'SerialNumber', 'Date', arrayfun(@(x) ['P', num2str(x)], 1:96, 'UniformOutput', false)};
data = readtable(input_file, opts);

`detectImportOptions(input_file)`:检测 Excel 文件中的导入选项,方便自定义读取设置。
`opts.SelectedVariableNames`:指定需要读取的列,包括 `SerialNumber`、`Date` 和 `P1` 到 `P96`,使用 `arrayfun` 生成从 `P1` 到 `P96` 的变量名数组。
 `readtable(input_file, opts)`:根据指定的导入选项 `opts` 读取 Excel 文件中的数据,并将其存储为表格 `data`。


五、 提取唯一的用户编号
user_ids = unique(data.SerialNumber);

 `unique(data.SerialNumber)`:提取 `SerialNumber` 列中所有唯一的用户编号,用于后续对每个用户的数据进行单独处理。


六、月份名称
month_names = {'1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'};

定义一个包含 12 个月份名称的单元格数组,用于在输出的 Excel 表格中作为月份列的内容。


七、 循环处理每个用户
for i = 1:length(user_ids)
    user_id = user_ids(i);

 开始循环遍历每一个用户,`i` 是循环索引,`user_id` 是当前循环中的用户编号。


  八、筛选当前用户的数据
user_data = data(data.SerialNumber == user_id, :);

通过逻辑索引提取当前用户的数据,即从 `data` 表格中选择 `SerialNumber` 等于 `user_id` 的所有行。


  九、 初始化月平均负荷数据
monthly_avg_load = zeros(12, 96);

初始化一个 12×96 的矩阵 `monthly_avg_load`,用于存储每个月的平均负荷数据。矩阵的行表示月份,列表示每小时的数据点。


   十、 按月计算平均负荷
for month = 1:12
        % 筛选出该月的数据
        month_data = user_data(month(user_data.Date) == month, 7:end); % 7:end获取P1到P96列
1.开始循环遍历 12 个月的数据


 `month(user_data.Date) == month`:使用 `month` 函数从 `Date` 列中提取月份并匹配当前的 `month` 值,筛选该月的数据。
 `7:end`:选择从第 7 列(即 `P1`)到最后一列(即 `P96`)的数据,这些列是每小时的数据点。
 

2.计算每个小时点的月平均值
 monthly_avg_load(month, :) = mean(month_data{:,:}, 1, 'omitnan');
    end

 `mean(month_data{:,:}, 1, 'omitnan')`:计算筛选出的月数据的平均值,按列计算(即按每个小时),并忽略 `NaN` 值,避免异常数据影响计算结果。

十一、 创建表格,将计算结果转换为表格形式并添加列名
variable_names = arrayfun(@(x) ['P', num2str(x)], 1:96, 'UniformOutput', false);
output_table = array2table(monthly_avg_load, 'VariableNames', variable_names);

 `arrayfun`:生成从 `P1` 到 `P96` 的列名称数组。
 `array2table(monthly_avg_load, 'VariableNames', variable_names)`:将计算的月平均负荷数据转换为表格,并指定列名称为 `P1` 到 `P96`。


 十二、 添加月份列
 output_table.('月份') = month_names';
    output_table = movevars(output_table, '月份', 'Before', 'P1');  % 将月份列移到数据前面

 `output_table.月份 = month_names'`:添加一个 `月份` 列,内容为 `month_names`,按行排列。
 `movevars(output_table, '月份', 'Before', 'P1')`:将 `月份` 列移动到表格的最前面。


  十三、 生成 Excel 文件名并写入数据
output_filename = fullfile(output_folder, ['用户_', num2str(user_id), '.xlsx']);
    writetable(output_table, output_filename);

`fullfile(output_folder, ['用户_', num2str(user_id), '.xlsx'])`:生成输出文件名,包含输出路径和当前用户编号。
 `writetable(output_table, output_filename)`:将表格 `output_table` 写入指定的 Excel 文件。

十四、 显示导出成功的信息
disp(['用户 ', num2str(user_id), ' 的月平均负荷数据已成功导出为 Excel 文件!']);
end

- 输出信息,提示该用户的月平均负荷数据已成功导出为 Excel 文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值