exponenta event banner

fileEnsembleDatastore

Управление данными ансамбля в пользовательском формате файла

Описание

A fileEnsembleDatastore объект представляет собой хранилище данных, специализированное для использования при разработке алгоритмов мониторинга состояния и прогностического обслуживания с использованием измеренных данных.

Ансамбль - это совокупность данных участников, хранящихся в коллекции файлов. fileEnsembleDatastore объект определяет переменные данных, независимые переменные и переменные условий в ансамбле. Вы предоставляете функции, которые говорят fileEnsembleDatastore объект, предназначенный для чтения переменных каждого типа из коллекции файлов. Поэтому можно использовать fileEnsembleDatastore для управления данными ансамбля, хранящимися в любом формате файла или конфигурации переменных.

Данные для fileEnsembleDatastore объект может храниться в любом месте, поддерживаемом хранилищами данных MATLAB ®, включая удаленные места, такие как облачное хранилище с помощью Amazon S3™ (Simple Storage Service), Windows Azure ® Blob Storage и Hadoop ® Distributed File System ( HDFS™).

Подробный пример использования хранилища данных файлового ансамбля см. в разделе Хранилище данных файлового ансамбля с измеренными данными. Общие сведения об ансамблях данных в Toolbox™ предиктивного обслуживания см. в разделе Ансамбли данных для контроля состояния и предиктивного обслуживания.

Создание

Описание

пример

fensemble = fileEnsembleDatastore(location,extension) создает fileEnsembleDatastore объект, указывающий на данные по пути к файлу, указанному location и имеющий указанное расширение файла. Задайте свойства объекта, чтобы указать функции для чтения и записи в хранилище данных ансамбля.

fensemble = fileEnsembleDatastore(location,extension,Name,Value) задает дополнительные свойства объекта, используя один или несколько аргументов пары имя-значение. Например, использование 'ConditionVariables',["FaultCond";"ID"] определяет переменные условия при создании объекта.

Входные аргументы

развернуть все

Файлы или папки для чтения данных ансамбля, указанные как строка, символьный вектор, строковый массив или массив ячеек символьных векторов. Если файлы находятся не в текущей папке, то location должен содержать полные или относительные пути.

Если указать папку, то fileEnsembleDatastore использует все файлы в этой папке с расширением, указанным в extension. Либо укажите явный список включаемых файлов. При указании также можно использовать подстановочный символ (*) location. Этот символ указывает, что все соответствующие файлы или все файлы в соответствующих папках включены в хранилище данных.

Путь к файлу может быть любым расположением, поддерживаемым хранилищами данных MATLAB, включая путь IRI, указывающий на удаленное расположение, например облачное хранилище с использованием Amazon S3 (Simple Storage Service), хранилище больших двоичных объектов Windows Azure и распределенная файловая система Hadoop (HDFS). Дополнительные сведения о работе с удаленными данными в MATLAB см. в разделе Работа с удаленными данными.

Пример: pwd + "\simResults"

Пример: {'C:\dir\data\file1.xls','C:\dir\data\file2.xlsx'}

Пример: "../dir/data/*.mat"

Расширение файла для файлов в хранилище данных, указанное как строка или символьный вектор, например ".mat" или '.csv'.

Если хранилище данных содержит файлы с несколькими расширениями, укажите их как строковый вектор, например [".xls",".xlsx"]. Функции, поставляемые для ReadFcn и WriteToMemberFcn свойства должны быть способны взаимодействовать со всеми указанными типами файлов.

Свойства

развернуть все

Функция для считывания всех выбранных переменных из ансамбля, заданная как дескриптор функции, которую вы предоставляете. Вы пишете функцию, которая инструктирует программное обеспечение, как считывать переменные из файла данных, содержащего члена вашего ансамбля. Функция имеет:

  • Два входа, имя файла (строка) и имена сигналов (строковый вектор) для загрузки из файла

  • Один выход, строка таблицы с табличными переменными для каждой независимой переменной

