读取和分析大型表格文本文件
以下示例说明如何为包含表格数据的大型文本文件创建数据存储,然后采用逐个块或逐个文件的方式读取和处理数据。
创建数据存储
使用 tabularTextDatastore 函数基于样本文件 airlinesmall.csv 创建一个数据存储。创建数据存储后,可以指定将数据中的文本 NA 作为缺失数据处理。
ds = tabularTextDatastore('airlinesmall.csv','TreatAsMissing','NA');
您可以通过更改数据存储的属性来修改其属性。修改 MissingValue 属性,指定将缺失值处理为 0。
ds.MissingValue = 0;
在此示例中,选择到港延误变量 ArrDelay 作为要关注的变量。
ds.SelectedVariableNames = 'ArrDelay';使用 preview 函数预览数据。此函数不影响数据存储的状态。
data = preview(ds)
data=8×1 table
ArrDelay
________
8
8
21
13
4
59
3
11
读取数据子集
默认情况下,read 一次从 TabularTextDatastore 读取 20000 行。要在每次调用 read 时读取不同的行数,请修改 ds 的 ReadSize 属性。
ds.ReadSize = 15000;
在 while 循环中使用 read 函数从 ds 中读取数据子集。该循环会持续执行,直到 hasdata(ds) 返回 false。
sums = []; counts = []; while hasdata(ds) T = read(ds); sums(end+1) = sum(T.ArrDelay); counts(end+1) = length(T.ArrDelay); end
计算平均到港延误。
avgArrivalDelay = sum(sums)/sum(counts)
avgArrivalDelay = 6.9670
重置数据存储以允许重新读取数据。
reset(ds)
一次读取一个文件
一个数据存储可以包含多个文件,每个文件具有不同的行数。可通过将 ReadSize 属性设为 'file',一次从数据存储读取一个完整的文件。
ds.ReadSize = 'file';在将 ReadSize 的值从数值更改为 'file' 时,MATLAB® 会重置数据存储(反之亦然)。
像前面一样,在 while 循环中使用 read 函数读取 ds,并计算平均到港延误。
sums = []; counts = []; while hasdata(ds) T = read(ds); sums(end+1) = sum(T.ArrDelay); counts(end+1) = length(T.ArrDelay); end avgArrivalDelay = sum(sums)/sum(counts)
avgArrivalDelay = 6.9670
另请参阅
tabularTextDatastore | tall | mapreduce