exponenta event banner

Преимущества использования таблиц

Удобно хранить данные смешанного типа в одном контейнере

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

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

Например, загрузить данные о пациентах.

load patients

Затем объедините переменные рабочей области. Systolic и Diastolic в один BloodPressure переменную и преобразовать переменную рабочей области, Gender, от массива ячеек символьных векторов до категориального массива.

BloodPressure = [Systolic Diastolic];
Gender = categorical(Gender);

whos('Gender','Age','Smoker','BloodPressure')
  Name                 Size            Bytes  Class          Attributes

  Age                100x1               800  double                   
  BloodPressure      100x2              1600  double                   
  Gender             100x1               330  categorical              
  Smoker             100x1               100  logical                  

Переменные Age, BloodPressure, Gender, и Smoker имеют различные типы данных и являются кандидатами для хранения в таблице, поскольку все они имеют одинаковое количество строк, 100.

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

T = table(Gender,Age,Smoker,BloodPressure);
T(1:5,:)
ans=5×4 table
    Gender    Age    Smoker    BloodPressure
    ______    ___    ______    _____________

    Male      38     true       124     93  
    Male      43     false      109     77  
    Female    38     false      125     83  
    Female    40     false      117     75  
    Female    49     false      122     80  

Таблица отображается в табличном формате с именами переменных вверху.

Каждая переменная в таблице является одним типом данных. При добавлении новой строки в таблицу MATLAB ® обеспечивает согласованность типа данных между новыми данными и соответствующими переменными таблицы. Например, если вы пытаетесь добавить информацию для нового пациента, где первый столбец содержит возраст пациента вместо пола, как в выраженииT(end+1,:) = {37,{'Female'},true,[130 84]}, то вы получите ошибку:

Invalid RHS for assignment to a categorical array.

Ошибка возникает из-за того, что MATLAB ® не может назначить числовые данные ,37, к категориальному массиву, Gender.

Для сравнения таблиц со структурами рассмотрим структурный массив, StructArray, что эквивалентно таблице, T.

StructArray = table2struct(T)
StructArray=100×1 struct array with fields:
    Gender
    Age
    Smoker
    BloodPressure

Структурные массивы организуют записи с использованием именованных полей. Значение каждого поля может иметь различный тип данных или размер. Теперь отобразите именованные поля для первого элемента StructArray.

StructArray(1)
ans = struct with fields:
           Gender: Male
              Age: 38
           Smoker: 1
    BloodPressure: [124 93]

Поля в массиве структуры аналогичны переменным в таблице. Однако, в отличие от таблиц, невозможно обеспечить однородность внутри поля. Например, можно иметь некоторые значения S.Gender которые являются категориальными элементами массива, Male или Female, другие, которые являются векторами символов, 'Male' или 'Female'и другие, которые являются целыми числами, 0 или 1.

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

ScalarStruct = struct(...
    'Gender',{Gender},...
    'Age',Age,...
    'Smoker',Smoker,...
    'BloodPressure',BloodPressure)
ScalarStruct = struct with fields:
           Gender: [100x1 categorical]
              Age: [100x1 double]
           Smoker: [100x1 logical]
    BloodPressure: [100x2 double]

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

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

Доступ к данным с помощью числового или именованного индексирования

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

Рассмотрим таблицу образцов сверху. Каждая строка в таблице, T, представляет другого пациента. Переменная рабочей области, LastName, содержит уникальные идентификаторы для 100 строк. Добавьте имена строк в таблицу, установив RowNames свойство для LastName и отображение первых пяти строк обновленной таблицы.

T.Properties.RowNames = LastName;
T(1:5,:)
ans=5×4 table
                Gender    Age    Smoker    BloodPressure
                ______    ___    ______    _____________

    Smith       Male      38     true       124     93  
    Johnson     Male      43     false      109     77  
    Williams    Female    38     false      125     83  
    Jones       Female    40     false      117     75  
    Brown       Female    49     false      122     80  

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

T({'Williams','Brown'},{'Age','BloodPressure'})
ans=2×2 table
                Age    BloodPressure
                ___    _____________

    Williams    38      125     83  
    Brown       49      122     80  

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

T(3:2:5,2:2:4)
ans=2×2 table
                Age    BloodPressure
                ___    _____________

    Williams    38      125     83  
    Brown       49      122     80  

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

  • С массивом ячеек необходимо использовать strcmp чтобы найти нужные именованные данные, а затем можно выполнить индексацию в массив.

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

  • С помощью таблицы можно получить доступ к данным по именованному индексу или по числовому индексу. Кроме того, можно легко выбрать подмножество переменных и подмножество строк.

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

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

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

Например, добавьте описание таблицы, описания переменных и единицы измерения переменных для Age.

T.Properties.Description = 'Simulated Patient Data';

T.Properties.VariableDescriptions = ...
    {'Male or Female' ...
    '' ...
    'true or false' ...
    'Systolic/Diastolic'};

T.Properties.VariableUnits{'Age'} = 'Yrs';

Отдельные пустые символьные векторы в массиве ячеек для VariableDescriptions указывает, что соответствующая переменная не имеет описания. Дополнительные сведения см. в разделе «Свойства» table.

Для печати сводки таблицы используйте summary функция.

summary(T)
Description:  Simulated Patient Data

Variables:

    Gender: 100x1 categorical

        Properties:
            Description:  Male or Female
        Values:

            Female       53   
            Male         47   

    Age: 100x1 double

        Properties:
            Units:  Yrs
        Values:

            Min          25   
            Median       39   
            Max          50   

    Smoker: 100x1 logical

        Properties:
            Description:  true or false
        Values:

            True        34   
            False       66   

    BloodPressure: 100x2 double

        Properties:
            Description:  Systolic/Diastolic
        Values:
                      Column 1    Column 2
                      ________    ________

            Min         109           68  
            Median      122         81.5  
            Max         138           99  

Структуры и массивы ячеек не имеют свойств для хранения метаданных.

См. также

|

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