数据处理与分析

20220127

前段时间主要下载整理了数据;接下来这段时间,首先需要处理数据,要将相对应的空气污染物指标数据计算平均值并规整起来;读了几篇博文

Matlab 使用笔记(本人出品,必属精品)_Gou_Hailong的博客-CSDN博客

matlab 处理excel中数据_M、F、C-CSDN博客

MATLAB获取Excel指定行列数据及删除指定行数据_LYX1945057326的博客-CSDN博客_matlab删除excel指定行​​​​

20220128—matlab批量提取excel所需列数据

list=dir('*.xlsx');
for j=1:4
n=[];
b=xlsread(list(j).name,'wheat_');
for i=2:12:301
    z=[i:i+8];
    xi=b(:,z);
    n=[n xi];
end
m=xlswrite(list(j).name,n,'wheat')
end

今天学习了提取下划线之前的字符串;尝试的以该方法作为xlsread函数里的参数没有成功,不知道原因;

学习了字符串函数连接:matlab中strcat用法_wanzi1122的博客-CSDN博客_matlab中strcat函数用法

元胞数组中某一值的提取;

list=dir('*.xlsx');
for j=1:4
n=[];
i='-maize'
q=strsplit(list(j).name,{'_'});
name=q(1,1);
str=strcat(name,i)
b=xlsread(list(j).name,str);
for i=2:12:301
    z=[i:i+8];
    xi=b(:,z);
    n=[n xi];
end
m=xlswrite(list(j).name,n,'maize')
end

明天继续探索matlab批量求数据均值~~~

20220129——matlab批量求平均值

list=dir('*.xlsx');
for j=1:4
n=[];
b=xlsread(list(j).name,'maize.1');
for i=1:4:100
    z=[i:i+3];
    xi=b(:,z);
    c=mean(xi,2);
    n=[n c];
end
m=xlswrite(list(j).name,n,'maize.mean1')
end

20220203—长时间序列数据趋势分析

1.EOF:后面需要和(PCA)一起了解,两者差不多;

2.数据平滑处理:数据平滑方法的原理和应用_hajlyx的博客-CSDN博客_数据平滑

直线滑动平均法,是以平均数为基础,将线性回归模型与滑动平均相结合的模拟方法。这种方法不仅可以不主观假定产量历史演变的曲线类型,而且可以不忽视本序列年数。当某一年因为自然因素的影响导致小麦年产量比较低时,其年际间的增长量将会变得很高。我们把整个时间序列中某一个阶段的小麦产量看成一条直线,时间序列即为随着时间变化的数据序列。我们将这条直线在这段时间和下段时间之间的变化当成一个趋势(张军,柴岩红.冬小麦趋势产量与气象产量分离方法对比[J].乡村科技,2020,(06):98-99.)

3.M-K趋势分析:原理以及matlab源码matlab实现m-k突变的,用matlab进行mk趋势分析与突变检验.pdf_weixin_39662721的博客-CSDN博客

MK检验方法 - 百度文库 

20220206——matlab数值分析视频学习

B站学习相关matlab数值分析;关系运算符(>=)参与运算,画出某区间内的图、以及应用于分段函数;逻辑运算函数;

数值数组【】;字符数组‘’;结构数组struct;元胞数组{},循环绘制不同线型、颜色;各种函数创建矩阵;

去除重复元素unique;

向量函数:向量夹角(计算文本相似性),向量计算

(大部分讲了具体的矩阵计算)

重新回到自己的数据处理上:

Matlab处理气象数据(七)分段趋势线的做法_设计の诗-CSDN博客_matlab趋势线

利用滑动平滑法去除异常点影响后一次拟合得到产量数据倾向率,最后用GIS可视化,暂时得到的效果:

e=[];
d=[];
for i=1:length(a2)
    d1=smooth(a2(i,:),3);
    d=[d d1];
    e1=polyfit(c22,d1,1);
    e=[e e1(1)];
    f1=e(:);
end

后续的重点应该放在数值分析的方法上,要开始阅读相关文献啦!!!

20220207—单产数据、气象数据的趋势分析及显著性检验

 发现错误,前面的返工吧~~~

20220208—单产数据、气象数据的趋势分析

做臭氧趋势分析时,查了一些资料了解臭氧浓度的几种表示;了解大气对流层、平流层含义;

平流层臭氧耗损问题.ppt-全文可读

趋势分析中,对于1990-2014期间25年的数据,在1990-2004、2004-2010两个阶段趋势并不同,所以分三种情况:25年总体的和两个阶段的;

e=[];
ee=[];
d=[];
dd=[];
for i=1:length(a2)
    d1=smooth(a2(i,1:15),3);
    d2=smooth(a2(i,15:25),3);
    d=[d d1];
    dd=[dd d2];
    e1=polyfit(c22,d1,1);
    e2=polyfit(c33,d2,1);
    e=[e e1(1)];
    ee=[ee e2(1)];
    f1=e(:);
    f2=ee(:);
    ff=[f1 f2];
