fileEnsembleDatastore

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

Описание

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

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

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

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

Создание

Синтаксис

fensemble = fileEnsembleDatastore(location,extension)
fensemble = fileEnsembleDatastore(location,extension,Name,Value)

Описание

пример

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 (Простой Сервис Устройства хранения данных), Windows Azure Blob Storage и Распределенная файловая система Hadoop (HDFS). Для получения дополнительной информации о работе с удаленными данными в MATLAB, смотрите работу с Удаленными данными (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 возвращает таблицу со столькими же строк, сколько там остаются участники.

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

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

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

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

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

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

Имя файла последнего чтения члена ансамбля в рабочее пространство MATLAB, заданное как строка. Когда вы используете команду read, чтобы считать данные из datastore ансамбля, программное обеспечение определяет, какой член ансамбля читать затем, и считывает данные из соответствующего файла. Свойство 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 специализированы для данных ансамбля Predictive Maintenance Toolbox. Другие функции, такие как reset и hasdata, идентичны используемым с объектами datastore в MATLAB. Чтобы разделить datastore ансамбля, используйте синтаксис partition(ds,n,index) функции partition.

readСчитайте членские данные из datastore ансамбля
writeToLastMemberReadЗапишите данные члену datastore ансамбля
resetСброс Datastore к начальному состоянию
hasdataОпределите, доступны ли данные для чтения
progress Определите, сколько данных было считано
numpartitionsКоличество разделов datastore
partitionРазделите datastore
tallСоздание tall array

Примеры

свернуть все

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

В данном примере у вас есть два файла данных, содержащие здоровые эксплуатационные данные от системы переноса, baseline_01.mat и baseline_02.mat. У вас также есть три файла данных, содержащие дефектные данные из той же системы, FaultData_01.mat, FaultData_02.mat и FaultData_03.mat. (Из-за объема данных операция unzip занимает несколько минут.) На практике у вас может быть намного больше файлов данных.

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

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

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

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

addpath(fullfile(matlabroot,'examples','predmaint','main')) % Make sure functions are on path

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. Для более подробного примера смотрите Datastore Ансамбля Файла С Результатами измерений.

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

Создайте datastore ансамбля файла для данных, хранимых в файлах MATLAB, и сконфигурируйте их с функциями, которые говорят программное обеспечение, как читать из и записать в datastore. (Для получения дополнительной информации о хранилищах данных ансамбля файла конфигурирования, смотрите Datastore Ансамбля Файла С Результатами измерений.) Из-за объема данных операция unzip занимает несколько минут.

% 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"    [146484x1 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/BR2019ad_1062519_57051/mlx_to_docbook2/tp69f316d9/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"    [146484x1 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 в том файле. Можно использовать методы как этот цикл, чтобы извлечь и обработать данные из файлов ансамбля, когда вы разрабатываете алгоритм прогнозирующего обслуживания. Для примера, иллюстрирующего более подробно использование 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.23 

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

    "Faulty"     50     -0.22352

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

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

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

Не рекомендуемый запуск в R2018b

Введенный в R2018a

Для просмотра документации необходимо авторизоваться на сайте