matlab 使用textscan读取带文本的csv文件

article/2025/3/15 6:49:46

纯数值csv文件使用 csvread 直接读取

csv文件就是comma-separated value (CSV) file。数据使以逗号相隔的形式保存在.csv文件中。
2019最新版的官方文档不在推荐使用csvread读取csv文档,而是推荐使用readmatrix但是目前还是兼容。
三种方式读取:
(1) M = csvread(filename), 文件的内容只能是数值。
(2) M = csvread(filename,R1,C1),指定从R1+1行与C1+1列开始读其后的所有内容。
(3) M = csvread(filename,R1,C1,[R1 C1 R2 C2]),通过指定左上角开始的行列和右下角的行列读取的范围。

使用带文本的csv文件使用textscan读取

最简单的方法是右键选择matlab打开csv文件,然后拖动选择需要的行列,点击导入所选内容。
想要代码的话,选中内容后,在下图划红线处点击下三角即可生成脚本。
gen

导出的代码栗子:

csv文本如下:
read-csv

(1)读取所有内容

%% 初始化变量。
filename = 'C:\Users\siucaan\Documents\MATLAB\test.csv';
delimiter = ',';
# 不包括列的变量名
startRow = 2;# 包括列名设为1,或者在下面textscan()中不加HeaderLines这个参数 
# startRow = 1;%% 将数据列作为文本读取:
formatSpec = '%s%s%s%s%s%s%[^\n\r]';%% 打开文本文件。
fileID = fopen(filename,'r');%% 根据格式读取数据列。
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'TextType', 'string', 'HeaderLines' ,startRow-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');%% 关闭文本文件。
fclose(fileID);%% 将包含数值文本的列内容转换为数值。
% 将非数值文本替换为 NaN。
raw = repmat({''},length(dataArray{1}),length(dataArray)-1);
for col=1:length(dataArray)-1raw(1:length(dataArray{col}),col) = mat2cell(dataArray{col}, ones(length(dataArray{col}), 1));
end
numericData = NaN(size(dataArray{1},1),size(dataArray,2));for col=[1,5]% 将输入元胞数组中的文本转换为数值。已将非数值文本替换为 NaN。rawData = dataArray{col};for row=1:size(rawData, 1)% 创建正则表达式以检测并删除非数值前缀和后缀。regexstr = '(?<prefix>.*?)(?<numbers>([-]*(\d+[\,]*)+[\.]{0,1}\d*[eEdD]{0,1}[-+]*\d*[i]{0,1})|([-]*(\d+[\,]*)*[\.]{1,1}\d+[eEdD]{0,1}[-+]*\d*[i]{0,1}))(?<suffix>.*)';tryresult = regexp(rawData(row), regexstr, 'names');numbers = result.numbers;% 在非千位位置中检测到逗号。invalidThousandsSeparator = false;if numbers.contains(',')thousandsRegExp = '^[-/+]*\d+?(\,\d{3})*\.{0,1}\d*$';if isempty(regexp(numbers, thousandsRegExp, 'once'))numbers = NaN;invalidThousandsSeparator = true;endend% 将数值文本转换为数值。if ~invalidThousandsSeparatornumbers = textscan(char(strrep(numbers, ',', '')), '%f');numericData(row, col) = numbers{1};raw{row, col} = numbers{1};endcatchraw{row, col} = rawData{row};endend
end%% 将数据拆分为数值和字符串列。
rawNumericColumns = raw(:, [1,5]);
rawStringColumns = string(raw(:, [2,3,4,6]));%% 确保包含 <undefined> 的任何文本都已正确转换为 <undefined> 分类值
for catIdx = [1,3]idx = (rawStringColumns(:, catIdx) == "<undefined>");rawStringColumns(idx, catIdx) = "";
end%% 创建输出变量
test1 = table;
test1.Challengerecordname = cell2mat(rawNumericColumns(:, 1));
test1.Database = categorical(rawStringColumns(:, 1));
test1.Originalrecordname = rawStringColumns(:, 2);
test1.Diagnosis = categorical(rawStringColumns(:, 3));
test1.Class = cell2mat(rawNumericColumns(:, 2));
test1.VarName6 = rawStringColumns(:, 4);%% 清除临时变量
clearvars filename delimiter startRow formatSpec fileID dataArray ans raw col numericData rawData row regexstr result numbers invalidThousandsSeparator thousandsRegExp rawNumericColumns rawStringColumns catIdx idx;

