Этот пример показывает, как составить таблицу от переменных рабочей области, работать с табличными данными и таблицами записи к файлам для дальнейшего использования. table
является типом данных для сбора гетерогенных данных и свойств метаданных, таких как имена переменных, имена строки, описания и переменные модули, в одном контейнере.
Таблицы подходят для ориентированных на столбец или табличных данных, которые часто хранимы как столбцы в текстовом файле или в электронной таблице. Каждая переменная в таблице может иметь различный тип данных, но должна иметь одинаковое число строк. Однако переменные в таблице не ограничиваются вектор-столбцами. Например, табличная переменная может содержать матрицу с несколькими столбцами, пока она имеет одинаковое число строк как другие табличные переменные. Типичное использование для таблицы должно хранить экспериментальные данные, где строки представляют различные наблюдения, и столбцы представляют различные измеренные переменные.
Таблицы являются удобными контейнерами для сбора и организации связанных переменных данных и для просмотра и суммирования данных. Например, можно извлечь переменные, чтобы выполнить вычисления и удобно добавить результаты как новые табличные переменные. Когда вы закончите свои вычисления, запишите таблицу в файл, чтобы сохранить ваши результаты.
Составьте таблицу от переменных рабочей области и просмотрите ее. Также используйте Import Tool или функцию readtable
, чтобы составить таблицу из электронной таблицы или текстового файла. Когда вы импортируете данные из файла с помощью этих функций, каждый столбец становится табличной переменной.
Загрузите выборочные данные для 100 пациентов от MAT-файла patients
до переменных рабочей области.
load patients
whos
Name Size Bytes Class Attributes Age 100x1 800 double Diastolic 100x1 800 double Gender 100x1 12212 cell Height 100x1 800 double LastName 100x1 12416 cell Location 100x1 15008 cell SelfAssessedHealthStatus 100x1 12340 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.
Вычислите 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
Добавьте показания кровяного давления для пациентов от переменных 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
Чтобы подготовить таблицу к выводу, переупорядочьте строки таблицы по наименованию и табличные переменные положением или именем. Отобразите итоговое расположение таблицы.
Сортировка таблицы строкой называет так, чтобы пациенты были перечислены в алфавитном порядке.
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
был последним:
Найдите 'Gender'
в свойстве VariableNames
таблицы.
Переместите 'Gender'
в конец массива ячеек имен переменных.
Используйте массив ячеек имен, чтобы переупорядочить табличные переменные.
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');
Инструмент для импорта | array2table
| cell2table
| readtable
| sortrows
| struct2table
| summary
| table
| writetable