fileEnsembleDatastore

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

Описание

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

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

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

Подробный пример, иллюстрирующий использование файла datastore ансамбля, см. Файл Ensemble Datastore с измеренными данными. Для получения общей информации о ансамблях данных в Predictive Maintenance Toolbox™, смотрите Ансамбли данных для мониторинга условия и прогнозирующего обслуживания.

Создание

Описание

пример

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

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

Входные параметры

расширить все

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

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

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

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

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

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

Расширение файла для файлов в datastore, заданное как строка или вектор символов, такой как ".mat" или '.csv'.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры

свернуть все

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

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

Создайте file ensemble datastore для данных, хранящихся в файлах MATLAB, и сконфигурируйте его с функциями, которые говорят программному обеспечению, как читать и записывать в datastore. (Для получения дополнительной информации о настройке файловых ансамблевых хранилищ данных смотрите File Ensemble Datastore With Measured Data.)

% 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

The hasdata команда возвращает false когда каждый представитель ансамбля был прочитан. Теперь каждый файл данных в ансамбле включает gsMean переменная, выведенная из gs данных в этом файле. Можно использовать методы, подобные этому циклу, чтобы извлечь и обработать данные из файлов ансамбля, когда вы разрабатываете алгоритм прогнозирования-обслуживания. Для примера, более подробно иллюстрирующего использование file ensemble datastore в процессе разработки алгоритмов, см. Раздел «Диагностика отказа подшипника качения». В примере также показано, как использовать Parallel Computing Toolbox™ для ускорения обработки больших ансамблей данных.

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