Main Content

fileEnsembleDatastore

カスタム ファイル形式でのアンサンブル データの管理

説明

fileEnsembleDatastore オブジェクトは、測定データを使用した状態監視と予知保全のアルゴリズム開発に特化したデータストアです。

アンサンブルは、ファイルのコレクションに保存されたメンバー データのコレクションです。fileEnsembleDatastore オブジェクトは、アンサンブルのデータ変数、独立変数、および状態変数を指定します。関数を提供すると、ファイルのコレクションから各種の変数を読み取る方法が fileEnsembleDatastore オブジェクトに指示されます。このように fileEnsembleDatastore を使用することで、あらゆるファイル形式や変数構成で保存されたアンサンブル データを管理できます。

fileEnsembleDatastore オブジェクトのデータは、Amazon S3™ (Simple Storage Service)、Windows Azure® Blob Storage、および Hadoop® 分散ファイル システム (HDFS™) を使用するクラウド ストレージなど、リモート ロケーションを含む、MATLAB® データストアによってサポートされている任意のロケーションに保存できます。

ファイル アンサンブル データストアの使用の詳細な例については、測定データを含むファイル アンサンブル データストアを参照してください。Predictive Maintenance Toolbox™ におけるデータ アンサンブルの一般的な情報については、状態監視と予知保全のためのデータ アンサンブルを参照してください。

作成

説明

fensemble = fileEnsembleDatastore(location,extension) は、location に指定されたファイル パスで、指定されたファイル拡張子を持つデータを指す fileEnsembleDatastore オブジェクトを作成します。オブジェクトのプロパティを設定し、アンサンブル データストアに対する読み取りと書き込みの関数を指定します。

fensemble = fileEnsembleDatastore(location,extension,Name,Value) は、名前と値のペアの引数を 1 つ以上使用して、オブジェクトの追加のプロパティを指定します。たとえば、'ConditionVariables',["FaultCond";"ID"] を使用して、オブジェクトを作成するときに状態変数を指定します。

入力引数

すべて展開する

アンサンブル データの読み取り元のファイルまたはフォルダー。string、文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定します。ファイルが現在のフォルダーにない場合は、location は絶対パスまたは相対パスを含む必要があります。

フォルダーを指定した場合は、fileEnsembleDatastore はそのフォルダー内の extension で指定された拡張子を持つそのフォルダー内のすべてのファイルを使用します。または、含めるファイルのリストを明示的に指定します。また、location を指定するときにワイルドカード文字 (*) を使用することもできます。この文字は、一致するすべてのファイルまたは一致するフォルダー内のすべてのファイルがデータストアに含まれることを示しています。

ファイル パスは、Amazon S3 (Simple Storage Service)、Windows Azure Blob Storage、および Hadoop 分散ファイル システム (HDFS) を使用するクラウド ストレージなど、リモート ロケーションを指す IRI パスを含む、MATLAB データストアによってサポートされている任意の場所に指定できます。MATLAB におけるリモート データの操作の詳細については、リモート データの操作を参照してください。

例: pwd + "\simResults"

例: {'C:\dir\data\file1.xls','C:\dir\data\file2.xlsx'}

例: "../dir/data/*.mat"

データストア内のファイルの拡張子。".mat" または '.csv' など、string、または文字ベクトルとして指定します。

データストアに複数の拡張子をもつファイルがある場合は、[".xls",".xlsx"] のような string ベクトルで指定します。ReadFcnWriteToMemberFcn プロパティに指定する関数は、指定されたすべてのファイル タイプを操作できる必要があります。

プロパティ

すべて展開する

選択されたすべての変数をアンサンブルから読み取る関数。提供する関数へのハンドルとして指定します。アンサンブルのメンバーを含むデータ ファイルから、データ変数を読み取る方法を指示する関数を記述します。関数には、以下の要素があります。

  • 2 つの入力。ファイル名 (string) と、ファイルから読み込む信号名 (string ベクトル)

  • 1 つの出力。各独立変数に対する table 変数を含む table 行

ReadFcn を指定した場合は、ソフトウェアはこの関数を使用して、DataVariablesIndependentVariablesConditionVariables のどれで名前が付けられているかにかかわらず、アンサンブルから選択したすべての変数を読み取ります。

たとえば、ファイルから変数を読み取る関数 readVars を以下のように記述したとします。この関数は、入力 string ベクトル variables に一致するデータ ファイルの変数を含む table を作成します。

