Matlab导入数据处理
基于readtable函数
优点
可以使用 table 数据类型来将混合类型的数据和元数据属性(例如变量名称、行名称、说明和变量单位)收集到单个容器中。表适用于列向数据或表格数据,这些数据通常以列形式存储于文本文件或电子表格中。例如,您可以使用表存储试验数据,使用行表示不同的观测对象,使用列表示不同的测量变量。
实现方便,适用于规范间隔符文本,下面是readtable的常用形式,以导入取自UCI的Iris数据集为例:
(将数据文件后缀改为.txt即可)
%% Iris
Iris_data = readtable('C:\Users\Alienware\Desktop\DataMining\lris\iris.data.txt');
Iris_data.Properties.VariableNames = {'sepal.length',...
'sepal.width',...
'petal.length',...
'petal.width',...
'class'};
%Delimiter为文件中数据间隔符,在Iris中为',',可不设置此时Matlab会自动识别间隔符
%.Paropertities.VariableNames为每列数据命名
%为适应后续操作对读取到的table数表进行处理
class = table2cell(Iris_data(:,5));
numData = Iris_data{:,1:4};
%将此时工作区的变量打包保存为Iris.mat(注意清理工作区变量)
save Iris
缺点
数据间隔不规范时无法识别,如两列数据间的空格数不一致。
表现为
- 不指定间隔符直接使用readtable读取时,Matlab无法识别间隔符,将一行数据识别为一个整体。(Nx1 table)
- 指定’ '(空格)为间隔符时
Matlab报错:readtable('*.txt','Delimiter',' ');
错误使用 readtable (line 223)
在读取第 x* 行时失败。文本文件中的所有行都必须具有相同数量的分隔符。第 x* 行具有 y 个分隔符,而先前各行具有 y’ 个。
低级文件I/O
间隔符不规范,无法使用readtable函数时
以导入取自UCI的yeast数据集为例(该数据间隔符(空格)不均匀):
% 打开输入文件并读取
fin = fopen('*\yeast.data.txt','r');
% 指定输出文件并写入
if fin>0
fout = fopen('*\yeast.txt','w');
end
% 逐行间隔符规范化
tline = fgetl(fin); % 读取第一行开始判别
while ischar(tline)
space = isspace(tline); % 空格判断
dspace = diff(space); % 差分
dspace = [0 dspace]; % 齐到向量
ind = find(dspace~=0); % 找到空格起始位置
tind = ~space; % 取非零数值信息
tind(ind) = 1; % 设置标记
tline = tline(tind); % 过滤数据
fprintf(fout,'%s\n',tline);
tline = fgetl(fin); % 读取下一行
end
%关闭文件
fclose(fin);
fclose(fout);
最后再依照readtable读取生成的新规范数据即可。
更多详情请参考Matlab文档说明:
https://ww2.mathworks.cn/help/matlab/data-import-and-export.html?s_tid=CRUX_lftnav