データストア入門
データストアとは
データストアは、単一のファイルまたはファイルやデータのコレクションを読み取るオブジェクトです。データストアは、同一の構造と形式をもつデータのリポジトリとして機能します。たとえば、データストア内の各ファイルは同じ順序で現れる同じ型 (数値またはテキストなど) のデータを含み、同じ区切り記号で区切られていなければなりません。
データストアは次の場合に役に立ちます。
コレクションに含まれる各ファイルが大きすぎてメモリに収まらない場合。データストアにより、各ファイルのデータをメモリに収まる小さいサイズで読み取り、解析できます。
コレクションに含まれるファイルに任意の名前が付いている場合。データストアは、1 つ以上のフォルダーに含まれるファイルのリポジトリとして機能します。ファイルの名前が通し番号を含む必要はありません。
データストアは、データ型やアプリケーションの種類に基づいて作成できます。各種類のデータストアには、それらのデータストアがサポートするデータ型に関連するプロパティが含まれています。たとえば、MATLAB® データストアの一覧は、次の表を参照してください。データストアの完全な一覧は、ファイル形式またはアプリケーション用のデータ ストアの選択を参照してください。
ファイルの種類またはデータ型 | データストアの種類 |
---|---|
CSV ファイルなどの列方向優先データを含むテキスト ファイル。 | TabularTextDatastore |
JPEG や PNG など、imread によってサポートされる形式を含む、イメージ ファイル。 | ImageDatastore |
.xlsx などのサポートされている Excel® 形式をもつスプレッドシート ファイル。 | SpreadsheetDatastore |
mapreduce の入力または出力であるキーと値のペアのデータ。 | KeyValueDatastore |
列方向データを含む Parquet ファイル。 | ParquetDatastore |
カスタム ファイル形式。データの読み取り用に提供された関数が必要です。 | FileDatastore |
tall 配列のチェックポイント用データストア。 | TallDatastore |
データストアの作成およびその読み取り
関数 tabularTextDatastore
を使用して、各航空会社のフライトの出発と到着情報が含まれているサンプル ファイル airlinesmall.csv
からデータストアを作成します。結果は TabularTextDatastore
オブジェクトです。
ds = tabularTextDatastore('airlinesmall.csv')
ds = TabularTextDatastore with properties: Files: { ' ...\matlab\toolbox\matlab\demos\airlinesmall.csv' } Folders: { ' ...\matlab\toolbox\matlab\demos' } FileEncoding: 'UTF-8' AlternateFileSystemRoots: {} PreserveVariableNames: false ReadVariableNames: true VariableNames: {'Year', 'Month', 'DayofMonth' ... and 26 more} DatetimeLocale: en_US Text Format Properties: NumHeaderLines: 0 Delimiter: ',' RowDelimiter: '\r\n' TreatAsMissing: '' MissingValue: NaN Advanced Text Format Properties: TextscanFormats: {'%f', '%f', '%f' ... and 26 more} TextType: 'char' ExponentCharacters: 'eEdD' CommentStyle: '' Whitespace: ' \b\t' MultipleDelimitersAsOne: false Properties that control the table returned by preview, read, readall: SelectedVariableNames: {'Year', 'Month', 'DayofMonth' ... and 26 more} SelectedFormats: {'%f', '%f', '%f' ... and 26 more} ReadSize: 20000 rows OutputType: 'table' RowTimes: [] Write-specific Properties: SupportedOutputFormats: ["txt" "csv" "xlsx" "xls" "parquet" "parq"] DefaultOutputFormat: "txt"
データストアを作成すると、すべてのデータをメモリに読み込まなくても対象のデータをプレビューできます。SelectedVariableNames
プロパティを使用して目的の変数 (列) を指定し、その変数だけをプレビュー表示したり読み取ったりできます。
ds.SelectedVariableNames = {'DepTime','DepDelay'}; preview(ds)
ans = 8×2 table DepTime DepDelay _______ ________ 642 12 1021 1 2055 20 1332 12 629 -1 1446 63 928 -2 859 -1
欠損値を表すデータの値を指定できます。airlinesmall.csv
では、欠損値は NA
で表されます。
ds.TreatAsMissing = 'NA';
データストア内の目的の変数に関するすべてのデータがメモリに収まる場合は、関数 readall
を使用してそのデータを読み取ることができます。
T = readall(ds);
それ以外の場合は、関数 read
を使用してメモリに収まる小さなサブセットとしてデータを読み取ります。関数 read
は既定で、TabularTextDatastore
から一度に 20,000 行ずつ読み取ります。ただし、この値は ReadSize
プロパティに新しい値を代入して変更できます。
ds.ReadSize = 15000;
関数 reset
を使用して、再度読み取る前にデータストアを初期状態にリセットします。while
ループ内で関数 read
を呼び出して、各データのサブセットで中間計算を実行してから、最後に中間結果を集計できます。次のコードでは、変数 DepDelay
の最大値を計算しています。
reset(ds) X = []; while hasdata(ds) T = read(ds); X(end+1) = max(T.DepDelay); end maxDelay = max(X)
maxDelay = 1438
個々のファイルのデータがメモリに収まる場合は、read
の各呼び出しで特定の行数ではなく 1 つのファイル全体を読み取るように指定できます。
reset(ds) ds.ReadSize = 'file'; X = []; while hasdata(ds) T = read(ds); X(end+1) = max(T.DepDelay); end maxDelay = max(X);
データストア内のデータのサブセットの読み取りに加えて、mapreduce
を使用して map 関数と reduce 関数をデータストアに適用できます。また、tall
を使用して tall 配列を作成することもできます。詳細については、MapReduce 入門とメモリに収まらないデータの tall 配列を参照してください。
参考
tabularTextDatastore
| imageDatastore
| spreadsheetDatastore
| KeyValueDatastore
| fileDatastore
| tall
| mapreduce