При указании ReadFcn, программное обеспечение использует эту функцию для чтения всех выбранных переменных из ансамбля, независимо от того, имеют ли они имя в DataVariables, IndependentVariables, или ConditionVariables.

Например, предположим, что вы пишете следующую функцию, readVars, для чтения переменных из файлов. Эта функция создает таблицу, содержащую переменные в файле данных, которые соответствуют переменным в векторе входной строки. variables.

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 в текущей папке или в пути. Затем, при создании fileEnsembleDatastore названный fensemble, комплект ReadFcn следующим образом.

fensemble.ReadFcn = @readVars;

При звонке read(fensemble), программное обеспечение использует readVars для чтения всех переменных в SelectedVariables свойство хранилища данных ансамбля. Необходимо задать это свойство для чтения данных из fileEnsembleDatastore член. В противном случае read создает ошибку.

Функция для записи данных последнему считываемому члену ансамбля, заданная как дескриптор функции, которую вы предоставляете. Вы пишете функцию, которая инструктирует программное обеспечение, как записывать переменные в файл данных, содержащий члена вашего ансамбля. Функция имеет:

  • Два входа, имя файла (строка) и структура данных, имена полей которых являются переменными данных для записи и значения которых являются соответствующими значениями

  • Отсутствие выходных данных

Например, предположим, что вы пишете следующую функцию, writeNewData, для записи данных в файлы. Эта функция записывает структуру входных данных в указанный файл данных.

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

Магазин writeNewData в файле MATLAB в текущей папке или в пути. Затем, при создании fileEnsembleDatastore названный fensemble, комплект WriteToMemberFcn следующим образом:

fensemble.WriteToMemberFcn = @writeNewData;

При вызове writeToLastMemberRead команда на fensemble, программное обеспечение использует writeNewData добавление новых данных в файл данных последнего прочитанного участника ансамбля. Необходимо задать это свойство, чтобы добавить данные в fileEnsembleDatastore член. В противном случае writeToLastMemberRead создает ошибку.

Переменные данных в ансамбле, заданные как строковый массив. Переменные данных являются основным содержанием членов ансамбля. Переменные данных могут включать измеренные данные или производные данные для анализа и разработки алгоритмов прогностического обслуживания. Например, переменные данных могут включать измеренные или смоделированные сигналы вибрации и полученные значения, такие как среднее значение вибрации или пиковая частота вибрации. На практике переменные данных, независимые переменные и переменные условий являются различными наборами переменных.

Можно также указать DataVariables использование массива ячеек символьных векторов, таких как {'Vibration';'Tacho'}, но имена переменных всегда хранятся в виде строкового массива, ["Vibration";"Tacho"]. Если задать матрицу с именами переменных, матрица будет сведена к вектору столбца.

Независимые переменные в ансамбле, заданные как строковый массив. Как правило, для упорядочения участников ансамбля используются независимые переменные. Примерами являются временные метки, количество рабочих часов или мили. Задайте для этого свойства имена таких переменных в ансамбле. На практике переменные данных, независимые переменные и переменные условий являются различными наборами переменных.

Можно также указать IndependentVariables использование массива ячеек символьных векторов, таких как {'Time';'Age'}, но имена переменных всегда хранятся в виде строкового массива, ["Time";"Age"]. Если задать матрицу с именами переменных, матрица будет сведена к вектору столбца.

Переменные условий в ансамбле, заданные как строковый массив. Используйте переменные условия для маркировки членов ансамбля в соответствии с состоянием отказа или другим рабочим состоянием, при котором был собран член ансамбля. На практике переменные данных, независимые переменные и переменные условий являются различными наборами переменных.

Можно также указать ConditionVariables использование массива ячеек символьных векторов, таких как {'GearFault';'Temperature'}, но имена переменных всегда хранятся в виде строкового массива, ["GearFault";"Temperature"]. Если задать матрицу с именами переменных, матрица будет сведена к вектору столбца.