(2)指定读取指定列

我这里指定第一列和五列
只要修改 formatSpec = ‘%s%*s%*s%*s%s%[^\n\r]’;

完整代码如下:

%% 初始化变量。
filename = 'F:\matlab_workspace\test.csv';
delimiter = ',';%% 将数据列作为文本读取:
% 有关详细信息,请参阅 TEXTSCAN 文档。
formatSpec = '%s%*s%*s%*s%s%[^\n\r]';%% 打开文本文件。
fileID = fopen(filename,'r');%% 根据格式读取数据列。
% 该调用基于生成此代码所用的文件的结构。如果其他文件出现错误,请尝试通过导入工具重新生成代码。
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'TextType', 'string',  'ReturnOnError', false);%% 关闭文本文件。
fclose(fileID);%% 将包含数值文本的列内容转换为数值。
% 将非数值文本替换为 NaN。
raw = repmat({''},length(dataArray{1}),length(dataArray)-1);
for col=1:length(dataArray)-1raw(1:length(dataArray{col}),col) = mat2cell(dataArray{col}, ones(length(dataArray{col}), 1));
end
numericData = NaN(size(dataArray{1},1),size(dataArray,2));% 将输入元胞数组中的文本转换为数值。已将非数值文本替换为 NaN。
rawData = dataArray{2};
for row=1:size(rawData, 1)% 创建正则表达式以检测并删除非数值前缀和后缀。regexstr = '(?<prefix>.*?)(?<numbers>([-]*(\d+[\,]*)+[\.]{0,1}\d*[eEdD]{0,1}[-+]*\d*[i]{0,1})|([-]*(\d+[\,]*)*[\.]{1,1}\d+[eEdD]{0,1}[-+]*\d*[i]{0,1}))(?<suffix>.*)';tryresult = regexp(rawData(row), regexstr, 'names');numbers = result.numbers;% 在非千位位置中检测到逗号。invalidThousandsSeparator = false;if numbers.contains(',')thousandsRegExp = '^[-/+]*\d+?(\,\d{3})*\.{0,1}\d*$';if isempty(regexp(numbers, thousandsRegExp, 'once'))numbers = NaN;invalidThousandsSeparator = true;endend% 将数值文本转换为数值。if ~invalidThousandsSeparatornumbers = textscan(char(strrep(numbers, ',', '')), '%f');numericData(row, 2) = numbers{1};raw{row, 2} = numbers{1};endcatchraw{row, 2} = rawData{row};end
end%% 将数据拆分为数值和字符串列。
rawNumericColumns = raw(:, 2);
rawStringColumns = string(raw(:, 1));%% 将非数值元胞替换为 NaN
R = cellfun(@(x) ~isnumeric(x) && ~islogical(x),rawNumericColumns); % 查找非数值元胞
rawNumericColumns(R) = {NaN}; % 替换非数值元胞%% 创建输出变量
test1 = table;
test1.Challengerecordname = rawStringColumns(:, 1);
test1.Class = cell2mat(rawNumericColumns(:, 1));

(3)读取指定行

读取6-12行,只要修改