function data = readVars(filename,variables)
data = table();
mfile = matfile(filename); % Allows partial loading
for ct=1:numel(variables)
    val = mfile.(variables{ct});
    if numel(val) > 1
        val = {val};
    end
    data.(variables{ct}) = val;
end
end

関数を現在のフォルダーまたはパス上の MATLAB ファイルに保存します。次に、fensemble という fileEnsembleDatastore を作成した場合は ReadFcn を次のように設定します。

fensemble.ReadFcn = @readVars;

read(fensemble) を呼び出すと、ソフトウェアは readVars を使用して、アンサンブル データストアの SelectedVariables プロパティ内のすべての変数を読み取ります。このプロパティは、fileEnsembleDatastore メンバーからデータを読み取るために設定する必要があります。設定しないと、read にエラーが発生します。

最後に読み取られたアンサンブルのメンバーにデータを書き込む関数。提供する関数へのハンドルとして指定します。アンサンブルのメンバーを含むデータ ファイルへ、データ変数を書き込む方法を指示する関数を記述します。関数には、以下の要素があります。

  • 2 つの入力。ファイル名 (string) と、フィールド名が書き込み先のデータ変数であり、その値が対応する値であるデータ構造体

  • 出力なし

たとえば、ファイルにデータを書き込む関数 writeNewData を以下のように記述したとします。この関数は、data という名前の入力データ構造体を、指定されたデータ ファイルに書き込みます。

function writeNewData(filename,data)
save(filename, '-append', '-struct', 'data');
end

writeNewData を現在のフォルダーまたはパス上の MATLAB ファイルに保存します。次に、fensemble という fileEnsembleDatastore を作成した場合は WriteToMemberFcn を次のように設定します。

fensemble.WriteToMemberFcn = @writeNewData;

fensemblewriteToLastMemberRead コマンドを呼び出すと、ソフトウェアは writeNewData を使用して、最後に読み取ったアンサンブル メンバーのデータ ファイルに新しいデータを追加します。このプロパティは、fileEnsembleDatastore メンバーにデータを追加するために設定する必要があります。設定しないと、writeToLastMemberRead にエラーが発生します。

アンサンブル内のデータ変数。string 配列として指定します。データ変数とは、アンサンブルのメンバーの主な内容です。データ変数には、予知保全アルゴリズムの解析と開発用の測定データまたは派生データが含まれます。たとえば、データ変数には、測定またはシミュレーションされた振動信号と、平均振動値または振動ピーク周波数などの派生値が含まれる場合があります。実際には、データ変数、独立変数、および状態変数はすべて別個の変数セットです。

DataVariables{'Vibration';'Tacho'} のように文字ベクトルの cell 配列で指定することもできますが、変数名は常に ["Vibration";"Tacho"] という string 配列として格納されます。変数名の行列を指定した場合は、行列は列ベクトルにフラット化されます。

アンサンブル内の独立変数。string 配列として指定します。通常、アンサンブルのメンバーに順序を付けるには、独立変数を使用します。たとえば、タイムスタンプ、操作時間数、走行距離などです。このプロパティには、アンサンブル内のこのような変数の名前を設定します。実際には、データ変数、独立変数、および状態変数はすべて別個の変数セットです。

IndependentVariables{'Time';'Age'} のように文字ベクトルの cell 配列で指定することもできますが、変数名は常に ["Time";"Age"] という string 配列として格納されます。変数名の行列を指定した場合は、行列は列ベクトルにフラット化されます。

アンサンブル内の状態変数。string 配列として指定します。状態変数を使用して、アンサンブルのメンバーが収集された故障状態または他の動作状態に従って、アンサンブルのメンバーにラベルを付けます。実際には、データ変数、独立変数、および状態変数はすべて別個の変数セットです。

ConditionVariables{'GearFault';'Temperature'} のように文字ベクトルの cell 配列で指定することもできますが、変数名は常に ["GearFault";"Temperature"] という string 配列として格納されます。変数名の行列を指定した場合は、行列は列ベクトルにフラット化されます。

アンサンブルから読み取る変数。string 配列として指定します。このプロパティを使用して、read コマンドで現在のメンバー アンサンブルからデータを読み取る際に、どの変数を MATLAB ワークスペースに抽出するかを指定します。read は、SelectedVariables で指定された各名前の table 変数を含む table 行を返します。たとえば、6 つの変数を含むアンサンブル fensemble があり、そのうちの 2 つ、VibrationFaultState のみを読み取るとします。SelectedVariables プロパティを設定し、read を呼び出します。

