HOWTO · MATLAB

Matlab で CSV ファイルを読む

MATLAB の readtable()、readmatrix()、および readcell()関数を使用して CSV ファイルを読み取ることができます。

このページの内容

必要な結果の形に合わせて、MATLAB のインポーターを選びましょう。readtable() は名前付き変数を持つテーブルを作成し、readmatrix() は数値データを行列として返し、readcell() は読み込んだ値をセル配列として返します。どの関数も CSV ファイル名を指定でき、範囲を選んで読み込むこともできます。以下では、それぞれの結果が適する場面と、detectImportOptions() を使ってインポート設定を確認する方法を説明します。

readtable() で CSV データをテーブルに読み込む

readtable() は、名前と測定値のように、列ごとに異なる型のデータを含む表形式のデータに適しています。既定では、先頭行が変数名として使われます。ファイルにヘッダー行がない場合、MATLAB は既定の名前を割り当てます。先頭のデータ行をヘッダーとして扱わないようにするには、ReadVariableNames を false に設定します。

数値データを含む CSV は、ヘッダー行を読み飛ばして GNU Octave で読み込めます。次の例では、CSV の見出し year,sales は英語のままコード内に残り、表示されるのはその下の数値データです。

csvPath = [tempname(), '.csv'];
file = fopen(csvPath, 'w');
fprintf(file, 'year,sales\n2024,18\n2025,23\n');
fclose(file);
values = dlmread(csvPath, ',', 1, 0);
disp(values);
delete(csvPath);

MATLAB で同じようにテーブルへ読み込むには、data = readtable('sales.csv') とします。data(1:5, 1:6) で結果の一部を確認できます。この指定では 5 行と 6 列が選択されます。ファイルの一部だけを読み込むには、data = readtable('sales.csv', 'Range', 'A1:C7') のように範囲を指定します。読み込みたい行と列が、その範囲に含まれていることを確認してください。

ファイルの構成や列の型がはっきりしない場合は、opts = detectImportOptions('sales.csv') を使って検出されたインポート設定を確認し、読み込み前に調整できます。たとえば、先頭行がヘッダーではなくデータの場合は opts.ReadVariableNames = false とし、そのオプションを readtable('sales.csv', opts) に渡します。利用できるオプションについては、MathWorks の readtable() リファレンスを参照してください。

readmatrix() で数値 CSV データを行列に読み込む

必要な値が数値で、計算に通常の行列を使うと便利な場合は、readmatrix() を使用します。たとえば、measurements = readmatrix('measurements.csv') とすると、数値データを読み込めます。ファイルにヘッダー行がある場合、MATLAB はファイルの内容に応じてインポートの詳細を判断して処理します。その動作を制御する必要があるときは、結果を確認し、インポートオプションを使ってください。

特定の範囲を読み込むには、Range の名前と値の引数を使います。たとえば、measurements = readmatrix('measurements.csv', 'Range', 'B2:D8') と指定します。範囲を指定すると、読み込む行と列が限定されます。テーブルのインデックス指定のように、名前付き変数を選ぶものではありません。MATLAB がファイルをどう解釈するか確認または調整するには、detectImportOptions('measurements.csv') を呼び出し、返されたオプションオブジェクトを readmatrix に渡します。詳しくは、MathWorks の readmatrix() リファレンスを参照してください。

readcell() で CSV データをセル配列に読み込む

CSV にテキストと数値が混在していて、読み込んだ項目をセル配列にまとめて保持したい場合は、readcell() を使用します。たとえば、values = readcell('inventory.csv') とすると、ファイルの内容がセルに読み込まれ、各項目の読み込み時の型が保たれます。

values = readcell('inventory.csv', 'Range', 'A1:C10') のように指定すると、読み込む範囲を限定できます。範囲は、スプレッドシート形式の行と列の参照で指定します。ファイルのインポート動作を調整する必要がある場合は、opts = detectImportOptions('inventory.csv') で設定を確認し、そのオプションオブジェクトを readcell('inventory.csv', opts) に渡します。利用できるオプションはインポーターによって異なるため、変更する前にMathWorks の readcell() リファレンスを確認してください。