メインコンテンツ

MATLAB でデータをインポートする方法の制御

readtable などのインポート関数を使用して、データを MATLAB® にインポートします。MATLAB にデータのインポート方法を決定させることも、MATLAB によるデータのインポート方法を制御するパラメーターを指定することもできます。

インポート関数は、区切り記号、ヘッダー行の数、変数の数、変数の型、およびメタデータに基づいてデータの形式を調べ、入力ファイルの内容をインポートする最適な方法を検出します。データが増えるほどパターンが認識しやすくなるため、データ セットのサイズが大きいほど、形式検出の正確性が向上します。テキスト ファイルは、構造が最も単純であることが多いため、この解析に最適です。

MATLAB でデータをインポートする方法を制御するには、以下のような複数の方法があります。

  • 最も簡単なオプションとして、インポート関数で名前と値の引数を指定できます。たとえば、名前と値の引数 MissingRule を指定して、データ内のギャップに対処する方法を指定できます。インポート ツールでもこのレベルの制御が可能です。詳細については、インポート ツールを参照してください。

  • あるいは、インポート関数でインポート オプション オブジェクトを指定することもできます。このオプションは、同様の形式の複数のファイルをインポートしたり、変数レベルでカスタマイズしたり、自動形式検出を回避したりする場合に役立ちます。

このトピックの例では、readtable を使用してデータを table としてインポートします。行列や cell 配列などの他の形式へのデータのインポートの詳細については、テキスト ファイルのインポートおよびスプレッドシートのインポートを参照してください。

ファイルから MATLAB へのデータのインポート

readtable などのインポート関数を使用してファイルからデータをインポートできます。たとえば、サンプル ファイル outages_flawed.csv には列方向データが含まれています。

outages_flawed_screenshot.png

このサンプル ファイルでは、2 行目と 4 行目のデータにギャップが含まれており、3 行目のデータにはインポート時に変換できない日付値が含まれています。このデータ セットは合計 6 行のみと小さいサイズであるため、異常があると形式検出に大きな影響が出ます。

インポート関数 readtable を使用して outages_flawed.csv から table を作成します。インポート関数は、データ内のギャップおよび変換できない日付値を認識し、適切な欠損値で埋める既定のアクションを実行します。

T = readtable("outages_flawed.csv")
T=5×6 table
       Region           OutageTime            Loss             Customers       RestorationTime            Cause       
    _____________    ________________    _______________    _______________    ________________    ___________________

    {'SouthWest'}    2002-02-01 12:18    {'458,9772218'}    {'1820159,482'}    2002-02-07 16:50    {'winter storm'   }
    {'SouthEast'}    2003-01-23 00:49    {'530,1399497'}    {'212035,3001'}                 NaT    {'winter storm'   }
    {'SouthEast'}                 NaT    {'289,4035493'}    {'142938,6282'}    2003-02-17 08:14    {'winter storm'   }
    {'West'     }    2004-04-06 05:44    {'434,8053524'}    {'340371,0338'}                 NaT    {'equipment fault'}
    {'MidWest'  }    2002-03-16 06:18    {'186,4367788'}    {'212754,055' }    2002-03-18 23:23    {'severe storm'   }

MATLAB でデータを検出およびインポートする方法の制御

インポート関数でファイルを解析する方法を制御するには、名前と値の引数を使用します。これらの引数により、table レベルのカスタマイズを使用してインポートをより詳細に制御できます。名前と値の引数のリストについては、インポート関数に関するドキュメンテーションを参照してください。このレベルの制御は、大半のワークフローに適しています。

たとえば、名前と値の引数を使用して、table レベルでサンプル ファイルのインポートを次のようにカスタマイズします。

  • 区切り記号を "|" に設定します。

  • 小数点の区切りを "," に設定します。

  • インポート エラーの原因となるデータを含む行を省略します。

  • 欠損データが含まれている行を省略します。

T = readtable("outages_flawed.csv",Delimiter="|",DecimalSeparator=",", ...
    ImportErrorRule="omitrow",MissingRule="omitvar")
