大規模な表形式テキスト ファイルの読み取りと解析
次の例では、表形式データを含む大規模なテキスト ファイル用のデータストアを作成し、次にデータを 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
データのサブセットの読み取り
既定では、read
は TabularTextDatastore
から一度に 20,000 行ずつ読み取ります。read
の呼び出しごとに読み取る行数を変えるには、ds
の ReadSize
プロパティを変更します。
ds.ReadSize = 15000;
関数 read
を while
ループ内で使用して、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
参考
tabularTextDatastore
| tall
| mapreduce