读取和分析大型表格文本文件
以下示例说明如何为包含表格数据的大型文本文件创建数据存储,然后采用逐个块或逐个文件的方式读取和处理数据。
创建数据存储
使用 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