Переменные для чтения из ансамбля, заданные как строковый массив. Используйте это свойство, чтобы указать, какие переменные извлекаются в рабочую область MATLAB при использовании read для считывания данных из текущего ансамбля участников. read возвращает строку таблицы, содержащую переменную таблицы для каждого имени, указанного в SelectedVariables. Например, предположим, что у вас есть ансамбль, fensemble, который содержит шесть переменных, и вы хотите прочитать только две из них, Vibration и FaultState. Установите SelectedVariables свойство и вызов read:

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

SelectedVariables может быть любой комбинацией переменных в DataVariables, ConditionVariables, и IndependentVariables свойства. Если SelectedVariables пуст, read создает ошибку.

Можно указать SelectedVariables использование массива ячеек символьных векторов, таких как {'Vibration';'Tacho'}, но имена переменных всегда хранятся в виде строкового массива, ["Vibration";"Tacho"]. Если задать матрицу с именами переменных, матрица будет сведена к вектору столбца.

Число участников, считываемых из хранилища данных ансамбля одновременно, указанное как положительное целое число, меньшее, чем общее число участников ансамбля. По умолчанию read возвращает однострочную таблицу, содержащую данные от одного члена ансамбля. Чтение данных из нескольких элементов в одном read задайте для этого свойства целое значение, большее единицы. Например, если ReadSize = 3, затем read возвращает таблицу из трех строк, в которой каждая строка содержит данные от другого члена ансамбля. Если меньше, чем ReadSize члены не прочитаны, затем read возвращает таблицу, содержащую столько строк, сколько осталось элементов.

Свойство хранилища данных ансамбля LastMemberRead содержит имена всех файлов, прочитанных в течение последнего read операция. Таким образом, например, если ReadSize = 3, затем a read наборы операций LastMemberRead в строковый вектор, содержащий три имени файлов.

При использовании writeToLastMemberRead, укажите данные для записи в виде таблицы с числом строк, равным ReadSize. writeToLastMemberRead команда обновляет элементы, указанные LastMemberRead, запись одной строки таблицы в каждый указанный файл.

Изменение ReadSize свойство также переводит ансамбль в непрочитанное состояние. Например, предположим, что вы читаете некоторых участников ансамбля по одному (ReadSize = 1), а затем изменить ReadSize до 3. Следующее read возвращает данные от первых трех участников ансамбля.

Это свойство доступно только для чтения.

Количество участников в ансамбле, указанное как положительное целое число.

Это свойство доступно только для чтения.

Имя файла последнего участника ансамбля, считанного в рабочую область MATLAB, указанное как строка. При использовании read команда для считывания данных из хранилища данных ансамбля, программа определяет, какой член ансамбля будет считываться следующим, и считывает данные из соответствующего файла. LastMemberRead содержит путь к последнему прочитанному файлу. Если хранилище данных ансамбля еще не было прочитано или было сброшено, LastMemberRead является пустой строкой.

При звонке writeToLastMemberRead для добавления данных обратно в хранилище данных ансамбля эта функция записывает данные в файл, указанный в LastMemberRead.

По умолчанию read считывает данные от одного участника ансамбля за раз ( ReadSize свойство хранилища данных ансамбля - 1). Когда ReadSize > 1, LastMemberRead - строковый массив, содержащий пути ко всем файлам, прочитанным в последнем read операция.

Это свойство доступно только для чтения.

Список файлов в хранилище данных ансамбля, указанный как вектор строки столбца длины NumMembers. Каждая запись содержит полный путь к файлу в хранилище данных. Файлы находятся в том порядке, в котором read читает команда участников ансамбля.

Пример: ["C:\Data\Data_01.csv"; "C:\Data\Data_02.csv"; "C:\Data\Data_03.csv"]

Функции объекта

