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

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

Можно использовать 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  

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

См. также

|

Похожие темы