Тип данных 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.Properties
ans = 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