exponenta event banner

Создание таблиц и работа с ними

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

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

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

Создание и просмотр таблицы

Создайте таблицу из переменных рабочей области и просмотрите ее. Либо используйте инструмент импорта или readtable для создания таблицы из электронной таблицы или текстового файла. При импорте данных из файла с помощью этих функций каждый столбец становится переменной таблицы.

Загрузить данные выборки для 100 пациентов из patients MAT-файл для переменных рабочей области.

load patients
whos
  Name                            Size            Bytes  Class      Attributes

  Age                           100x1               800  double               
  Diastolic                     100x1               800  double               
  Gender                        100x1             11412  cell                 
  Height                        100x1               800  double               
  LastName                      100x1             11616  cell                 
  Location                      100x1             14208  cell                 
  SelfAssessedHealthStatus      100x1             11540  cell                 
  Smoker                        100x1               100  logical              
  Systolic                      100x1               800  double               
  Weight                        100x1               800  double               

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

Создайте таблицу и заполните ее Gender, Smoker, Height, и Weight переменные рабочей области. Просмотрите первые пять строк.

T = table(Gender,Smoker,Height,Weight);
T(1:5,:)
ans=5×4 table
      Gender      Smoker    Height    Weight
    __________    ______    ______    ______

    {'Male'  }    true        71       176  
    {'Male'  }    false       69       163  
    {'Female'}    false       64       131  
    {'Female'}    false       67       133  
    {'Female'}    false       64       119  

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

Создайте таблицу, прочитав все столбцы из файла. patients.dat.

