1.数据预处理:
matlab导入excel数据:在MATLAB中,如何导入Excel文件中的数据-百度经验 (baidu.com)
方法二:
a=xlsread('A.xls',1)指的是excel文件里的第一张工作表,例如sheet1。
参考:https://blog.csdn.net/weixin_30633405/article/details/95177009
在用MATLAB进行数据分析的时候,坏点对正确结果的影响比较大,
因此,我么需要剔除野点,对于坏值的剔除,我们
利用 3σ准则 剔除无效数据;
3σ准则又称为拉依达准则,它是先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,
认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除。且3σ适用于有较多组数据的时候。
这种判别处理原理及方法仅局限于对正态或近似正态分布的样本数据处理,它是以测量次数充分大为前提的,
当测量次数较少的情形用准则剔除粗大误差是不够可靠的。因此,在测量次数较少的情况下,最好不要选用准则,而用其他准则。
在正态分布中σ代表标准差,μ代表均值。x=μ即为图像的对称轴
3σ原则为
数值分布在(μ-σ,μ+σ)中的概率为0.6826
数值分布在(μ-2σ,μ+2σ)中的概率为0.9544
数值分布在(μ-3σ,μ+3σ)中的概率为0.9974
可以认为,Y 的取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%.
下面是对一组元素进行坏值剔除的方法:
对每一列进行分析,参考代码:
1 a=xlsread('附件一:已结束项目任务数据.xls',1,'B2:B836'); 2 %% 3 [h,p]=lillietest(a) %判断是否正态。h=0 4 %返回值h为假设,只有0和1两种情况,h=0假设符合正态分布,h=1假设不符合正态分布 5 %返回值p为方差概率,也可以说事情的发生概率,p<0.05(显著性水平通常取0.05,还有0.025和0.01三种情况)为不可能事件,拒绝;p>0.05,接受 6 %% 7 subplot(2,1,1); 8 plot(a); 9 aa=mean(a); 10 sig=std(a); %算出x的标准偏差。 11 m=zeros(1,length(a)); 12 i=1; 13 for t=1:length(a) 14 m(t)=abs(a(t)-aa); 15 if m(t)>3*sig 16 n(t)=aa;%这里把异常值替换成了均值,也可以直接替换成其他的值如0等,然后进行剔除 17 num(i)=a(t);%显示异常数据,如果没有异常数据的话将不会产生num变量 18 i=i+1; 19 else 20 n(t)=a(t); 21 end 22 end 23 b=0:1:length(n)-1; 24 subplot(2,1,2); 25 plot(b,n); 26 title('拉以达法则剔除坏值') 27 xlabel('采样时间'); 28 ylabel('采样点数')
处理数据参考: