Тип данных dataset может быть удален в будущем релизе. Чтобы работать с гетерогенными данными, используйте тип данных MATLAB® table вместо этого. Смотрите MATLAB документация table для получения дополнительной информации.
Создайте массив набора данных из текстового файла с разделителями табуляции
Создайте массив набора данных из разделенного от запятой текстового файла
Этот пример показывает, как создать массив набора данных из содержимого текстового файла с разделителями табуляции.
Создайте массив набора данных с помощью настроек по умолчанию.
Импортируйте текстовый файл hospitalSmall.txt как массив набора данных с помощью настроек по умолчанию.
ds = dataset('File',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.txt'))
ds =
name sex age wgt smoke
'SMITH' 'm' 38 176 1
'JOHNSON' 'm' 43 163 0
'WILLIAMS' 'f' 38 131 0
'JONES' 'f' 40 133 0
'BROWN' 'f' 49 119 0
'DAVIS' 'f' 46 142 0
'MILLER' 'f' 33 142 1
'WILSON' 'm' 40 180 0
'MOORE' 'm' 28 183 0
'TAYLOR' 'f' 31 132 0
'ANDERSON' 'f' 45 128 0
'THOMAS' 'f' 42 137 0
'JACKSON' 'm' 25 174 0
'WHITE' 'm' 39 202 1 По умолчанию dataset использует первую строку текстового файла для имен переменных. Если первая строка не содержит имена переменных, можно задать дополнительный аргумент пары "имя-значение" 'ReadVarNames',false, чтобы изменить поведение по умолчанию.
Массив набора данных содержит неоднородные переменные. Переменные id, name и sex являются массивами ячеек из символьных векторов, и другие переменные являются числовыми.
Обобщите массив набора данных.
Вы видите тип данных и другую описательную статистику для каждой переменной при помощи summary, чтобы обобщить массив набора данных.
summary(ds)
name: [14x1 cell array of character vectors]
sex: [14x1 cell array of character vectors]
age: [14x1 double]
min 1st quartile median 3rd quartile max
25 33 39.5 43 49
wgt: [14x1 double]
min 1st quartile median 3rd quartile max
119 132 142 176 202
smoke: [14x1 double]
min 1st quartile median 3rd quartile max
0 0 0 0 1 Импортируйте имена наблюдения.
Импортируйте текстовый файл снова, на этот раз указав, что первый столбец содержит имена наблюдения.
ds = dataset('File',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.txt'),'ReadObsNames',true)
ds =
sex age wgt smoke
SMITH 'm' 38 176 1
JOHNSON 'm' 43 163 0
WILLIAMS 'f' 38 131 0
JONES 'f' 40 133 0
BROWN 'f' 49 119 0
DAVIS 'f' 46 142 0
MILLER 'f' 33 142 1
WILSON 'm' 40 180 0
MOORE 'm' 28 183 0
TAYLOR 'f' 31 132 0
ANDERSON 'f' 45 128 0
THOMAS 'f' 42 137 0
JACKSON 'm' 25 174 0
WHITE 'm' 39 202 1 Элементы первого столбца в текстовом файле, фамилиях, являются теперь именами наблюдения. Имена наблюдения и имена строки являются свойствами массива набора данных. Можно всегда добавлять или менять имена наблюдения существующего массива набора данных путем изменения свойства ObsNames.
Измените свойства массива набора данных.
По умолчанию свойство DimNames массива набора данных имеет name как дескриптор наблюдения (строка) размерность. dataset получил это имя от первой строки первого столбца в текстовом файле.
Измените первый элемент DimNames к LastName.
ds.Properties.DimNames{1} = 'LastName';
ds.Propertiesans =
Description: ''
VarDescription: {}
Units: {}
DimNames: {'LastName' 'Variables'}
UserData: []
ObsNames: {14x1 cell}
VarNames: {'sex' 'age' 'wgt' 'smoke'}Индексируйте в массив набора данных.
Можно использовать имена наблюдения, чтобы индексировать в массив набора данных. Например, возвратите данные для пациента с фамилией BROWN.
ds('BROWN',:)ans =
sex age wgt smoke
BROWN 'f' 49 119 0 Обратите внимание на то, что имена наблюдения должны быть уникальными.
Этот пример показывает, как создать массив набора данных из содержимого разделенного от запятой текстового файла.
Создайте массив набора данных.
Импортируйте файл hospitalSmall.csv как массив набора данных, задав разграниченный запятой формат.
ds = dataset('File',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.csv'),'Delimiter',',')
ds =
id name sex age wgt smoke
'YPL-320' 'SMITH' 'm' 38 176 1
'GLI-532' 'JOHNSON' 'm' 43 163 0
'PNI-258' 'WILLIAMS' 'f' 38 131 0
'MIJ-579' 'JONES' 'f' 40 133 0
'XLK-030' 'BROWN' 'f' 49 119 0
'TFP-518' 'DAVIS' 'f' 46 142 0
'LPD-746' 'MILLER' 'f' 33 142 1
'ATA-945' 'WILSON' 'm' 40 180 0
'VNL-702' 'MOORE' 'm' 28 183 0
'LQW-768' 'TAYLOR' 'f' 31 132 0
'QFY-472' 'ANDERSON' 'f' 45 128 0
'UJG-627' 'THOMAS' 'f' 42 137 0
'XUE-826' 'JACKSON' 'm' 25 174 0
'TRW-072' 'WHITE' 'm' 39 202 1 По умолчанию dataset использует первую строку в текстовом файле как имена переменных.
Добавьте имена наблюдения.
Используйте уникальные идентификаторы в переменной id как имена наблюдения. Затем удалите переменную id из массива набора данных.
ds.Properties.ObsNames = ds.id; ds.id = []
ds =
name sex age wgt smoke
YPL-320 'SMITH' 'm' 38 176 1
GLI-532 'JOHNSON' 'm' 43 163 0
PNI-258 'WILLIAMS' 'f' 38 131 0
MIJ-579 'JONES' 'f' 40 133 0
XLK-030 'BROWN' 'f' 49 119 0
TFP-518 'DAVIS' 'f' 46 142 0
LPD-746 'MILLER' 'f' 33 142 1
ATA-945 'WILSON' 'm' 40 180 0
VNL-702 'MOORE' 'm' 28 183 0
LQW-768 'TAYLOR' 'f' 31 132 0
QFY-472 'ANDERSON' 'f' 45 128 0
UJG-627 'THOMAS' 'f' 42 137 0
XUE-826 'JACKSON' 'm' 25 174 0
TRW-072 'WHITE' 'm' 39 202 1 Удалите наблюдения.
Удалите любых пациентов с фамилией BROWN. Можно использовать strcmp, чтобы совпадать с 'BROWN' элементам переменного, содержащего фамилии, name.
toDelete = strcmp(ds.name,'BROWN');
ds(toDelete,:) = []ds =
name sex age wgt smoke
YPL-320 'SMITH' 'm' 38 176 1
GLI-532 'JOHNSON' 'm' 43 163 0
PNI-258 'WILLIAMS' 'f' 38 131 0
MIJ-579 'JONES' 'f' 40 133 0
TFP-518 'DAVIS' 'f' 46 142 0
LPD-746 'MILLER' 'f' 33 142 1
ATA-945 'WILSON' 'm' 40 180 0
VNL-702 'MOORE' 'm' 28 183 0
LQW-768 'TAYLOR' 'f' 31 132 0
QFY-472 'ANDERSON' 'f' 45 128 0
UJG-627 'THOMAS' 'f' 42 137 0
XUE-826 'JACKSON' 'm' 25 174 0
TRW-072 'WHITE' 'm' 39 202 1 Один пациент, имеющий фамилию BROWN, удален из массива набора данных.
Возвратите размер массива набора данных.
Массив теперь имеет 13 наблюдений.
size(ds)
ans =
13 5Обратите внимание на то, что соответствие строки и столбца переменной и именам наблюдения, соответственно, не включено в размер массива dataset.
Этот пример показывает, как создать массив набора данных из содержимого файла электронной таблицы Excel®.
Создайте массив набора данных.
Импортируйте данные из первого рабочего листа в файле hospitalSmall.xlsx, указав, что файл данных является электронной таблицей Excel.
ds = dataset('XLSFile',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.xlsx'))
ds =
id name sex age wgt smoke
'YPL-320' 'SMITH' 'm' 38 176 1
'GLI-532' 'JOHNSON' 'm' 43 163 0
'PNI-258' 'WILLIAMS' 'f' 38 131 0
'MIJ-579' 'JONES' 'f' 40 133 0
'XLK-030' 'BROWN' 'f' 49 119 0
'TFP-518' 'DAVIS' 'f' 46 142 0
'LPD-746' 'MILLER' 'f' 33 142 1
'ATA-945' 'WILSON' 'm' 40 180 0
'VNL-702' 'MOORE' 'm' 28 183 0
'LQW-768' 'TAYLOR' 'f' 31 132 0
'QFY-472' 'ANDERSON' 'f' 45 128 0
'UJG-627' 'THOMAS' 'f' 42 137 0
'XUE-826' 'JACKSON' 'm' 25 174 0
'TRW-072' 'WHITE' 'm' 39 202 1 По умолчанию dataset создает имена переменных с помощью содержимого первой строки в электронной таблице.
Задайте который рабочий лист импортировать.
Импортируйте данные из второго рабочего листа в новый массив набора данных.
ds2 = dataset('XLSFile',fullfile(matlabroot,'help/toolbox/stats/examples','hospitalSmall.xlsx'),'Sheet',2)
ds2 =
id name sex age wgt smoke
'TRW-072' 'WHITE' 'm' 39 202 1
'ELG-976' 'HARRIS' 'f' 36 129 0
'KOQ-996' 'MARTIN' 'm' 48 181 1
'YUZ-646' 'THOMPSON' 'm' 32 191 1
'XBR-291' 'GARCIA' 'f' 27 131 1
'KPW-846' 'MARTINEZ' 'm' 37 179 0
'XBA-581' 'ROBINSON' 'm' 50 172 0
'BKD-785' 'CLARK' 'f' 48 133 0