Доступ к данным с помощью категориальных массивов

Выбор данных по категориям

Выбор данных на основе их значений часто полезен. Этот тип выбора данных может включать в себя создание логического вектора на основе значений в одной переменной, а затем использование этого логического вектора, чтобы выбрать подмножество значений в других переменных. Можно создать логический вектор для выбора данных путем нахождения значений в числовом массиве, которые попадают в определенную область значений. Кроме того, можно создать логический вектор, найдя определенные дискретные значения. При использовании категориальных массивов можно легко:

  • Выберите элементы из конкретных категорий. Для категориальных массивов используйте логические операторы == или ~= для выбора данных, входящих или не входящих в конкретную категорию. Чтобы выбрать данные в определенной группе категорий, используйте ismember функция.

    Для порядковых категориальных массивов используйте неравенства >, >=, <, или <= для поиска данных в категориях выше или ниже конкретной категории.

  • Удалите данные, относящиеся к определенной категории. Используйте логические операторы для включения или исключения данных из определенных категорий.

  • Найти элементы, не входящие в определенную категорию. Категориальные массивы указывают, какие элементы не относятся к определенной категории по <undefined>. Используйте isundefined функция для поиска наблюдений без заданного значения.

Общие способы доступа к данным с помощью категориальных массивов

В этом примере показано, как индексировать и искать с помощью категориальных массивов. Вы можете получить доступ к данным с помощью категориальных массивов, сохраненных в таблице подобным образом.

Загрузка выборочных данных

Загрузка выборочных данных собранной от 100 пациентов.

load patients
whos
  Name                            Size            Bytes  Class      Attributes

  Age                           100x1               800  double               
  Diastolic                     100x1               800  double               
  Gender                        100x1             11412  cell                 
  Height                        100x1               800  double               
  LastName                      100x1             11616  cell                 
  Location                      100x1             14208  cell                 
  SelfAssessedHealthStatus      100x1             11540  cell                 
  Smoker                        100x1               100  logical              
  Systolic                      100x1               800  double               
  Weight                        100x1               800  double               

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

Gender и Location содержат данные, которые относятся к категориям. Каждый массив ячеек содержит векторы символов, взятые из небольшого набора уникальных значений (что указывает на два пола и три местоположения соответственно). Преобразование Gender и Location в категориальные массивы.

Gender = categorical(Gender);
Location = categorical(Location);

Поиск представителей одной категории

Для категориальных массивов можно использовать логические операторы == и ~= для поиска данных, входящих или не входящих в конкретную категорию.

Определите, есть ли пациенты, наблюдаемые в месте, 'Rampart General Hospital'.

any(Location=='Rampart General Hospital')
ans = logical
   0

В больнице общего профиля Рампарт пациентов не наблюдается.

Поиск представителей группы категорий

Можно использовать ismember для поиска данных в определенной группе категорий. Создайте логический вектор для пациентов, наблюдаемых в County General Hospital или VA Hospital.

VA_CountyGenIndex = ...
    ismember(Location,{'County General Hospital','VA Hospital'});

VA_CountyGenIndex является логическим массивом 100 на 1, содержащим логические true (1) для каждого элемента в категориальном массиве Location является представителем категории County General Hospital или VA Hospital. Выход, VA_CountyGenIndex содержит 76 ненулевых элементов.

Используйте логический вектор, VA_CountyGenIndex для выбора LastName пациентов, наблюдаемых в любом из County General Hospital или VA Hospital.

VA_CountyGenPatients = LastName(VA_CountyGenIndex);

VA_CountyGenPatients является массивом ячеек 76 на 1 из векторов символов.

Выберите элементы конкретной категории для построения графика

Используйте summary функция для печати сводных данных, содержащей имена категорий и количество элементов в каждой категории.

summary(Location)
     County General Hospital        39 
     St. Mary's Medical Center      24 
     VA Hospital                    37 

Location представляет собой категориальный массив 100 на 1 с тремя категориями. County General Hospital происходит в 39 элементах, St. Mary s Medical Center в 24 элементах и VA Hospital в 37 элементах.

Используйте summary функция для печати сводных данных Gender.

summary(Gender)
     Female      53 
     Male        47 

Gender представляет собой категориальный массив 100 на 1 с двумя категориями. Female происходит в 53 элементах и Male происходит в 47 элементах.

