数据预处理

一.matlab基本运算

1.sum函数

(1)如果是向量(无论是行向量还是列向量),都是直接求和

E = [1,2,3]
sum(E)
E = [1;2;3]
sum(E)

(2)如果是矩阵,则需要根据行和列的方向作区分

E = [1,2;3,4;5,6]
a = sum(E)
a = sum(E,1)
a = sum(E,2)
a = sum(sum(E))
a = sum(E(:))

 a=sum(x); %按列求和(得到一个行向量)
 a=sum(x,2); %按行求和(得到一个列向量)
 a=sum(x(:));%对整个矩阵求和

2.如何提取矩阵中指定位置的元素?

%(1)取指定行和列的一个元素(输出的是一个值)
clc;A=[1 1 4 1/3 3;1 1 4 1/3 3;1/4 1/4 1 1/3 1/2;3 3 3 1 3;1/3 1/3 2 1/3 1];
A
A(2,1)
A(3,2)
% (2)取指定的某一行的全部元素(输出的是一个行向量)
clc;A
A(2,:)
A(5,:)
% (3)取指定的某一列的全部元素(输出的是一个列向量)
clc;A
A(:,1)
A(:,3)
% (4)取指定的某些行的全部元素(输出的是一个矩阵)
clc;A
A([2,5],:)      % 只取第二行和第五行(一共2行)
A(2:5,:)        % 取第二行到第五行(一共4行)
A(2:2:5,:)     % 取第二行和第四行 (从2开始,每次递增2个单位,到5结束)
A(2:end,:)      % 取第二行到最后一行
A(2:end-1,:)    % 取第二行到倒数第二行
% (5)取全部元素(按列拼接的,最终输出的是一个列向量)
clc;A
A(:)

3.size函数

size(A)函数是用来求矩阵A的大小的,它返回一个行向量,第一个元素是矩阵的行数,第二个元素是矩阵的列数

A = [1,2,3;4,5,6]
B = [1,2,3,4,5,6]
size(A)
size(B)
[r,c] = size(A)
% 将矩阵A的行数返回到第一个变量r,将矩阵的列数返回到第二个变量c
r = size(A,1)  %返回行数
c = size(A,2) %返回列数

4.repmat函数

 B = repmat(A,m,n):将矩阵A复制m×n块,即把A作为B的元素,B由m×n个A平铺而成。


A = [1,2,3;4,5,6]
B = repmat(A,2,1)
B = repmat(A,3,2)

5.MATLAB在矩阵的运算

MATLAB在矩阵的运算中,“*”号和“/”号代表矩阵之间的乘法与除法;

两个形状相同的矩阵对应元素之间的乘除法需要使用“.*”和“./”

% MATLAB在矩阵的运算中,“*”号和“/”号代表矩阵之间的乘法与除法(A/B = A*inv(B))
A = [1,2;3,4]
B = [1,0;1,1]
A * B
inv(B)  % 求B的逆矩阵
B * inv(B)
A * inv(B)
A / B

% 两个形状相同的矩阵对应元素之间的乘除法需要使用“.*”和“./”
A = [1,2;3,4]
B = [1,0;1,1]
A .* B
A ./ B

% 每个元素同时和常数相乘或相除操作都可以使用
A = [1,2;3,4]
A * 2
A .* 2
A / 2 
A ./ 2

% 每个元素同时乘方时只能用 .^
A = [1,2;3,4]
A .^ 2
A ^ 2 
A * A

6.find函数

find函数:可以用来返回向量或者矩阵中不为0的元素的位置索引。


clc;X = [1 0 4 -3 0 0 0 8 6]
ind = find(X)
% 其有多种用法,比如返回前2个不为0的元素的位置:
ind = find(X,2)

%上面针对的是向量(一维),若X是一个矩阵(二维,有行和列),索引该如何返回呢?
clc;X = [1 -3 0;0 0 8;4 0 6]
ind = find(X)
% 这是因为在Matlab在存储矩阵时,是一列一列存储的,我们可以做一下验证:
X(4)
% 假如你需要按照行列的信息输出该怎么办呢?
[r,c] = find(X)
[r,c] = find(X,1) %只找第一个非0元素

