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

В этом примере показано, как создать таблицу из переменных рабочей области, работать с данными таблицы и записать таблицы в файлы для дальнейшего использования. 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');

См. также

| | | | | | | |

Похожие примеры

Подробнее о