Создание категориальных массивов

В этом примере показано, как создать категориальный массив. 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 

См. также

| | |

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

Подробнее о