Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

大規模な表形式テキスト ファイルの読み取りと解析

次の例では、表形式データを含む大規模なテキスト ファイル用のデータストアを作成し、次にデータを 1 ブロックずつまたは 1 ファイルずつ読み取って処理する方法を説明します。

データストアの作成

関数 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   

データのサブセットの読み取り

既定では、readTabularTextDatastore から一度に 20,000 行ずつ読み取ります。read の呼び出しごとに読み取る行数を変えるには、dsReadSize プロパティを変更します。

ds.ReadSize = 15000;

関数 readwhile ループ内で使用して、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)

一度に 1 ファイルずつの読み取り

1 つのデータストアに、それぞれ行数が異なる複数のファイルが含まれる場合があります。データストアから一度に 1 つずつファイル全体を読み取るには、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

参考

| |

関連するトピック