二.数据读取

data_table1=readtable('附件1.xlsx','Sheet','企业营业额')
%读取数据,并呈现在MATLAB中为表格形式
data_table2=data_table1(:,3:end);
%去除文本形式的列,只保留含有数据的列向量
data_table3=table2array(data_table2);
%转换为double形式(数组)

若是.csv文件,则用csvread函数

三.缺失值识别

isnan()函数,判断矩阵中是否有异常值,若出现则为1.

nanid=isnan(data)
%缺失值识别

find()函数,查找缺失值所在位置

[A(:,1),A(:,2)]=find(nanid==1);
%建立矩阵A,让A的第一列来记录缺失数据的所在行,第二列记录所在列

若缺失值为连续数据,则删除

data(:,7)=[];

四.异常值识别

m_data=mean(data_test);%取平均值
m_data=std(data_test);%取标准差
%%三sgm原则
index=abs(data_test-m_data)>3*s_data;%若满足,则为异常值
index1=find(index==1);

建立for循环,遍历整个表格

[m,n]=size(data);
for i=1:n
    data1=data(:,i)
    data_index{1,i}=find(abs(data1-mean(data1))>3*std(data1));
    %元胞数组{}记录第i列异常值的位置
    plot(i,data1,'bo')%绘制散点图
    hold on;
    if(length(data_index{1,i})>=1)
    plot(i,data1(data_index{1,i}),'r*','LineWidth',1)%将异常值标红
    hold on;
    
    

使用插值法处理异常值(建议用三次样条插值法)

[m,n]=size(data);
for i=1:n
    data1=data(:,i)
    data_index{1,i}=find(abs(data1-mean(data1))>3*std(data1));
    %元胞数组{}记录第i列异常值的位置
    plot(i,data1,'bo')%绘制散点图
    hold on;
    if(length(data_index{1,i})>=1)
    plot(i,data1(data_index{1,i}),'r*','LineWidth',1)%将异常值标红
    hold on;
    %对异常值进行插值补全
    label=1:m;
    label1=label;
    label1(data_index{1,i})=[];%将异常值的索引删除
    ylabel=data1;
    ylabel(data_index{1,i})=[];%将异常值的值删除
    ylabel1=interp1(label1,ylabel,label,'spline');
    %三次样条插值法
    data(:,i)=ylabel1;

五.数据标准化

一共有两种标准化形式

data1=zscore(data);%对每列进行标准化处理

data2=(mapminmax(data,0,1));%0-1标准化,对每行进行标准化处理,注意转置,

六.降维

1.PCA主成分降维

data1=pca(data,2);%降成两个维度

2.TSNE降维

data1=tsne(data,'NumDimensions',2)

每次降维结果都不一样,是一种较新的降维方式。

七.相关性分析

绘制热力图

%% 配色数据保存
mycolor = [0.474509803921569,0.650980392156863,0.807843137254902;...
 0.682352941176471,0.823529411764706,0.898039215686275;...
 0.941176470588235,0.972549019607843,0.862745098039216;...
 0.992156862745098,0.968627450980392,0.705882352941177;...
 1,0.901960784313726,0.603921568627451];
[X,p_value]=corr(data,'Tape','Pearson');%算出相关系数
%% 开始绘制热图
% 命名所有变量名字,这里大家可以替换成自己需要的变量名
label_name = {'N1','N2','N3','N4','N5','N6','N7','N8','N9','N10','N11','N12','N13'};
xlabel_name = label_name;
ylabel_name = label_name;
% 热图函数为heatmap;开始绘制
hot_figure = heatmap(xlabel_name,ylabel_name,X,'FontSize',10);%X为数值矩阵
hot_figure.GridVisible = 'off';
% 设置坐标区名字与图的大标题
hot_figure.Title = 'Heated';
hot_figure.XLabel = 'xlabel';
hot_figure.YLabel = 'ylabel';
%% 对热图上色—colormap函数
colormap(gca,mycolor);
%%还有一中色图的表达
colormap(color_cell1{1,3});

plotmatrix函数画图

[~,ax_tmp] = plotmatrix(da12_gj_hx_clr);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值