一.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);