fensemble.SelectedVariables = ["Vibration";"FaultState"];
data = read(fensemble)

SelectedVariablesは、DataVariablesConditionVariablesIndependentVariablesの各プロパティに含まれる変数の任意の組み合わせにできます。SelectedVariables が空の場合は、read にエラーが発生します。

SelectedVariables{'Vibration';'Tacho'} のように文字ベクトルの cell 配列で指定できますが、変数名は常に string 配列 ["Vibration";"Tacho"] として格納されます。変数名の行列を指定した場合は、行列は列ベクトルにフラット化されます。

アンサンブル データストアから一度に読み取るメンバーの数。アンサンブル内のメンバーの合計数よりも小さい正の整数として指定します。既定では、read コマンドは、1 つのアンサンブル メンバーからのデータを含む 1 行の table を返します。1 回の read 操作で複数のメンバーからデータを読み取る場合は、このプロパティに 1 より大きい整数値を設定します。たとえば、ReadSize = 3 の場合は、read は 3 行の table を返し、各行には異なるアンサンブル メンバーからのデータが含まれます。未読のメンバーが ReadSize より少ない場合は、read は残りのメンバーの数だけ行を持つ table を返します。

アンサンブル データストアの LastMemberRead プロパティは、直近の read 操作で読み取られたすべてのファイル名を含んでいます。したがって、たとえば、ReadSize = 3 の場合は、read の操作で、LastMemberRead に 3 つのファイル名を含む string ベクトルが設定されます。

writeToLastMemberRead を使用する場合は、書き込むデータを ReadSize と等しい行数をもつ table として指定します。writeToLastMemberRead コマンドは、LastMemberRead で指定されたメンバーを更新し、指定された各ファイルに 1 つの table 行を書き込みます。

また、ReadSize プロパティを変更すると、アンサンブルは未読の状態にリセットされます。たとえば、一部のアンサンブル メンバーを一度に 1 つずつ読み取り (ReadSize = 1)、ReadSize を 3 に変更したとします。次の read 操作により、最初の 3 つのアンサンブル メンバーからのデータが返されます。

この プロパティ は読み取り専用です。

アンサンブル内のメンバー数。正の整数で指定します。

この プロパティ は読み取り専用です。

MATLAB ワークスペースに最後に読み取られたアンサンブル メンバーのファイル名。string として指定されます。read コマンドを使用してアンサンブル・データストアからデータを読み取ると、次に読み取るアンサンブル メンバーがソフトウェアによって決定され、対応するファイルからデータが読み取られます。LastMemberRead プロパティは、最後に読み取られたファイルのパスを含んでいます。アンサンブル データストアがまだ読み取られていない場合や、リセットされている場合は、LastMemberRead は空の string になります。

アンサンブル データストアにデータを戻すために writeToLastMemberRead を呼び出すと、その関数は LastMemberRead で指定されたファイルに書き込まれます。

既定では、read 一度に 1 つのアンサンブル メンバーからデータを読み取ります (アンサンブル データストアの ReadSize プロパティは 1)。ReadSize > 1 のとき、LastMemberRead は、直近の read 操作で読み取った全ファイルのパスを含む string 配列です。

この プロパティ は読み取り専用です。

アンサンブル データストア内のファイルのリスト。長さ NumMembers の列 string ベクトルとして指定します。各エントリには、データストア内のファイルへの絶対パスが含まれます。ファイルは、read コマンドがアンサンブル メンバーを読み取った順番に並んでいます。

例: ["C:\Data\Data_01.csv"; "C:\Data\Data_02.csv"; "C:\Data\Data_03.csv"]

オブジェクト関数

関数 readwriteToLastMemberRead および subset は、Predictive Maintenance Toolbox アンサンブル データに特化しています。reset および hasdata など、その他の関数は、MATLAB の datastore オブジェクトで使用される関数と同一です。1 つのコマンドですべてのメンバー データを table または cell 配列に転送するには、readall を使用します。特定のアンサンブル メンバーを、より小規模か、より特化したアンサンブル データストアに抽出するには、subset を使用します。アンサンブル データストアを分割するには、関数 partitionpartition(ds,n,index) 構文を使用します。