end

考虑到趋势突变的问题:mk突变点检测_(案例)时间序列分析之MK突变检测_aye toms的博客-CSDN博客

参考博文:时间序列的突变点检验程序 matlab,时间序列的贝叶斯突变检测算法MATLAB源码_weixin_39866881的博客-CSDN博客

突变分为如下主要的几种:均值突变(最常见)、方差突变、线性回归突变(也称趋势突变)、概率突变、空间型突变、谱突变、模型参数突变,等等。贝叶斯突变检测属于概率突变检测方法,其特点是能给出突变点的概率分布图。

均值突变:(近50年河西走廊地区降水均值突变特征分析 - 道客巴巴);

在matlab中主要进行了MK非参数突变点检测,想求出突变点对应的x值;没有成功;主要参考以下博文源码,可以直接使用:

Manner-Kendall(M-K)---突变检验_地理研究与算法的博客-CSDN博客_突变检验

——转载——(上述源码详见下:) 

clc
clear all
A=xlsread('C:\Users\Desktop\mk突变检验\data.xls','Sheet1','A2:B52');
x=A(:,1); % 时间列
y=A(:,2); % 数据列
N=length(y);
n=length(y);
Sk=zeros(size(y));
UFk=zeros(size(y));
s=0;
for i=2:n
   for j=1:i
         if y(i)>y(j)
           s=s+1;
         else
           s=s+0;
         end
   end
   Sk(i)=s;
   E=i*(i-1)/4; 
  Var=i*(i-1)*(2*i+5)/72; 
  UFk(i)=(Sk(i)-E)/sqrt(Var);
end
y2=zeros(size(y));
Sk2=zeros(size(y));
UBk=zeros(size(y));
s=0;
for i=1:n
    y2(i)=y(n-i+1);
end
for i=2:n
   for j=1:i
         if y2(i)>y2(j)
           s=s+1;
         else
           s=s+0;
         end
   end
   Sk2(i)=s;
   E=i*(i-1)/4; 
  Var=i*(i-1)*(2*i+5)/72;
  UBk(i)=0-(Sk2(i)-E)/sqrt(Var);
end
UBk2=zeros(size(y));
for i=1:n
   UBk2(i)=UBk(n-i+1);
end
h1=plot(x,UFk,'r-','linewidth',1.5);
hold on
h2=plot(x,UBk2,'b-.','linewidth',1.5);
axis([min(x),max(x),-5,6]);
xlabel('年份','FontName','TimesNewRoman','FontSize',12);
ylabel('时间序列数据','FontName','TimesNewRoman','Fontsize',12);
hold on
plot(x,0*ones(N,1),'-.','linewidth',1); 
ylim([-3 7]);
h3=plot(x,1.96*ones(N,1),':','linewidth',1);
plot(x,-1.96*ones(N,1),':','linewidth',1);
legend([h1 h2 h3],'UF统计量','UB统计量','0.05显著水平','Location','NorthEast');
f1=UFk;
f2=UBk2;

练习了多项式的拟合以及曲线交点的求法;(polyfit、polyval、vpa(poly2sym(),)、solve函数);

但是————进行后续的提取突变点时没有成功~~~不晓得是哪里的问题

(源码:)

j=1;%j是满足条件的交点的个数,每个像元满足条件的交点存入pp中
    for i=1:30   %代表分段数 每个像元一共33段 
        x=i:(i+1);
        k1=f1(i+1)-f1(i);
        b1=(i+1)*f1(i)-i*f1(i+1);
        y1=k1*x+b1; 
        k2=f2(i+1)-f2(i);
        b2=(i+1)*f2(i)-i*f2(i+1);
        y2=k2*x+b2;
        % plot(y1);
        % hold on
        % plot(y2);
        syms x y
        [xx,yy]=solve(y==k1*x+b1,y==k2*x+b2,x,y); 
        if ~isnan(xx)&xx>=i&xx<(i+1)&yy<1.96&yy>-1.96
            pp(j)=double(xx)+1981;
            j=j+1;
        end
    end
    c{m}=pp;
end

(俺滴码) 

for i=1:24
        x=i:(i+1);
        k1=f1(i+1)-f1(i);
        b1=(i+1)*f1(i)-i*f1(i+1);
        y1=k1*x+b1; 
        k2=f2(i+1)-f2(i);
        b2=(i+1)*f2(i)-i*f2(i+1);
        y2=k2*x+b2;
        plot(x,y1);
        hold on
        plot(x,y2);
        syms x y
        xx=solve(y1==y2,x);
        pp=double(xx)+1990;
        pp=[p pp];
    end

猜你喜欢

转载自blog.csdn.net/weixin_45626690/article/details/122723037
今日推荐