exponenta event banner

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

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

Данные ансамбля

Извлеките сжатые данные для примера.

unzip fleetdata.zip  % extract compressed files

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

  • Показания одометра в конце дня, в милях

  • Топливо, потребленное в тот день, в галлонах

  • Максимальная частота вращения за день

  • Максимальная температура двигателя за сутки, в градусах Цельсия

  • Состояние освещения двигателя в конце дня (0 = выключено, 1 = включено)

Каждый файл содержит данные за период от примерно 80 до примерно 120 дней работы. Наборы данных были искусственно изготовлены для этого примера и не соответствуют реальным данным флота.

Настройка хранилища данных ансамбля

Создать fileEnsembleDatastore объект для управления данными.

location = pwd;
extension = '.txt';
fensemble = fileEnsembleDatastore(location,extension);

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

addpath(fullfile(matlabroot,'examples','predmaint','main')) % Make sure functions are on path
fensemble.ReadFcn = @readFleetData;

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

fensemble.DataVariables = ["Odometer";"FuelConsump";"MaxRPM";"MaxTemp";"EngineLight"];

Функция readFleetData также анализирует имя файла, чтобы вернуть идентификатор автомобиля, из которого были собраны данные, номер от 1 до 10. Этот идентификатор является независимой от ансамбля переменной.

fensemble.IndependentVariables = "ID";

Укажите все переменные данных и независимую переменную в качестве выбранных переменных для чтения из хранилища данных ансамбля.

fensemble.SelectedVariables = [fensemble.IndependentVariables;fensemble.DataVariables];
fensemble
fensemble = 
  fileEnsembleDatastore with properties:

                 ReadFcn: @readFleetData
        WriteToMemberFcn: []
           DataVariables: [5x1 string]
    IndependentVariables: "ID"
      ConditionVariables: [0x0 string]
       SelectedVariables: [6x1 string]
                ReadSize: 1
              NumMembers: 10
          LastMemberRead: [0x0 string]
                   Files: [10x1 string]

Чтение данных ансамбля

При звонке read в хранилище данных ансамбля, он использует readFleetData для чтения выбранных переменных от первого участника ансамбля.

data1 = read(fensemble)
data1=1×6 table
    ID        Odometer            FuelConsump            MaxRPM               MaxTemp            EngineLight   
    __    _________________    _________________    _________________    _________________    _________________

    1     {120x1 timetable}    {120x1 timetable}    {120x1 timetable}    {120x1 timetable}    {120x1 timetable}

Проверьте и постройте график данных одометра.

odo1 = data1.Odometer{1}
odo1=120×1 timetable
     Time       Var1 
    _______    ______

    0 days     180.04
    1 day      266.76
    2 days     396.01
    3 days     535.19
    4 days     574.31
    5 days     714.82
    6 days     714.82
    7 days     821.44
    8 days     1030.5
    9 days     1213.4
    10 days    1303.4
    11 days    1416.9
    12 days    1513.5
    13 days    1513.5
    14 days    1697.1
    15 days    1804.6
      ⋮

plot(odo1.Time,odo1.Var1)

Figure contains an axes. The axes contains an object of type line.

Рассчитайте средний пробег газа для этого члена автопарка. Это значение является показанием одометра в последний день, деленным на общее количество потребляемого топлива.

fuelConsump1 = data1.FuelConsump{1}.Var1;
totalConsump1 = sum(fuelConsump1);
totalMiles1 = odo1.Var1(end);
mpg1 = totalMiles1/totalConsump1
mpg1 = 22.3086

Данные пакетной обработки от всех участников ансамбля

При звонке read опять же, он считывает данные от следующего участника ансамбля и продвигает LastMemberRead имущество fensemble для отражения имени файла этого ансамбля. Можно повторить шаги обработки, чтобы вычислить средний пробег газа для этого элемента. На практике более полезно автоматизировать процесс считывания и обработки данных. Для этого следует сбросить хранилище данных ансамбля в состояние, в котором данные не считывались. Затем проведите по ансамблю и выполните операции чтения и обработки для каждого участника, вернув таблицу, которая содержит идентификатор каждого автомобиля и средний пробег газа. (Если у вас есть Toolbox™ Parallel Computing, вы можете использовать его для ускорения обработки больших массивов данных.)

reset(fensemble)
mpgData = zeros(10,2);    % preallocate array for 10 ensemble members
ct = 1;
while hasdata(fensemble)
    data = read(fensemble);
    odo = data.Odometer{1}.Var1;
    fuelConsump = data.FuelConsump{1}.Var1;
    totalConsump = sum(fuelConsump);
    mpg = odo(end)/totalConsump1;
    ID = data.ID;
    mpgData(ct,:) = [ID,mpg];
    ct = ct + 1;
end
mpgTable = array2table(mpgData,'VariableNames',{'ID','mpg'})
mpgTable=10×2 table
    ID     mpg  
    __    ______

     1    22.309
     2    19.327
     3    20.816
     4    27.464
     5    18.848
     6    22.517
     7    27.018
     8    27.284
     9    17.149
    10     26.37

См. также

|

Связанные темы