readアンサンブル データストアからメンバー データを読み取り
writeToLastMemberReadアンサンブル データストアのメンバーにデータを書き込み
subset既存のアンサンブル データストアのサブセットから新しいアンサンブル データストアを作成
resetデータストアの初期状態へのリセット
hasdataデータが読み取り可能かどうかを判別
progress 読み取ったデータ量の判定
readallデータストアのすべてのデータの読み取り
numpartitionsデータストアの区画数
partitionデータストアを分割する
talltall 配列の作成
isPartitionableデータストアが分割可能かどうかを判別
isShuffleableデータストアがシャッフル可能かどうかを判別

すべて折りたたむ

MATLAB® ファイルに保存されたデータ用にファイル アンサンブル データストアを作成し、データストアからの読み取りとデータストアへの書き込み方法をソフトウェアに指示する関数で構成します。

この例では、ベアリング システムの健全な動作データを含む、baseline_01.matbaseline_02.mat という 2 つのデータ ファイルがあります。また、同じシステムの故障データを含む FaultData_01.matFaultData_02.matFaultData_03.mat の 3 つのデータ ファイルもあります。

unzip fileEnsData.zip  % extract compressed files
location = pwd;
extension = '.mat';
fensemble = fileEnsembleDatastore(location,extension);

アンサンブル内のデータを操作するには、その前に、MATLAB ワークスペースに変数を読み取り、データをファイルに書き戻すためのデータ ファイルの処理方法をソフトウェアに指示する関数を作成しなければなりません。これらの関数を、ファイル パス上の場所に保存します。この例では、指定された以下の関数を使用します。

  • readBearingData — 要求された変数を構造体 bearing から抽出し、ファイルに保存されている他の変数を抽出します。この関数はデータの故障状態についてファイル名の解析も行います。関数は、要求された各変数に対して 1 つの table 変数を含む table 行を返します。

  • writeBearingData — 構造体を受け入れて、その変数を個々の格納された変数としてデータ ファイルに書き込みます。

fensemble.ReadFcn = @readBearingData;
fensemble.WriteToMemberFcn = @writeBearingData;

最後に、データ変数、状態変数、読み取るために選択した変数を識別するようにアンサンブルのプロパティを設定します。この例では、データ ファイルの変数は、gssrloadrate とします。故障ラベル、gssr だけを読み取る必要があるとします。これらの変数を、選択した変数として設定します。

fensemble.DataVariables = ["gs";"sr";"load";"rate"];
fensemble.ConditionVariables = ["label"];
fensemble.SelectedVariables = ["label";"gs";"sr"];

アンサンブルを確認します。関数と変数名が適切なプロパティに割り当てられています。

fensemble
fensemble = 
  fileEnsembleDatastore with properties:

                 ReadFcn: @readBearingData
        WriteToMemberFcn: @writeBearingData
           DataVariables: [4x1 string]
    IndependentVariables: [0x0 string]
      ConditionVariables: "label"
       SelectedVariables: [3x1 string]
                ReadSize: 1
              NumMembers: 5
          LastMemberRead: [0x0 string]
                   Files: [5x1 string]

これらの割り当てた関数は、アンサンブルを構成するデータ ファイルの操作方法を read コマンドと writeToLastMemberRead コマンドに指示します。たとえば、read コマンドを呼び出すと、コマンドは readBearingData を使用して fensemble.SelectedVariables 内のすべての変数を読み取ります。詳細な例は、測定データを含むファイル アンサンブル データストアを参照してください。

MATLAB ファイルに保存されたデータ用にファイル アンサンブル データストアを作成し、データストアからの読み取りとデータストアへの書き込み方法をソフトウェアに指示する関数で構成します。(ファイル アンサンブル データストアの構成の詳細については、測定データを含むファイル アンサンブル データストアを参照してください。)

% Create ensemble datastore that points to datafiles in current folder
unzip fileEnsData.zip  % extract compressed files
location = pwd;
extension = '.mat';
fensemble = fileEnsembleDatastore(location,extension);

% Specify data and condition variables
fensemble.DataVariables = ["gs";"sr";"load";"rate"];
fensemble.ConditionVariables = "label";

% Configure with functions for reading and writing variable data
fensemble.ReadFcn = @readBearingData;
fensemble.WriteToMemberFcn = @writeBearingData; 

関数は、アンサンブルを構成するデータ ファイルの操作方法を read コマンドと writeToLastMemberRead コマンドに指示します。したがって、read コマンドを呼び出すと、コマンドは readBearingData を使用して fensemble.SelectedVariables 内のすべての変数を読み取ります。この例では、readBearingData が、要求された変数を構造体 bearing から抽出し、ファイルに保存されている他の変数を抽出します。また、データの故障状態についてファイル名の解析も行います。