startRow = 6;
endRow = 11;
dataArray = textscan(fileID, formatSpec, endRow-startRow+1, 'Delimiter', delimiter, 'TextType', 'string', 'HeaderLines', startRow-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');

(4)读取局部行列

range
指定6-12行,第2-5列,只要修改

startRow = 6;
endRow = 12;

%% 每个文本行的格式:
% 列2: 分类 (%C)
% 列3: 文本 (%s)
% 列4: 分类 (%C)
% 有关详细信息,请参阅 TEXTSCAN 文档。
formatSpec = ‘%*s%C%s%C%*s%[^\n\r]’;

完整代码:

%% 导入文本文件中的数据。
%% 初始化变量。
filename = 'F:\matlab_workspace\test.csv';
delimiter = ',';
startRow = 6;
endRow = 12;%% 每个文本行的格式:
%   列2: 分类 (%C)
%	列3: 文本 (%s)
%   列4: 分类 (%C)
formatSpec = '%*s%C%s%C%*s%[^\n\r]';%% 打开文本文件。
fileID = fopen(filename,'r');%% 根据格式读取数据列。
dataArray = textscan(fileID, formatSpec, endRow-startRow+1, 'Delimiter', delimiter, 'TextType', 'string', 'HeaderLines', startRow-1, 'ReturnOnError', false, 'EndOfLine', '\r\n');%% 关闭文本文件。
fclose(fileID);%% 创建输出变量
test = table(dataArray{1:end-1}, 'VariableNames', {'Database','Originalrecordname','Diagnosis'});

http://chatgpt.dhexx.cn/article/p8Lddxy1.shtml

相关文章

数据读取的常见函数以及区别(fopen、open、textscan、fwrite、fread函数)

1、fopen函数 语法1&#xff1a;fileID fopen(filename) 打开文件 filename, 返回等于或大于 3 的整数文件标识符,以便以二进制读取形式进行访问。 0、1 和 2 分别用于标准输入、标准输出&#xff08;屏幕&#xff09;和标准错误。如果 fopen 无法打开文件&#xff0c;则 fi…

问卷调查样本量的确定方法

我们在进行问卷调查的时候&#xff0c;问卷的收集数量是重要的流程之一。问卷数量取决于几个因素&#xff0c;包括研究的目的和研究的类型。接下来&#xff0c;我们就聊一聊怎么确定所需的调查问卷数量。 1、确定研究目标。 确定所需问卷数量的第一步是明确研究目标。这一步是…

统计学简介之十——样本量的确定

统计学简介之十——样本量的确定 一、总结 二、估计总体均值时样本量的确定 三、估计总体比例时样本量的确定

样本量的确定

一、总结 二、估计总体均值时样本量的确定 三、估计总体比例时样本量的确定

25 参数估计——样本量的确定

1 估计总体均值时样本量的确定 2 、估计总体比例时样本量的确定

详细讲解ABTest假设检验【实验设计结论分析】数据分析

大家早上好&#xff0c;本人姓吴&#xff0c;如果觉得文章写得还行的话也可以叫我吴老师。欢迎大家跟我一起走进数据分析的世界&#xff0c;一起学习&#xff01; 感兴趣的朋友可以关注我或者我的数据分析专栏&#xff0c;里面有许多优质的文章跟大家分享哦。 目录 一、实验设计…

增长黑客AB-Test系统(四)——AB-Test 最小样本量

作者&#xff1a;livan 来源&#xff1a;数据python与算法 前沿 统计计算主要应用在效果评估领域。客户经过分流之后在各个试验组中产生数据&#xff0c;统计的作用即为查看对应组的样本量是否达到最小样本量&#xff0c;数据之间是否存在显著性差异&#xff0c;以及进行差异大…

A/B test --计算实验所需样本量

如果懒得看下方内容&#xff0c;或者是看完了还有些许不懂&#xff0c;可以直接用这个好用又免费的计算器来计算 https://www.evanmiller.org/ab-testing/sample-size.html 新加一个 https://www.eyeofcloud.com/abtest-widget/124.html …………………………………………………

如何确定抽样统计的最小样本量(附:随机抽样统计的抽样误差Excel计算表格)

在电视节目中经常看到关于选举的报道中经常会后有支持率的数字,例如:调查结果为 a方支持率为45.3%;b方支持率为30.2%;c方支持率为8.5%;...最后都会说明一下,此次电话调查的数量2300,置信度为95%﹐最大容许误差为2.5%,这就是抽样调查的典型情景:一个大的集合(比如:数…

你们要的最小样本量计算来了。

总第179篇/张俊红 这一篇我们讲讲统计中的最小样本量计算。大家先想想为什么叫最小样本量&#xff0c;而不是最大或者直接叫样本量计算呢&#xff1f; 这是因为最小样本量这个概念主要用在抽样统计中&#xff0c;抽样统计为了研究某一事物的情况而从整体中抽取部分样本来进行研…

问卷分析预调查之确定样本容量

在问卷预调查&#xff0c;不仅能够检验出不符合的题项&#xff0c;也能确定调查所需要的样本容量&#xff0c;根据以下公式可以确定 公式介绍&#xff1a;n 表示样本数量&#xff0c; Z 表示置信水平&#xff0c; σ 表示样本总量中某一特定属性样本的比例&#xff08;比如说在…

如何确定抽样的样本数量

总体为9200人&#xff0c;预设的整体置信度为95%&#xff0c;最大容许误差为正负5%&#xff0c;求样本容量 网上搜到的第一个有价值的内容如下&#xff1a; 题目 某公司对60000人中的吸烟比例做调查,置信度为95%的情况下,若要使误差保持在4%以内,需要的最小样本容量是 这里并…

样本容量的确定

• 样本容量&#xff1a; 样本中个体的数目或组成抽样总体的单位数。 • 必要样本容量 &#xff1a; 亦称必要样本单位数&#xff0c;是指满足调查目的要求的情况下&#xff0c;至少需要选择的样本单位数。 一、估计总体均值时样本容量的确定 1.重复抽样 一旦确定了置信水平&…

Topic 5. 样本量确定及分割

每次做方案设计的时候&#xff0c;都会涉及到一个尖锐的问题&#xff0c;客户会问我得用多少的样本量才能发文章&#xff0c;这个嘛&#xff0c;事情从理论上回答还是有依据的&#xff0c;但是从实际出发永远都是 “理想很丰满&#xff0c;现实很骨感&#xff01;” 。不过还是…

参数估计-两个参数总体区间估计、样本量确定(三)

2019独角兽企业重金招聘Python工程师标准>>> 一、两个总体均值之差的区间估计 1、大样本估计 两个总体为正态分布,或两个总体不服正态分布但两个样本都为大样本,根据抽样分布知识可知 两个样本均值只差 服从期望为(μ1-μ2)、方差为( )的正态分布,转化为标准…

ABtest如何确定样本量?

如何计算样本量 商业分析的面试&#xff0c;很少会让面试者直接默写公式并进行计算。为啥&#xff1f;一&#xff0c;面试官八成自己也不记得公式。二&#xff0c;真实工作都是用网上的计算器&#xff0c;一键呵成&#xff0c;无需手算。 网上随手找的的sample size计算器 那么…

Topic 5. SCI 文章之样本量确定及分割

**每次做方案设计的时候&#xff0c;都会涉及到一个尖锐的问题&#xff0c;客户会问我得用多少的样本量才能发文章&#xff0c;这个嘛&#xff0c;事情从理论上回答还是有依据的&#xff0c;但是从实际出发永远都是 “理想很丰满&#xff0c;现实很骨感&#xff01;” 。不过还…

AB实验样本量确定

文章目录 1. 统计功效与关键概念2. Z检验样本量确定2.1 统计功效公式推导2.2 样本量计算公式2.3 求解样本量 3. 卡方检验样本量确定3.1 求解样本量 4. 简要总结Reference 在数据分析过程中&#xff0c; 一个完整的闭环是从数据中得到洞察&#xff0c;根据洞察得到某种假设&…

临床试验中样本量确定的统计学考虑

样本量确定(sample size determination)&#xff0c;又称样本量估计(sample size estimation)&#xff0c;是指为满足统计的准确性和可靠性(I类错误的控制和检验效能的保证)计算出所需的样本量&#xff0c;它是临床试验设计中一个极为重要的环节&#xff0c;直接关系到研究结论…

在前端中的缓存

http缓存 http缓存基本认识 http缓存分为强缓存和协商缓存 1、浏览器在加载资源时&#xff0c;先根据这个资源的一些http header判断它是否命中强缓存&#xff0c;强缓存如果命中&#xff0c;浏览器直接从自己的缓存中读取资源&#xff0c;不会发请求到服务器。比如某个css文…