T=4×5 table
       Region           OutageTime        Loss     Customers            Cause       
    _____________    ________________    ______    __________    ___________________

    {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    {'winter storm'   }
    {'SouthEast'}    2003-01-23 00:49    530.14    2.1204e+05    {'winter storm'   }
    {'West'     }    2004-04-06 05:44    434.81    3.4037e+05    {'equipment fault'}
    {'MidWest'  }    2002-03-16 06:18    186.44    2.1275e+05    {'severe storm'   }

複数のファイルからのデータのインポートと個々の変数の制御

インポートするファイルが複数あり、ファイルの形式が類似している場合は、インポート オプション オブジェクトを作成することで、すべてのファイルで同じインポート構成を再利用できます。detectImportOptions関数を使用して、いずれかのファイルの形式に基づいてインポート オプション オブジェクトを設定し、そのオブジェクトを使用してすべてのファイルのインポート方法を指定できます。

名前と値の引数を detectImportOptions に渡すことで、関数がデータの形式を検出できるようになり、table レベルでインポート オプション オブジェクトをカスタマイズできます。getvaroptssetvartype、および setvaropts 関数を使用して、変数レベルでインポート オプション オブジェクトをさらにカスタマイズできます。

たとえば、table レベルのカスタマイズを含むインポート オプション オブジェクトを次のように作成します。

  • 区切り記号を "|" に設定します。

  • 小数点の区切りを "," に設定します。

  • インポート エラーの原因となるデータを含む行を省略します。

  • 欠損データが含まれている行を省略します。

opts = detectImportOptions("outages_flawed.csv",Delimiter="|", ...
    DecimalSeparator=",",ImportErrorRule="omitrow",MissingRule="omitrow");

ここで、getvaroptssetvartype、および setvaropts 関数を使用して、変数レベルのカスタマイズでインポート オプション オブジェクトを微調整します。

RegionOutageTime、および Loss という名前の変数の現在のオプションを表示します。

getvaropts(opts,["Region","OutageTime","Loss"])
ans = 
  1×3 heterogeneous VariableImportOptions (TextVariableImportOptions, DatetimeVariableImportOptions, NumericVariableImportOptions) array with properties:

    Name
    Type
    FillValue
    TreatAsMissing
    QuoteRule
    Prefixes
    Suffixes
    EmptyFieldRule

変数レベルのカスタマイズを次のように指定します。

  • RegionOutageTime、および Loss 変数のデータ型をそれぞれ stringdatetime、および single に変更します。

  • Cause 変数では、テキストの先頭の空白をトリミングします。

  • Customers 変数では、0 または NA を含むフィールドを欠損として扱います。

opts = setvartype(opts,["Region","OutageTime","Loss"], ...
    ["string","datetime","single"]);
opts = setvaropts(opts,"Cause",WhitespaceRule="trimleading");
opts = setvaropts(opts,"Customers",TreatAsMissing=["0","NA"]);

カスタム オプションを使用して、outages_flawed.csv および形式が類似しているファイル outages_flawed2.csv をインポートします。

T = readtable("outages_flawed.csv",opts);
T2 = readtable("outages_flawed2.csv",opts);

形式検出なしでの複数のファイルからのデータのインポート

入力ファイルを使用してインポート オプション オブジェクトを作成する代わりに、入力ファイルなしでインポート オプション オブジェクトを作成することもできます。入力ファイルのタイプに基づいて、特定のタイプのインポート オプション オブジェクトを作成する関数 (delimitedTextImportOptionsfixedWidthImportOptionsxmlImportOptionshtmlImportOptions、または wordDocumentImportOptions) を選択します。作成時に名前と値の引数を使用するか、作成後にプロパティを調整することで、table レベルでインポート オプション オブジェクトをカスタマイズできます。変数レベルのカスタマイズの場合は、getvaroptssetvartype、および setvaropts 関数を使用します。

たとえば、形式と構造が類似した 2 つのサンプル ファイルをインポートします。6 つの変数を含むデータの delimitedTextImportOptions オブジェクトを作成し、区切り記号を "|" に設定して、インポート時にエラーの原因になる行を省略します。

opts = delimitedTextImportOptions(NumVariables=6, ...
    Delimiter="|",ImportErrorRule="omitrow");

プロパティを調整して、table レベルでのインポート オプション オブジェクトのカスタマイズを次のように続行します。

  • 欠損データが含まれている行を省略します。

  • データ行が 2 行目から始まるように指定します。

  • 変数名が 1 行目にあることを指定します。

  • スペースや非 ASCII 文字を含む変数名を保持します。

opts.MissingRule = "omitrow";
opts.DataLines = 2;
opts.VariableNamesLine = 1;
opts.VariableNamingRule = "preserve";

getvaroptssetvartype、および setvaropts 関数を使用して、変数レベルでインポート オプションを次のようにさらにカスタマイズします。

  • 6 つの変数のデータ型を設定します。

  • 3 番目と 4 番目の変数の小数点の区切りを "," に設定します。

opts = setvartype(opts,1:6, ...
    ["string" "datetime" "single" "single" "datetime" "categorical"]);
opts = setvaropts(opts,3:4,DecimalSeparator=",");

カスタム オプションを使用して、outages_flawed.csv および形式が類似しているファイル outages_flawed2.csv をインポートします。

T = readtable("outages_flawed.csv",opts);
T2 = readtable("outages_flawed2.csv",opts);

参考

| | | | | | | | |

トピック