read, writeToLastMemberRead, и subset функции специализированы для данных ансамбля предиктивного набора средств технического обслуживания. Другие функции, такие как reset и hasdata, идентичны тем, которые используются с datastore объекты в MATLAB. Чтобы передать все данные элемента в таблицу или массив ячеек с помощью одной команды, используйте команду readall. Для извлечения определенных участников ансамбля в меньшее или более специализированное хранилище данных ансамбля используйте subset. Для разделения хранилища данных ансамбля используйте partition(ds,n,index) синтаксис partition функция.

readСчитывание данных участников из хранилища данных ансамбля
writeToLastMemberReadЗапись данных в хранилище данных ансамбля
subsetСоздание нового хранилища данных ансамбля из подмножества существующего хранилища данных ансамбля
resetСброс хранилища данных в исходное состояние
hasdataОпределение доступности данных для чтения
progress Определение объема считанных данных
readallСчитывание всех данных в хранилище данных
numpartitionsКоличество разделов хранилища данных
partitionРазделение хранилища данных
tallСоздать массив высокого уровня
isPartitionableОпределение возможности разделения хранилища данных
isShuffleableОпределение возможности тасования хранилища данных

Примеры

свернуть все

Создайте хранилище данных ансамбля файлов для данных, хранящихся в файлах MATLAB ®, и настройте его с помощью функций, которые помогут программному обеспечению считывать и записывать данные из хранилища данных .

В этом примере имеются два файла данных, содержащих работоспособные рабочие данные из несущей системы. baseline_01.mat и baseline_02.mat. Вы также имеете три файла данных, содержащих неисправные данные из одной и той же системы, FaultData_01.mat, FaultData_02.mat, и FaultData_03.mat.

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

Перед взаимодействием с данными в ансамбле необходимо создать функции, указывающие программному обеспечению, как обрабатывать файлы данных для считывания переменных в рабочую область MATLAB и записи данных обратно в файлы. Сохраните эти функции в папке на пути к файлу. В этом примере используются следующие функции:

  • readBearingData - извлечь запрошенные переменные из структуры, bearingи другие переменные, хранящиеся в файле. Эта функция также анализирует имя файла для определения состояния отказа данных. Функция возвращает строку таблицы, содержащую одну переменную таблицы для каждой запрашиваемой переменной.

  • writeBearingData - Возьмите структуру и запишите ее переменные в файл данных как отдельные сохраненные переменные.

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

Наконец, задайте свойства ансамбля для идентификации переменных данных, переменных условий и выбранных переменных для чтения. В этом примере переменные в файле данных: gs, sr, load, и rate. Предположим, что необходимо только прочитать метку неисправности, gs, и sr. Задайте эти переменные в качестве выбранных переменных.

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
addpath(fullfile(matlabroot,'examples','predmaint','main')) % Make sure functions are on path
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.

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/BR2021ad_1657350_6935/mlx_to_docbook3/tpb00852e4/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 

Вы можете подтвердить, что эти данные получены от другого участника, проверив 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 когда прочитан каждый участник ансамбля. Теперь каждый файл данных в ансамбле включает в себя gsMean переменная, полученная из данных gs в этом файле. Можно использовать методы, подобные этому циклу, для извлечения и обработки данных из файлов ансамбля при разработке алгоритма предиктивного обслуживания. Пример, более подробно иллюстрирующий использование хранилища данных файлового ансамбля в процессе разработки алгоритмов, см. в разделе Диагностика неисправности подшипника элемента качения. В примере также показано, как использовать Parallel Computing Toolbox™ для ускорения обработки больших массивов данных.

Чтобы подтвердить, что производная переменная присутствует в хранилище данных ансамбля файлов, прочитайте ее у первого и второго участников ансамбля. Для этого снова сбросьте ансамбль и добавьте новую переменную к выбранным переменным. На практике после вычисления производных значений может быть полезно считывать только эти значения без повторного чтения необработанных данных, что может занять значительное место в памяти. Для этого примера прочитайте выбранные переменные, которые включают новую переменную, 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

rmpath(fullfile(matlabroot,'examples','predmaint','main')) % Reset path

Вопросы совместимости

развернуть все

Не рекомендуется начинать с R2018b

Представлен в R2018a