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

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

Можно использовать тип данных 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               346  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 = 100x1 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 указывают, что соответствующая переменная не имеет описания. Для получения дополнительной информации смотрите раздел Properties 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:
                      BloodPressure_1    BloodPressure_2
                      _______________    _______________

            Min             109                 68      
            Median          122               81.5      
            Max             138                 99      

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

Смотрите также

|

Похожие темы

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