1.数据的读取与写入
excel、txt
P23-25
读图
cha3
ReadImages
%% 读取图片 % 《MATLAB数学建模方法与实践》(《MATLAB在数学建模中的应用》升级版),北航出版社,卓金武、王鸿钧编著. clc, clear, close all a1=imread('000.bmp'); [m,n]=size(a1); %% 批量读取图片 dirname = 'ImageChips'; files = dir(fullfile(dirname, '*.bmp')); a=zeros(m,n,19); pic=[]; for ii = 1:length(files) filename = fullfile(dirname, files(ii).name); a(:,:,ii)=imread(filename); pic=[pic,a(:,:,ii)]; end double(pic); figure imshow(pic,[])
此外参考https://blog.csdn.net/WTYuong/article/details/122626337
图像识别系列
读视频
选取某帧数图像进行图像层面的分析
cha3
readVideo
%% 读取视频数据 % 《MATLAB数学建模方法与实践》(《MATLAB在数学建模中的应用》升级版),北航出版社,卓金武、王鸿钧编著. videoFReader = vision.VideoFileReader('vippedtracking.mp4'); % 播放视频文件 videoPlayer = vision.VideoPlayer; while ~isDone(videoFReader) videoFrame = step(videoFReader); step(videoPlayer, videoFrame); end release(videoPlayer); %% 设置播放方式 % 重置播放器 reset(videoFReader) % 增加播放器的尺寸 r = groot; scrPos = r.ScreenSize; % Size/position is always a 4-element vector: [x0 y0 dx dy] dx = scrPos(3); dy = scrPos(4); videoPlayer = vision.VideoPlayer('Position',[dx/8, dy/8, dx*(3/4), dy*(3/4)]); while ~isDone(videoFReader) videoFrame = step(videoFReader); step(videoPlayer, videoFrame); end release(videoPlayer); reset(videoFReader) %% 获取视频中的图像 videoFrame = step(videoFReader); n = 0; while n~=15 videoFrame = step(videoFReader); n = n+1; end figure, imshow(videoFrame) release(videoPlayer); release(videoFReader)
2.数据预处理
P27
缺失值
删除、插补(均值、回归、极大似然估计(期望值最大化))
噪声过滤
回归、平滑、离群点分析、小波过滤
数据集成
建模比赛没有
数据归约
属性选择、样本选择
相关性分析、主成分分析
数据变换
P33
标准化、离散化、语义转换
3.数据统计
4.数据可视化
P431.m
原始分布形态,了解大致分布中心、边界、数据集中度
柱状分布图
% 数据可视化——基本绘图 % 《MATLAB数学建模方法与实践》(《MATLAB在数学建模中的应用》升级版),北航出版社,卓金武、王鸿钧编著. % 读取数据 clc, clear al, close all X=xlsread('dataTableA2.xlsx'); % 绘制变量dv1的基本分布 N=size(X,1); id=1:N; figure plot( id', X(:,2),'LineWidth',1) set(gca,'linewidth',2); xlabel('编号','fontsize',12); ylabel('dv1', 'fontsize',12); title('变量dv1分布图','fontsize',12); % 同时绘制变量dv1-dv4的柱状分布图 figure subplot(2,2,1); hist(X(:,2)); title('dv1柱状分布图','fontsize',12) subplot(2,2,2); hist(X(:,3)); title('dv2柱状分布图','fontsize',12) subplot(2,2,3); hist(X(:,4)); title('dv3柱状分布图','fontsize',12) subplot(2,2,4); hist(X(:,5)); title('dv4柱状分布图','fontsize',12)
常见统计量绘制于分布图中
P432.m
% 数据可视化——数据分布形状图 % 《MATLAB数学建模方法与实践》(《MATLAB在数学建模中的应用》升级版),北航出版社,卓金武、王鸿钧编著. % 读取数据 clc, clear al, close all X=xlsread('dataTableA2.xlsx'); dv1=X(:,2); % 绘制变量dv1的柱状分布图 h = -5:0.5:5; n = hist(dv1,h); figure bar(h, n) % 计算常用的形状度量指标 mn = mean(dv1); % 均值 sdev = std(dv1); % 标准差 mdsprd = iqr(dv1); % 四分位数 mnad = mad(dv1); % 中位数 rng = range(dv1); % 极差 % 标识度量数值 x = round(quantile(dv1,[0.25,0.5,0.75])); y = (n(h==x(1)) + n(h==x(3)))/2; line(x,[y,y,y],'marker','x','color','r') x = round(mn + sdev*[-1,0,1]); y = (n(h==x(1)) + n(h==x(3)))/2; line(x,[y,y,y],'marker','o','color',[0 0.5 0]) x = round(mn + mnad*[-1,0,1]); y = (n(h==x(1)) + n(h==x(3)))/2; line(x,[y,y,y],'marker','*','color',[0.75 0 0.75]) x = round([min(dv1),max(dv1)]); line(x,[1,1],'marker','.','color',[0 0.75 0.75]) legend('Data','Midspread','Std Dev','Mean Abs Dev','Range')
数据关联
P433.m
% 数据可视化——变量想相关性 % 《MATLAB数学建模方法与实践》(《MATLAB在数学建模中的应用》升级版),北航出版社,卓金武、王鸿钧编著. % 读取数据 clc, clear al, close all X=xlsread('dataTableA2.xlsx'); Vars = X(:,7:12); % 绘制变量间相关性关联图 figure plotmatrix(Vars) % 绘制变量间相关性强度图 covmat = corrcoef(Vars); figure imagesc(covmat); grid; colorbar;
箱型图
% 数据可视化——数据分组 % 《MATLAB数学建模方法与实践》(《MATLAB在数学建模中的应用》升级版),北航出版社,卓金武、王鸿钧编著. % 读取数据 clc, clear al, close all X=xlsread('dataTableA2.xlsx'); dv1=X(:,2); eva=X(:,12); % Boxplot figure boxplot(X(:,2:12)) figure boxplot(dv1, eva) figure boxplot(X(:,5))
5.数据降维
PCA
P41 原理、步骤
p43 案例
%% PCA数据降维实例 % 《MATLAB数学建模方法与实践》(《MATLAB在数学建模中的应用》升级版),北航出版社,卓金武、王鸿钧编著. %% 读取数据 A=xlsread('Coporation_evaluation.xlsx', 'B2:I16'); % Transfer orginal data to standard data a=size(A,1); % Get the row number of A b=size(A,2); % Get the column number of A for i=1:b SA(:,i)=(A(:,i)-mean(A(:,i)))/std(A(:,i)); % Matrix normalization end % Calculate correlation matrix of A. CM=corrcoef(SA); % Calculate eigenvectors and eigenvalues of correlation matrix. [V, D]=eig(CM); % Get the eigenvalue sequence according to descending and the corrosponding % attribution rates and accumulation rates. for j=1:b DS(j,1)=D(b+1-j, b+1-j); end for i=1:b DS(i,2)=DS(i,1)/sum(DS(:,1)); DS(i,3)=sum(DS(1:i,1))/sum(DS(:,1)); end % Calculate the numvber of principal components. T=0.9; % set the threshold value for evaluating information preservation level. for K=1:b if DS(K,3)>=T Com_num=K; break; end end % Get the eigenvectors of the Com_num principal components for j=1:Com_num PV(:,j)=V(:,b+1-j); end % Calculate the new socres of the orginal items new_score=SA*PV; for i=1:a total_score(i,2)=sum(new_score(i,:)); total_score(i,1)=i; end new_score_s=sortrows(total_score,-2); %% 显示结果 disp('特征值及贡献率:') DS disp('阀值T对应的主成分数与特征向量:') Com_num PV disp('主成分分数:') new_score disp('主成分分数排序:') new_score_s
MATLAB数学建模方法与实践 笔记2:数据的准备
在数学建模中,数据的准备是一个至关重要的阶段。数据的质量和准确性对于建模的成功至关重要。在MATLAB中,有一些强大的工具和技术可以帮助你准备和处理数据。本笔记将重点介绍如何使用MATLAB来准备数据,以便进行数学建模。
1. 数据的导入
在进行数学建模之前,首先需要将数据导入MATLAB。MATLAB支持多种数据格式的导入,包括文本文件、Excel文件、CSV文件等。你可以使用readtable
、xlsread
等函数来导入数据。
% 从文本文件导入数据 data = readtable('data.txt'); % 从Excel文件导入数据 data = xlsread('data.xlsx');
2. 数据的清洗
导入数据后,通常需要进行数据清洗,以去除缺失值、异常值和不必要的数据列。MATLAB提供了各种函数和工具,如rmmissing
、isoutlier
和removevars
,用于数据清洗。
% 去除缺失值 data = rmmissing(data); % 去除异常值 outliers = isoutlier(data.Var1); data = data(~outliers, :); % 去除不必要的数据列 data = removevars(data, {'Var2', 'Var3'});
3. 数据的转换
有时,需要对数据进行转换,以便更好地适应建模需求。这可能包括对数据进行平滑、归一化、对数变换等。
% 对数据进行对数变换 data.Var1 = log(data.Var1); % 对数据进行归一化 data.Var1 = (data.Var1 - min(data.Var1)) / (max(data.Var1) - min(data.Var1));
4. 数据的合并
如果你有多个数据源,可能需要将它们合并成一个数据集,以便进行建模分析。MATLAB提供了join
和outerjoin
等函数来执行数据集合并操作。
% 合并两个数据集 merged_data = join(data1, data2, 'Keys', 'ID');
5. 数据的可视化
数据可视化是数据准备的重要一部分,可以帮助你理解数据的分布和特征。MATLAB提供了各种绘图函数,如histogram
、scatter
和boxplot
,用于数据可视化。
% 绘制直方图 histogram(data.Var1); % 绘制散点图 scatter(data.Var1, data.Var2); % 绘制箱线图 boxplot(data.Var1);
6. 数据的保存
在准备数据之后,通常需要将处理后的数据保存到文件中,以便后续建模使用。MATLAB支持将数据保存为文本文件、Excel文件等。
% 将数据保存为文本文件 writetable(data, 'cleaned_data.txt'); % 将数据保存为Excel文件 writetable(data, 'cleaned_data.xlsx');
数据准备是数学建模过程中不可或缺的一部分。MATLAB提供了丰富的工具和函数,帮助你导入、清洗、转换、合并、可视化和保存数据。通过正确的数据准备,你可以提高建模的准确性和效率。在建模之前,务必投入足够的时间来准备和理解你的数据,这将为你的数学建模工作奠定坚实的基础。