カスタム ファイル リーダーを使用したデータのインポート
シミュレーション データ インスペクターでサポートされていないデータまたはファイル形式で保存されたデータを可視化する場合は、io.reader
クラスを使用して、シミュレーション データ インスペクター用の独自のカスタム ファイル リーダーを記述できます。この例では、カスタム ファイル リーダーのクラス定義のいくつかの部分について説明し、シミュレーション データ インスペクターにリーダーを登録する方法を示します。ExcelFirstColumnTimeReader.m
ファイルを開いて、完全なクラス定義を表示します。
カスタム リーダーのクラス定義の記述
カスタム リーダーでカスタム形式を使用するファイルや変数から関連のデータとメタデータを抽出する方法を指定するクラス定義を記述します。MATLAB™ パス上の場所にクラス定義ファイルを保存します。
この例のカスタム リーダーは、関数 readtable
を使用して Microsoft Excel™ ファイルからデータを読み込み、ファイルの最初の列を時間データとして使用します。
クラス定義は、io.reader
クラスからの継承で始まり、その後に必要な関連データとメタデータを返すメソッド定義が続きます。
classdef ExcelFirstColumnTimeReader < io.reader
すべてのカスタム リーダーは getName
、getTimeValues
、および getDataValues
メソッドを定義しなければなりません。追加のメソッドで、カスタム ファイルに存在する可能性のある特定のメタデータにアクセスできます。この例のクラス定義は、抽象メソッドおよび supportsFile
メソッドと getChildren
メソッドを定義します。
supportsFile
メソッドはファイルの内容をチェックして、ファイルに信号データが含まれているか確認します。
function supported = supportsFile(~,filename) try t = readtable(filename); supported = height(t) > 0 && numel(t.Properties.VariableNames) > 1; catch supported = false; end end
ファイルから複数の信号をインポートするには、最上位ノードにファイルがある階層型としてデータを扱います。リーダーは getChildren
メソッドを使用して、ファイル内の各信号の ExcelFirstColumnTimeReader
オブジェクトを作成します。
function childObj = getChildren(obj) childObj = {}; if isempty(obj.VariableName) t = readtable(obj.FileName); vars = t.Properties.VariableNames; vars(1) = []; childObj = cell(size(vars)); for idx = 1:numel(vars) childObj{idx} = ExcelFirstColumnTimeReader; childObj{idx}.FileName = obj.FileName; childObj{idx}.VariableName = vars{idx}; end end end
getTimeValues
メソッドは、関数 readtable
を使用してファイル内のデータを読み取り、時間データとして使用する、シミュレーション データ インスペクターの最初の列のデータを返します。
function timeVals = getTimeValues(obj) timeVals = []; if ~isempty(obj.VariableName) t = readtable(obj.FileName); timeName = t.Properties.VariableNames{1}; timeVals = t.(timeName); end end
getName
メソッドは、ファイル名をインポート データの最上位ノードの名前として使用します。getChildren
メソッドで返された対応する ExcelFirstColumnTimeReader
オブジェクトの VariableName
プロパティを使用して信号の名前が付けられます。
function retName = getName(obj) if isempty(obj.VariableName) fullName = obj.FileName; [filepath,name,ext] = fileparts(fullName); retName = strcat(name,ext); else retName = obj.VariableName; end end
getDataValues
メソッドは、信号データである最初のデータだけでなく、データが含まれる各列のデータを返します。各信号のデータには、getChildren
メソッドで返された対応するオブジェクトの VariableName
プロパティを使用してアクセスします。
function dataVals = getDataValues(obj) dataVals = []; if ~isempty(obj.VariableName) t = readtable(obj.FileName); dataVals = t.(obj.VariableName); end end
シミュレーション データ インスペクターへのカスタム リーダーの登録
カスタム データ リーダーのクラス定義ファイルを記述した後に、そのリーダーを使用してデータをインポートする前にシミュレーション データ インスペクターにリーダーを登録する必要があります。シミュレーション データ インスペクターでは、MATLAB セッションの間に登録されたリーダーは保存されないため、新しい各 MATLAB セッションの開始時にカスタム リーダーを登録する必要があります。ワークスペースからデータを読み取る、またはファイルからデータを読み取るカスタム リーダーを登録できます。この例のファイル リーダーを登録するために、registerFileReader
メソッドを使用します。
registerFileReader(ExcelFirstColumnTimeReader,[".xlsx" "xls"]);
ファイル リーダーが登録されていることを確認するには、io.reader.getRegisteredFileReaders
メソッドを使用します。
io.reader.getRegisteredFileReaders
ans = "ExcelFirstColumnTimeReader"
カスタム形式のファイルからのデータのインポート
カスタム ファイル リーダーを登録した後に、シミュレーション データ インスペクターの UI または関数 Simulink.sdi.createRun
を使用してカスタム形式のファイルからデータをインポートできます。この例では、4 つのデータの列を含むファイルから単純なデータセットをインポートします。この例のカスタム ファイル リーダーは常に最初の列 (この例では a
) を時間データとして読み込みます。
UI を使用してデータをインポートするには、シミュレーション データ インスペクターを開きます。関数 Simulink.sdi.view
を使用して、MATLAB コマンド ウィンドウからシミュレーション データ インスペクターを開くことができます。次に、[インポート] をクリックします。
[インポート] ダイアログで、[ファイル] オプションを選択し、ファイルから新しい実行にデータをインポートします。フォルダーをクリックしてファイル システムを参照し、インポートするファイルを選択します。この例のファイルは CustomFile.xlsx
と呼ばれます。
登録済みの複数のカスタム リーダーに対応する拡張子をもつファイルを選択すると、使用するリーダーを選択するオプションがダイアログに表示されます。この例では、組み込みの Microsoft Excel ファイル リーダーまたはこの例で記述されたカスタム リーダーを選択できます。既定では、選択したファイルの拡張子で使用できるカスタム リーダーが選択されます。
ファイルからインポートする信号を選択できます。すべての信号を選択または選択解除するには、[名前] の横にあるチェック ボックスを使用します。選択した後に、[インポート] をクリックします。データが Imported_Data
という名前の新しい実行にインポートされます。
データをプログラムによりインポートするには、関数 Simulink.sdi.createRun
を使用します。シミュレーション データ インスペクターには、Microsoft Excel ファイル用の組み込みリーダーがあります。関数 Simulink.sdi.createRun
の呼び出しでデータをインポートするために使用するリーダーを指定できます。データのインポートに使用するリーダーを指定しない場合、シミュレーション データ インスペクターでは、ファイル拡張子をサポートする最初のカスタム リーダーが使用されます。
Simulink.sdi.createRun('Custom File Run','file','CustomFile.xlsx','ExcelFirstColumnTimeReader');
インポートしたデータの検査と解析
データをインポートした後に、シミュレーション データ インスペクターを使用して、インポート データを単独でまたは関連のシミュレーション データと一緒に検査および解析できます。