T2 = readtable('patients.dat');
T2(1:5,:)
ans=5×10 table
      LastName        Gender      Age              Location               Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
    ____________    __________    ___    _____________________________    ______    ______    ______    ________    _________    ________________________

    {'Smith'   }    {'Male'  }    38     {'County General Hospital'  }      71       176        1         124          93             {'Excellent'}      
    {'Johnson' }    {'Male'  }    43     {'VA Hospital'              }      69       163        0         109          77             {'Fair'     }      
    {'Williams'}    {'Female'}    38     {'St. Mary's Medical Center'}      64       131        0         125          83             {'Good'     }      
    {'Jones'   }    {'Female'}    40     {'VA Hospital'              }      67       133        0         117          75             {'Fair'     }      
    {'Brown'   }    {'Female'}    49     {'County General Hospital'  }      64       119        0         122          80             {'Good'     }      

Можно назначить больше табличных переменных, ориентированных на столбцы, используя точечную нотацию. T.varname, где T является таблицей и varname является требуемым именем переменной. Создайте идентификаторы, являющиеся случайными числами. Затем назначьте их переменной таблицы и присвойте ей имя ID. Все переменные, назначенные таблице, должны иметь одинаковое количество строк. Отображение первых пяти строк T.

T.ID = randi(1e4,100,1);
T(1:5,:)
ans=5×5 table
      Gender      Smoker    Height    Weight     ID 
    __________    ______    ______    ______    ____

    {'Male'  }    true        71       176      8148
    {'Male'  }    false       69       163      9058
    {'Female'}    false       64       131      1270
    {'Female'}    false       67       133      9134
    {'Female'}    false       64       119      6324

Все переменные, назначенные таблице, должны иметь одинаковое количество строк.

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

summary(T)
Variables:

    Gender: 100x1 cell array of character vectors

    Smoker: 100x1 logical

        Values:

            True        34   
            False       66   

    Height: 100x1 double

        Values:

            Min          60   
            Median       67   
            Max          72   

    Weight: 100x1 double

        Values:

            Min          111  
            Median     142.5  
            Max          202  

    ID: 100x1 double

        Values:

            Min           120 
            Median     5485.5 
            Max          9706 

Возвращает размер таблицы.

size(T)
ans = 1×2

   100     5

T содержит 100 строк и 5 переменных.

Создание новой таблицы меньшего размера, содержащей первые пять строк T и отобразить его. Для задания строк и переменных можно использовать числовое индексирование в скобках. Этот метод аналогичен индексированию в числовые массивы для создания субчипов. Tnew является таблицей 5 на 5.

Tnew = T(1:5,:)
Tnew=5×5 table
      Gender      Smoker    Height    Weight     ID 
    __________    ______    ______    ______    ____

    {'Male'  }    true        71       176      8148
    {'Male'  }    false       69       163      9058
    {'Female'}    false       64       131      1270
    {'Female'}    false       67       133      9134
    {'Female'}    false       64       119      6324

Создать таблицу меньшего размера, содержащую все строки Tnew и переменные от второго до последнего. Используйте end ключевое слово, указывающее последнюю переменную или последнюю строку таблицы. Tnew является таблицей 5 на 4.

Tnew = Tnew(:,2:end)
Tnew=5×4 table
    Smoker    Height    Weight     ID 
    ______    ______    ______    ____

    true        71       176      8148
    false       69       163      9058
    false       64       131      1270
    false       67       133      9134
    false       64       119      6324

Доступ к данным по именам строк и переменных

Добавить имена строк в T и индексировать в таблицу с использованием имен строк и переменных вместо числовых индексов. Добавьте имена строк, назначив LastName переменной рабочей области RowNames имущество T.

T.Properties.RowNames = LastName;

Отображение первых пяти строк T с именами строк.

T(1:5,:)
ans=5×5 table
                  Gender      Smoker    Height    Weight     ID 
                __________    ______    ______    ______    ____

    Smith       {'Male'  }    true        71       176      8148
    Johnson     {'Male'  }    false       69       163      9058
    Williams    {'Female'}    false       64       131      1270
    Jones       {'Female'}    false       67       133      9134
    Brown       {'Female'}    false       64       119      6324

Возврат размера T. Размер не изменяется, поскольку имена строк и переменных не включаются при вычислении размера таблицы.

size(T)
ans = 1×2

   100     5

Выберите все данные для пациентов с фамилиями 'Smith' и 'Johnson'. В этом случае проще использовать имена строк, чем числовые индексы. Tnew является таблицей 2 на 5.

Tnew = T({'Smith','Johnson'},:)
Tnew=2×5 table
                Gender     Smoker    Height    Weight     ID 
               ________    ______    ______    ______    ____

    Smith      {'Male'}    true        71       176      8148
    Johnson    {'Male'}    false       69       163      9058

Выберите рост и вес пациента 'Johnson' индексированием по именам переменных. Tnew является таблицей 1 на 2.

Tnew = T('Johnson',{'Height','Weight'})
Tnew=1×2 table
               Height    Weight
               ______    ______

    Johnson      69       163  

Доступ к переменным таблицы можно получить с помощью синтаксиса точек, как в разделе T.Heightили с помощью именованной индексации, как в T(:,'Height').

Вычислить и добавить результат как табличную переменную

Можно получить доступ к содержимому переменных таблицы, а затем выполнить вычисления по ним с помощью функций MATLAB ®. Рассчитать индекс массы тела (BMI) на основе данных в существующих переменных таблицы и добавьте их в качестве новой переменной. Постройте график взаимосвязи BMI к статусу пациента как курильщика или некурящего. Добавьте показания артериального давления в таблицу и постройте график отношения артериального давления к ИМТ.

Вычислить BMI используя переменные таблицы, Weight и Height. Вы можете извлечь Weight и Height для расчета при удобном ведении Weight, Height, и BMI в таблице с остальными данными пациента. Отображение первых пяти строк T.

T.BMI = (T.Weight*0.453592)./(T.Height*0.0254).^2;

T(1:5,:)
ans=5×6 table
                  Gender      Smoker    Height    Weight     ID      BMI  
                __________    ______    ______    ______    ____    ______

    Smith       {'Male'  }    true        71       176      8148    24.547
    Johnson     {'Male'  }    false       69       163      9058    24.071
    Williams    {'Female'}    false       64       131      1270    22.486
    Jones       {'Female'}    false       67       133      9134    20.831
    Brown       {'Female'}    false       64       119      6324    20.426

Заполните свойства переменных единиц измерения и описаний переменных для BMI. Метаданные можно добавить в любую переменную таблицы для дальнейшего описания данных, содержащихся в переменной.

T.Properties.VariableUnits{'BMI'} = 'kg/m^2';
T.Properties.VariableDescriptions{'BMI'} = 'Body Mass Index';

Создайте гистограмму, чтобы выяснить, существует ли связь между курением и индексом массы тела в этой группе пациентов. Можно индексировать в BMI с логическими значениями из Smoker переменная таблицы, поскольку каждая строка содержит BMI и Smoker значения для одного и того же пациента.

tf = (T.Smoker == false);
h1 = histogram(T.BMI(tf),'BinMethod','integers');
hold on
tf = (T.Smoker == true);
h2 = histogram(T.BMI(tf),'BinMethod','integers');
xlabel('BMI (kg/m^2)');
ylabel('Number of Patients');
legend('Nonsmokers','Smokers');
title('BMI Distributions for Smokers and Nonsmokers');
hold off

Figure contains an axes. The axes with title BMI Distributions for Smokers and Nonsmokers contains 2 objects of type histogram. These objects represent Nonsmokers, Smokers.

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

T.Systolic = Systolic;
T.Diastolic = Diastolic;

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

tf = (T.BMI <= 25);
h1 = histogram(T.Diastolic(tf),'BinMethod','integers');
hold on
tf = (T.BMI > 25);
h2 = histogram(T.Diastolic(tf),'BinMethod','integers');
xlabel('Diastolic Reading (mm Hg)');
ylabel('Number of Patients');
legend('BMI <= 25','BMI > 25');
title('Diastolic Readings for Low and High BMI');
hold off

Figure contains an axes. The axes with title Diastolic Readings for Low and High BMI contains 2 objects of type histogram. These objects represent BMI <= 25, BMI > 25.

Переупорядочить переменные таблицы и строки для вывода

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

Отсортируйте таблицу по именам строк так, чтобы пациенты перечислялись в алфавитном порядке.

T = sortrows(T,'RowNames');

T(1:5,:)
ans=5×8 table
                   Gender      Smoker    Height    Weight     ID      BMI      Systolic    Diastolic
                 __________    ______    ______    ______    ____    ______    ________    _________

    Adams        {'Female'}    false       66       137      8235    22.112      127          83    
    Alexander    {'Male'  }    true        69       171      1300    25.252      128          99    
    Allen        {'Female'}    false       63       143      7432    25.331      113          80    
    Anderson     {'Female'}    false       68       128      1577    19.462      114          77    
    Bailey       {'Female'}    false       68       130      2239    19.766      113          81    

Создать BloodPressure переменная для поддержания показаний артериального давления в переменной таблицы 100 на 2.

T.BloodPressure = [T.Systolic T.Diastolic];

Удалить Systolic и Diastolic из таблицы, так как они избыточны.

T.Systolic = [];
T.Diastolic = [];

T(1:5,:)
ans=5×7 table
                   Gender      Smoker    Height    Weight     ID      BMI      BloodPressure
                 __________    ______    ______    ______    ____    ______    _____________

    Adams        {'Female'}    false       66       137      8235    22.112     127     83  
    Alexander    {'Male'  }    true        69       171      1300    25.252     128     99  
    Allen        {'Female'}    false       63       143      7432    25.331     113     80  
    Anderson     {'Female'}    false       68       128      1577    19.462     114     77  
    Bailey       {'Female'}    false       68       130      2239    19.766     113     81  

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

T = T(:,[5 1:4 6 7]);

T(1:5,:)
ans=5×7 table
                  ID       Gender      Smoker    Height    Weight     BMI      BloodPressure
                 ____    __________    ______    ______    ______    ______    _____________

    Adams        8235    {'Female'}    false       66       137      22.112     127     83  
    Alexander    1300    {'Male'  }    true        69       171      25.252     128     99  
    Allen        7432    {'Female'}    false       63       143      25.331     113     80  
    Anderson     1577    {'Female'}    false       68       128      19.462     114     77  
    Bailey       2239    {'Female'}    false       68       130      19.766     113     81  

Можно также переупорядочить переменные таблицы по имени. Изменение порядка переменных таблицы таким образом, чтобы Gender является последним:

  1. Найти 'Gender' в VariableNames свойства таблицы.

  2. Двинуться 'Gender' до конца массива ячеек с именами переменных.

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

varnames = T.Properties.VariableNames;
others = ~strcmp('Gender',varnames);
varnames = [varnames(others) 'Gender'];
T = T(:,varnames);

Отображение первых пяти строк переупорядоченной таблицы.

T(1:5,:)
ans=5×7 table
                  ID     Smoker    Height    Weight     BMI      BloodPressure      Gender  
                 ____    ______    ______    ______    ______    _____________    __________

    Adams        8235    false       66       137      22.112     127     83      {'Female'}
    Alexander    1300    true        69       171      25.252     128     99      {'Male'  }
    Allen        7432    false       63       143      25.331     113     80      {'Female'}
    Anderson     1577    false       68       128      19.462     114     77      {'Female'}
    Bailey       2239    false       68       130      19.766     113     81      {'Female'}

Запись таблицы в файл

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

Написать T в файл с writetable функция.

writetable(T,'allPatientsBMI.txt');

Вы можете использовать readtable для считывания данных в allPatientsBMI.txt в новую таблицу.

Создайте вложенную таблицу и запишите ее в отдельный файл. Удалите строки, содержащие данные о пациентах, которые являются курильщиками. Затем удалите Smoker переменная. nonsmokers содержит данные только для пациентов, которые не являются курильщиками.

nonsmokers = T;
toDelete = (nonsmokers.Smoker == true);
nonsmokers(toDelete,:) = [];
nonsmokers.Smoker = [];

Написать nonsmokers в файл.

writetable(nonsmokers,'nonsmokersBMI.txt');

См. также

| | | | | | | |

Связанные примеры

Подробнее