%% 清空环境变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
%% 读取数据
res = xlsread('Wind_farm.xlsx');
res = res(5e3:1e4,:);
res(:,10)=[];
%% 异常值处理
% 一行元素全部相同为-99 直接删除
same_pos = [];
for i = 1:size(res,1)
if all(res(i,1:end-1) == res(i,1))
same_pos = [same_pos;i];
end
end
res(same_pos,:) =[];
%% 缺失值处理 采用前面的值替代
missing = isnan(res);
for i=1:size(res,1)
for j=1:size(res,2)
if missing(i,j) == 1
res(i,j) = res(i-1,j);
end
end
end
%% 离群值处理
[B,TF,L,U,C] = filloutliers(res(:,:),"clip","movmedian",15);%滑动窗线性插值
res_new = B;
%% 绘制处理前特征与标签相关性热力图
R1 = corrcoef(res_new(:,[1,3,5,7,11])); %风速与功率相关性强
figure;
pcolor(R1);
shading flat; % 去掉网格线
colorbar; % 显示颜色条
% 美化图形
title('处理前相关性热力图');
xlabel('变量X');
ylabel('变量Y');
axis equal tight; % 等比例轴,紧凑范围
%% 相关性极差的也定义为异常值
% 处理:采用Ransac拟合后替代
x = res_new(:,7);
y = res_new(:,end);
xyPoints = [x y];
% RANSAC直线拟合
sampleSize = 25; % 每次采样的点数,直线为2
maxDistance = 350; % 内点到模型的最大距离
fitLineFcn = @(xyPoints) polyfit(xyPoints(:,1),xyPoints(:,2),1); % 拟合方式采用 polyfit,这里不可以用x,y替换xyPoints(:,1),xyPoints(:,2)
evalLineFcn = @(model, xyPoints) sum((y - polyval(model, x)).^2,2);% 距离估算函数
[modelRANSAC, inlierIdx] = ransac(xyPoints,fitLineFcn,evalLineFcn,sampleSize,maxDistance);% 执行RANSAC直线拟合,提取内点索引
modelInliers = polyfit(xyPoints(inlierIdx,1),xyPoints(inlierIdx,2),1);% 对模型内点进行最小二乘直线拟合
figure;
plot(xyPoints(inlierIdx,1),xyPoints(inlierIdx,2),'.'); % 内点
hold on;
plot(xyPoints(~inlierIdx,1),xyPoints(~inlierIdx,2),'ro'); % 外点
hold on;
inlierPts = xyPoints(inlierIdx,:);
x2 = linspace(min(inlierPts(:,1)),max(inlierPts(:,1)));
y2 = polyval(modelInliers,x2);
plot(x2, y2, 'g-'); % RANSAC直线拟合结果
hold off;
title('最小二乘直线拟合 与 RANSAC直线拟合 对比');
xlabel('X(m)');
ylabel('Y(m)');
zlabel('Z(m)');
legend('内点','噪声点','RANSAC直线拟合','Location','NorthWest');
%% 残差-孤立森林
% 计算Ransac理论值
T_linear = (modelRANSAC(1)*res_new(:,7)+modelRANSAC(2));
for i = 1:size(T_linear,1)
if T_linear(i,end)<0
T_linear(i,end)=0;
end
end
residual_power = abs(res_new(:,end) - T_linear);
% plot(T_linear)
% 孤立森林判断异常值
[error_pos2] = iso_forest([res_new(:,[1,3,5,7]) residual_power]);
%% 替代异常值
for i = 1:size(error_pos2,2)
res_new(error_pos2{i,1},end) = T_linear(error_pos2{i,1});
end
res_new(~inlierIdx,end) = T_linear(~inlierIdx);
%% 绘制处理后特征与标签相关性热力图
R2 = corrcoef(res_new(:,[1,3,5,7,11]));
figure;
pcolor(R2);
shading flat; % 去掉网格线
colorbar; % 显示颜色条
% 美化图形
title('处理后相关性热力图');
xlabel('变量X');
ylabel('变量Y');
axis equal tight; % 等比例轴,紧凑范围
%% 保存清洗好的数据
save res res_new;
没有合适的资源?快使用搜索试试~ 我知道了~
风机SCADA数据清洗(缺失值填补+异常值处理) MATALB代码
共5个文件
m:2个
mat:1个
xlsx:1个
需积分: 0 2 下载量 168 浏览量
2024-07-16
17:38:38
上传
评论 2
收藏 7.97MB RAR 举报
温馨提示
结合RANSAC算法、孤立森林算法以及滑动窗线性插值,清洗后保持原数据的特征和随机性。异常值处理采用Ransac法拟合并结合孤立森林算法检测替代,离群值采用滑动窗线性插值,清洗后数据效果提升,相关性进一步增强,但不失原数据的特征及随机性。 首先使用RANSAC算法对数据进行初步拟合和筛选,去除一些明显的异常值;然后使用孤立森林算法对剩余的数据进行进一步检测,找出那些与大多数数据点分布不一致的离群值。对于检测到的离群值或缺失值,可以使用滑动窗线性插值进行填充。
资源推荐
资源详情
资源评论
收起资源包目录
SCADA清洗.rar (5个子文件)
数据清洗
Wind_farm.xlsx 7.92MB
res.mat 211KB
iso_forest.m 775B
data_wash.asv 3KB
data_wash.m 3KB
共 5 条
- 1
资源评论
是我不懂
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 学校课程软件工程常见10道题目以及答案demo
- javaweb新手开发中常见的目录结构讲解
- 新手小白的git使用的手册入门学习demo
- 基于Java观察者模式的info-express多对多广播通信框架设计源码
- 利用python爬取豆瓣电影评分简单案例demo
- 机器人开发中常见的几道问题以及答案demo
- 基于SpringBoot和layuimini的简洁美观后台权限管理系统设计源码
- 实验报告五六代码.zip
- hdw-dubbo-ui基于vue、element-ui构建开发,实现后台管理前端功能.zip
- (Grafana + Zabbix + ASP.NET Core 2.1 + ECharts + Dapper + Swagger + layuiAdmin)基于角色授权的权限体系.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功