exponenta event banner

Импорт данных с помощью пользовательского средства чтения файлов

Если требуется визуализировать данные, сохраненные в формате данных или файла, который не поддерживается инспектором данных моделирования, можно использовать io.reader для создания собственного модуля чтения пользовательских файлов для инспектора данных моделирования. В этом примере поясняются части определения класса для пользовательского средства чтения файлов и показано, как зарегистрировать устройство чтения с помощью инспектора данных моделирования. Откройте окно ExcelFirstColumnTimeReader.m для просмотра полного определения класса.

Запись определения класса для пользовательского устройства чтения

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

Пользовательское устройство чтения в этом примере использует readtable для загрузки данных из файла Microsoft Excel™ и использования первого столбца в файле в качестве временных данных.

Определение класса начинается с наследования от io.reader , за которым следуют определения методов, возвращающие требуемые и релевантные данные и метаданные.

classdef ExcelFirstColumnTimeReader < io.reader

Каждый пользовательский читатель должен определить getName, getTimeValues, и getDataValues методы. Доступны дополнительные методы для доступа к определенным метаданным, которые могут существовать в пользовательском файле. Определение класса для этого примера определяет абстрактные методы, а также supportsFile и getChildren методы.

supportsFile метод проверяет содержимое файла, чтобы убедиться, что файл содержит данные сигнала.

function supported = supportsFile(~,filename)
    try
        t = readtable(filename);
        supported = height(t) > 0 && numel(t.Properties.VariableNames) > 1;
    catch
        supported = false;
    end
end

Для импорта нескольких сигналов из файла следует рассматривать данные как иерархические, при этом файл является главным узлом. Считыватель использует getChildren метод создания ExcelFirstColumnTimeReader для каждого сигнала в файле.

function childObj = getChildren(obj)
    childObj = {};
    if isempty(obj.VariableName)
        t = readtable(obj.FileName);
        vars = t.Properties.VariableNames;
        vars(1) = [];
        childObj = cell(size(vars));
        for idx = 1:numel(vars)
            childObj{idx} = ExcelFirstColumnTimeReader;
            childObj{idx}.FileName = obj.FileName;
            childObj{idx}.VariableName = vars{idx};
        end
    end
end

getTimeValues считывает данные в файле с помощью readtable и возвращает данные в первом столбце инспектора данных моделирования для использования в качестве временных данных.

function timeVals = getTimeValues(obj)
    timeVals = [];
    if ~isempty(obj.VariableName)
        t = readtable(obj.FileName);
        timeName = t.Properties.VariableNames{1};
        timeVals = t.(timeName);
    end
end

getName использует имя файла в качестве имени узла верхнего уровня импортированных данных. Сигналы именуются с помощью VariableName свойство для соответствующего ExcelFirstColumnTimeReader объект, возвращенный getChildren способ.

function retName = getName(obj)
    if isempty(obj.VariableName)
        fullName = obj.FileName;
        [filepath,name,ext] = fileparts(fullName);
        retName = strcat(name,ext);
    else
        retName = obj.VariableName;
    end
end

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

function dataVals = getDataValues(obj)
    dataVals = [];
    if ~isempty(obj.VariableName)
        t = readtable(obj.FileName);
        dataVals = t.(obj.VariableName);
    end
end

Регистрация пользовательского средства чтения для инспектора данных моделирования

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

registerFileReader(ExcelFirstColumnTimeReader,[".xlsx" "xls"]);

Для подтверждения регистрации модуля чтения файлов используйте io.reader.getRegisteredFileReaders способ.

io.reader.getRegisteredFileReaders
ans = 
"ExcelFirstColumnTimeReader"

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

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

Чтобы импортировать данные с помощью пользовательского интерфейса, откройте инспектор данных моделирования. Вы можете использовать Simulink.sdi.view для открытия инспектора данных моделирования из окна команд MATLAB. Затем нажмите кнопку Импорт.

В диалоговом окне «Импорт» выберите параметр «Файл» и импортируйте данные из файла в новый прогон. Щелкните папку для просмотра файловой системы и выберите файл, который требуется импортировать. Файл для этого примера называется CustomFile.xlsx.

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

Можно выбрать сигналы, которые требуется импортировать из файла. После выбора нажмите кнопку Импорт. Данные импортируются в новый прогон с именем Imported_Data.

Для программного импорта данных можно использовать Simulink.sdi.createRun функция. Инспектор данных моделирования имеет встроенную программу чтения для файлов Microsoft Excel. Можно указать, какой модуль чтения использовать для импорта данных в вызове Simulink.sdi.createRun функция. Если не указать устройство чтения, которое требуется использовать для импорта данных, инспектор данных моделирования использует первое пользовательское устройство чтения, поддерживающее расширение файла.

Simulink.sdi.createRun('Custom File Run','file','CustomFile.xlsx','ExcelFirstColumnTimeReader');

Проверка и анализ импортированных данных

После импорта данных можно использовать инспектор данных моделирования для проверки и анализа импортированных данных самостоятельно или вместе со связанными данными моделирования.

См. также

Классы

Функции

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