matlab中csv格式文件的读取方法及效率

matlab中csv格式文件的读取方法及效率

csv文件的读取方法

  • 对于纯数值型 csv 格式文件,直接使用 csvread 函数,又快又好。
  • 然而对于许多数据而言,往往带有时间或者标题。比如从 TB 上获取的数据,就是带有
    时间的数据。对于这样的数据如果仍然运用 csvread 函数读取,将会报错。数据示例:
    matlab中csv格式文件的读取方法及效率_第1张图片
  • 该怎么解决这个问题呢?对于数据的读取,我们可以运用 gui 方式人工读入。
    比如,我们可以在命令行中输入 uiimport 命令打开数据导入的 gui 工具界面。这样可以通过
    人工指定导入数据的内容,指定导入数据的变量名等等。
    然而这样的导入数据方式只能使用于少量的,可以人工完成的导入然而在处理大量数据的时候
    ,人工导入无论效率和质量都难以保证。
    那么怎么实现数据的自动化导入呢?
  • matlab 中有 importdata 这一函数,可以导入各种类型的数据,比如 xls,csv,text。
    关于 importadata 函数的具体用法可以看帮助文件,这个函数具有普适性,使用简单。
    但是需要指出的是,该函数将数据转换为
    结构体,这样大大降低了数据的使用效率。我不久前用这个函数导入大量的数据,发现这个函数
    效率实在太低,改进了数据的导入方式后极大的提高了效率,这使我萌生了写这篇文章的想法。
  • 导入 csv 数据的一种高效方法就是直接采用低级的函数 textscan 函数读入,这将在后面的实例中具体讲解。
  • 当然还可以将 csv 文件导入数据库,再通过数据库导入,不过由于目前,并没有掌握数据库的
    相关知识,所以这种方法这里就不介绍了。

效率问题-一个实例

以下是我写的一段例子

clear
close all
clc
tic
c_temp=importdata('c9888(1分钟).csv');
c_close=c_temp.data(:,4);
c_time=datenum(c_temp.textdata);
toc
%%
tic
filePosition='D:\matlabwork\TBdata\commodity_futures\c9888(1分钟).csv';
fid = fopen(filePosition);
% Title = textscan(fid, '%s %s %s %s %s %s %s',1,'delimiter', ',');
Data = textscan(fid, '%D %f %f %f %f %f %f','delimiter', ',');
fclose(fid);
toc;

第二个代码块就是通过低级函数读取数据的实例,这种方式比较固定。通过 fid
记录文件指针,然后通过 textscan 函数读取数据,通过 %s 等指定数据的输入格式
,而 delimiter 参数指定文件的分隔符形式,最后关闭文件句柄。不理解含义也无关紧要
只要模仿以上方式读取即可。
注意
1. 可以看到代码中有一行被注释起来,这段被注释的部分是针对与有 headline 行数据
headline 的读取方式
2. 这第二种数据读入方式,不是我首创的,至于是谁我也忘了有兴趣可以百度一下。


实例结果展示

  1. importdata 方式结果:
    importdata
  2. textscan 方式结果:
    textscan
    显然使用 textscan 函数的效率明显高于 importdata 函数

你可能感兴趣的:(#,matlab,基础撷英)