読み取る変数を指定して、アンサンブルの最初のメンバーからそれらを読み取ります。

fensemble.SelectedVariables = ["gs";"load";"label"];
data = read(fensemble)
data=1×3 table
     label            gs           load
    ________    _______________    ____

    "Faulty"    {5000x1 double}     0  

これで、メンバーからのデータを必要に応じて処理できます。この例では、変数 gs に保存されている信号の平均値を計算します。read によって返された table からデータを抽出します。

gsdata = data.gs{1};
gsmean = mean(gsdata);

平均値 gsmean は、新しい変数としてデータ ファイルに書き戻すことができます。これを行うには、まずアンサンブルのデータ変数のリストを拡張して、新しい値の変数を含めます。新しい変数 gsMean を呼び出します。

fensemble.DataVariables = [fensemble.DataVariables;"gsMean"]
fensemble = 
  fileEnsembleDatastore with properties:

                 ReadFcn: @readBearingData
        WriteToMemberFcn: @writeBearingData
           DataVariables: [5x1 string]
    IndependentVariables: [0x0 string]
      ConditionVariables: "label"
       SelectedVariables: [3x1 string]
                ReadSize: 1
              NumMembers: 5
          LastMemberRead: "/tmp/Bdoc24a_2528353_1096756/tpfe6adf35/predmaint-ex34165887/FaultData_01.mat"
                   Files: [5x1 string]

次に、派生した平均値を、最後に読み取られたアンサンブル メンバーに対応するファイルに書き込みます。(状態監視と予知保全のためのデータ アンサンブルを参照してください。)writeToLastMemberRead を呼び出すと、これはデータを構造体に変換し、fensemble.WriteToMemberFcn を呼び出してデータをファイルに書き込みます。

writeToLastMemberRead(fensemble,'gsMean',gsmean);

read を再度呼び出すと、最後に読み取られたメンバーのインジケーターがアンサンブルの次のファイルに進み、そのファイルからデータが読み取られます。

data = read(fensemble)
data=1×3 table
     label            gs           load
    ________    _______________    ____

    "Faulty"    {5000x1 double}     50 

これが別のメンバーからのデータであることは、table 内の load 変数を調べることによって確認できます。ここでの値は 50 ですが、前に読み取られたメンバーでは 0 でした。

処理手順を繰り返してこのアンサンブル メンバーの平均を計算し追加することは可能です。実際には、データの読み取り、処理、および書き込みのプロセスを自動化するとさらに便利です。これを行うには、アンサンブルをデータが読み取られていない状態にリセットします。その後、アンサンブルをループ処理して、各メンバーの読み取り、処理、および書き込みの手順を実行します。

reset(fensemble)
while hasdata(fensemble)
    data = read(fensemble);
    gsdata = data.gs{1};
    gsmean = mean(gsdata);
    writeToLastMemberRead(fensemble,'gsMean',gsmean);
end

アンサンブルのすべてのメンバーが読み取られると、hasdata コマンドは false を返します。ここで、アンサンブル内の各データ ファイルには、そのファイルのデータ gs から求められた変数 gsMean が含まれています。予知保全アルゴリズムを開発する際、このループのような手法を使ってアンサンブル ファイルからデータを抽出し処理することができます。アルゴリズム開発のプロセスにおけるファイル アンサンブル データストアの使用をさらに詳しく説明する例は、転動体ベアリングの故障診断を参照してください。また、この例には Parallel Computing Toolbox™ を使って大規模なデータ アンサンブルの処理を高速化する方法も示されています。

派生した変数がファイル アンサンブル データストアに存在することを確認するには、最初と 2 番目のアンサンブル メンバーからこれらを読み取ります。そのためには、アンサンブルを再びリセットし、選択した変数に新しい変数を追加します。実際には、派生値を計算した後はその値のみを読み取り、かなりのメモリ空間をとる可能性のある未処理データは読み取らないようにするのが有益です。この例では、新しい変数 gsMean を含み、未処理のデータ gs は含まない、選択した変数を読み取ります。

reset(fensemble)
fensemble.SelectedVariables = ["label";"load";"gsMean"];
data1 = read(fensemble)
data1=1×3 table
     label      load     gsMean 
    ________    ____    ________

    "Faulty"     0      -0.22648

data2 = read(fensemble)
data2=1×3 table
     label      load     gsMean 
    ________    ____    ________

    "Faulty"     50     -0.22937

バージョン履歴

R2018a で導入

すべて展開する