Используйте логический оператор == для доступа к возрасту только женщин-пациентов. Затем постройте гистограмму этих данных.

figure()
histogram(Age(Gender=='Female'))
title('Age of Female Patients')

Figure contains an axes. The axes with title Age of Female Patients contains an object of type histogram.

histogram(Age(Gender=='Female')) строит графики возрастных данных для 53 пациентов женского пола.

Удаление данных из конкретной категории

Можно использовать логические операторы для включения или исключения данных из определенных категорий. Удалите всех пациентов, наблюдаемых в VA Hospital из переменных рабочей области, Age и Location.

Age = Age(Location~='VA Hospital');
Location = Location(Location~='VA Hospital');

Теперь, Age является числовым массивом 63 на 1 и Location представляет собой категориальный массив 63 на 1.

Перечислите категории Location, а также количество элементов в каждой категории.

summary(Location)
     County General Hospital        39 
     St. Mary's Medical Center      24 
     VA Hospital                     0 

Пациенты, наблюдаемые в VA Hospital удаляются из Location, но VA Hospital все еще является категорией.

Используйте removecats функция для удаления VA Hospital из категорий Location.

Location = removecats(Location,'VA Hospital');

Проверьте, что категория, VA Hospital, был удален.

categories(Location)
ans = 2x1 cell
    {'County General Hospital'  }
    {'St. Mary's Medical Center'}

Location представляет собой категориальный массив 63 на 1, который имеет две категории.

Удаление элемента

Можно удалить элементы путем индексации. Для примера можно удалить первый элемент Location путем выбора остальных элементов с Location(2:end). Однако более легким способом удаления элементов является использование [].

Location(1) = [];
summary(Location)
     County General Hospital        38 
     St. Mary's Medical Center      24 

Location представляет собой категориальный массив 62 на 1, который имеет две категории. Удаление первого элемента не влияет на другие элементы из той же категории и не удаляет саму категорию.

Проверяйте на неопределенные данные

Удалите категорию County General Hospital от Location.

Location = removecats(Location,'County General Hospital');

Отобразите первые восемь элементов категориального массива, Location.

Location(1:8)
ans = 8x1 categorical
     St. Mary's Medical Center 
     <undefined> 
     St. Mary's Medical Center 
     St. Mary's Medical Center 
     <undefined> 
     <undefined> 
     St. Mary's Medical Center 
     St. Mary's Medical Center 

После удаления категории County General Hospitalэлементы, которые ранее принадлежали к этой категории, больше не относятся к какой-либо категории, определенной для Location. Категориальные массивы обозначают эти элементы как undefined.

Используйте функцию isundefined найти наблюдения, которые не относятся ни к одной категории.

undefinedIndex = isundefined(Location);

undefinedIndex - категориальный массив 62 на 1, содержащий логические true (1) для всех неопределенных элементов в Location.

Задание неопределенных элементов

Используйте summary функция для печати количества неопределенных элементов в Location.

summary(Location)
     St. Mary's Medical Center      24 
     <undefined>                    38 

Первый элемент Location относится к категории, St. Mary's Medical Center. Установите первый элемент, который будет undefined чтобы он больше не относился ни к какой категории.

Location(1) = '<undefined>';
summary(Location)
     St. Mary's Medical Center      23 
     <undefined>                    39 

Можно сделать выбранные элементы undefined без удаления категории или изменения категорий других элементов. Установите элементы, которые будут undefined для указания элементов со значениями, которые неизвестны.

Предварительное выделение категориальных массивов с неопределенными элементами

Можно использовать неопределенные элементы для предварительного выделения размера категориального массива для повышения эффективности. Создайте категориальный массив, который имеет элементы только с известными местоположениями.

definedIndex = ~isundefined(Location);
newLocation = Location(definedIndex);
summary(newLocation)
     St. Mary's Medical Center      23 

Расширьте размер newLocation так что это категориальный массив 200 на 1. Установите последний новый элемент, который будет undefined. Все другие новые элементы также должны быть undefined. 23 оригинальных элемента сохраняют значения.

newLocation(200) = '<undefined>';
summary(newLocation)
     St. Mary's Medical Center       23 
     <undefined>                    177 

newLocation имеет место для значений, которые вы планируете хранить в массиве позже.

См. также

| | | | | |

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

Подробнее о