Main Content

读取和分析大型表格文本文件

以下示例说明如何为包含表格数据的大型文本文件创建数据存储,然后采用逐个块或逐个文件的方式读取和处理数据。

创建数据存储

使用 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 时读取不同的行数,请修改 dsReadSize 属性。

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

另请参阅

| |

相关主题