В этом примере показано, как создать категориальный массив. categorical
является типом данных для хранения данных со значениями из конечного набора дискретных категорий. Эти категории могут иметь естественный порядок, но он не требуется. Категориальный массив обеспечивает эффективное хранение и удобную манипуляцию данными, а также сохраняет значимые имена для значений. Категориальные массивы часто используются в таблице для определения групп строк.
По умолчанию категориальные массивы содержат категории, которые не имеют математического упорядоченного расположения. Для примера - дискретный набор категорий домашних животных {'dog' 'cat' 'bird'}
не имеет значимого математического упорядоченного расположения, поэтому MATLAB ® использует алфавитное упорядоченное расположение {'bird' 'cat' 'dog'}
. Порядковые категориальные массивы содержат категории, которые имеют значимое математическое упорядоченное расположение. Для примера - дискретный набор категорий размеров {'small', 'medium', 'large'}
имеет математическое упорядоченное расположение small < medium < large
.
Когда вы создаете категориальные массивы из массивов ячеек из векторов символов или строковых массивов, ведущие и конечные пространства удаляются. Например, если вы задаете текст {'cat' '' dog '} как категории, то при преобразовании их в категории они становятся {' cat '' dog '}.
Можно использовать categorical
функция для создания категориального массива из числового массива, логического массива, строковых массивов, массива ячеек из векторов символов или существующего категориального массива.
Создайте массив ячеек 1 на 11 из векторов символов, содержащий имена состояний из Новой Англии.
state = ["MA","ME","CT","VT","ME","NH","VT","MA","NH","CT","RI"];
Преобразуйте массив ячеек, state
, в категориальный массив, который не имеет математического порядка.
state = categorical(state)
state = 1x11 categorical
Columns 1 through 9
MA ME CT VT ME NH VT MA NH
Columns 10 through 11
CT RI
class(state)
ans = 'categorical'
Перечислите дискретные категории в переменной state
.
categories(state)
ans = 6x1 cell
{'CT'}
{'MA'}
{'ME'}
{'NH'}
{'RI'}
{'VT'}
Категории перечислены в алфавитном порядке.
Создайте массив ячеек 1 на 8 из векторов символов, содержащий размеры восьми объектов.
AllSizes = ["medium","large","small","small","medium",... "large","medium","small"];
Массив ячеек, AllSizes
, имеет три различных значения: 'large'
, 'medium'
, и 'small'
. С массивом ячеек из векторов символов нет удобного способа указать, что small < medium < large
.
Преобразуйте массив ячеек, AllSizes
, в порядковый категориальный массив. Использование valueset
для задания значений small
, medium
, и large
, которые определяют категории. Для порядкового категориального массива первая заданная категория является наименьшей, а последняя - самой большой.
valueset = ["small","medium","large"]; sizeOrd = categorical(AllSizes,valueset,'Ordinal',true)
sizeOrd = 1x8 categorical
Columns 1 through 6
medium large small small medium large
Columns 7 through 8
medium small
class(sizeOrd)
ans = 'categorical'
Порядок значений в категориальном массиве, sizeOrd
, остается неизменным.
Перечислите дискретные категории в категориальной переменной, sizeOrd
.
categories(sizeOrd)
ans = 3x1 cell
{'small' }
{'medium'}
{'large' }
Категории перечислены в указанном порядке, чтобы соответствовать математическому упорядоченному расположению small < medium < large
.
Создайте вектор из 100 случайных чисел между нулем и 50.
x = rand(100,1)*50;
Используйте discretize
функция для создания категориального массива путем раскладывания значений x
. Поместите все значения от нуля до 15 в первом интервале, все значения от 15 до 35 во втором интервале и все значения от 35 до 50 в третьем интервале. Каждый интервал включает левую конечную точку, но не включает правую конечную точку.
catnames = ["small","medium","large"]; binnedData = discretize(x,[0 15 35 50],'categorical',catnames);
binnedData
является порядковым категориальным массивом 100 на 1 с тремя категориями, таким что small < medium < large
.
Используйте summary
функция для печати количества элементов в каждой категории.
summary(binnedData)
small 30 medium 35 large 35
Начиная с R2016b, можно создавать строковые массивы с string
и преобразуйте их в категориальный массив.
Создайте строковые массивы, который содержит имена планет.
str = ["Earth","Jupiter","Neptune","Jupiter","Mars","Earth"]
str = 1x6 string
"Earth" "Jupiter" "Neptune" "Jupiter" "Mars" "Earth"
Преобразование str
в категориальный массив.
planets = categorical(str)
planets = 1x6 categorical
Earth Jupiter Neptune Jupiter Mars Earth
Добавьте отсутствующие элементы к str
и преобразуйте его в категориальный массив. Где str
имеет отсутствующие значения, planets
имеет неопределенные значения.
str(8) = "Mars"
str = 1x8 string
Columns 1 through 6
"Earth" "Jupiter" "Neptune" "Jupiter" "Mars" "Earth"
Columns 7 through 8
<missing> "Mars"
planets = categorical(str)
planets = 1x8 categorical
Columns 1 through 6
Earth Jupiter Neptune Jupiter Mars Earth
Columns 7 through 8
<undefined> Mars
categorical
| categories
| discretize
| summary