discretize

Сгруппировать данные в интервалы или категории

Описание

пример

Y = discretize(X,edges) возвращает индексы интервалов, которые содержат элементы X. jинтервал th содержит элемент X(i) если edges(j) <= X(i) < edges(j+1) для 1 <= j < N, где N количество интервалов и length(edges) = N+1. Последний интервал содержит оба ребра, таким образом что edges(N) <= X(i) <= edges(N+1).

пример

[Y,E] = discretize(X,N) делит данные на X в N интервалы универсальной ширины, и также возвращают ребра интервала E.

пример

[Y,E] = discretize(X,dur), где X datetime или массив длительности, делит X в универсальные интервалы dur отрезок времени. dur может быть скалярный duration или calendarDuration, или модуль времени. Например, [Y,E] = discretize(X,'hour') делит X в интервалы с универсальной длительностью 1 часа.

пример

[___] = discretize(___,values) возвращает соответствующий элемент в values вместо номера интервала, с помощью любой из предыдущих комбинаций аргументов ввода или вывода. Например, если X(1) находится в интервале 5, затем Y(1) values(5) вместо 5Значения должен быть вектор с длиной, равной количеству интервалов.

пример

[___] = discretize(___,'categorical') создает категориальный массив, где каждый интервал является категорией. В большинстве случаев названия категории по умолчанию имеют форму “[A,B)” (или “[A,B]” для последнего интервала), где A и B последовательные ребра интервала. Если вы задаете dur как вектор символов, затем названия категории по умолчанию могут иметь специальные форматы. Смотрите Y для списка форматов отображения.

пример

[___] = discretize(___,'categorical',displayFormat), для datetime или входных параметров длительности массивов, использует заданный datetime или формат отображения длительности в названиях категории выхода.

пример

[___] = discretize(___,'categorical',categoryNames) также называет категории в Y с помощью массива ячеек из символьных векторов, categoryNames. Длина categoryNames должно быть равно количеству интервалов.

пример

[___] = discretize(___,'IncludedEdge',side), где side 'left' или 'right', задает, включает ли каждый интервал свое правильное или левое ребро интервала. Например, если side 'right', затем каждый интервал включает правильное ребро интервала, за исключением первого интервала, который включает оба ребра. В этом случае, jинтервал th содержит элемент X(i) если edges(j) < X(i) <= edges(j+1), где 1 < j <= N и N количество интервалов. Первый интервал включает левый край, таким образом, что это содержит edges(1) <= X(i) <= edges(2). Значение по умолчанию для side 'left'.

Примеры

свернуть все

Используйте discretize к числовым значениям группы в дискретные интервалы. edges задает пять ребер интервала, таким образом, существует четыре интервала.

data = [1 1 2 3 6 5 8 10 4 4]
data = 1×10

     1     1     2     3     6     5     8    10     4     4

edges = 2:2:10
edges = 1×5

     2     4     6     8    10

Y = discretize(data,edges)
Y = 1×10

   NaN   NaN     1     1     3     2     4     4     2     2

Y указывает, какому интервалу каждый элемент данных принадлежит. Начиная со значения 1 выходит за пределы области значений интервалов, Y содержит NaN значения для тех элементов.

Группа случайные данные в три интервала. Задайте второй выход, чтобы возвратить ребра интервала, вычисленные discretize.

X = randn(10,1);
[Y,E] = discretize(X,3)
Y = 10×1

     2
     2
     1
     2
     2
     1
     1
     2
     3
     2

E = 1×4

    -3     0     3     6

Создайте вектор datetime 10 на 1 со случайными датами в году 2016. Затем сгруппируйте значения datetime к месяцу и возвратите результат как категориальный массив.

X = datetime(2016,1,randi(365,10,1))
X = 10x1 datetime array
   24-Oct-2016
   26-Nov-2016
   16-Feb-2016
   29-Nov-2016
   18-Aug-2016
   05-Feb-2016
   11-Apr-2016
   18-Jul-2016
   15-Dec-2016
   18-Dec-2016

Y = discretize(X,'month','categorical')
Y = 10x1 categorical array
     Oct-2016 
     Nov-2016 
     Feb-2016 
     Nov-2016 
     Aug-2016 
     Feb-2016 
     Apr-2016 
     Jul-2016 
     Dec-2016 
     Dec-2016 

Значения длительности группы к часу и возвращают результат во множестве форматов отображения.

Группа некоторые случайные значения длительности к часу и возвращает результаты как категориальный массив.

X = hours(abs(randn(1,10)))'
X = 10x1 duration array
   0.53767 hr
    1.8339 hr
    2.2588 hr
   0.86217 hr
   0.31877 hr
    1.3077 hr
   0.43359 hr
   0.34262 hr
    3.5784 hr
    2.7694 hr

Y = discretize(X,'hour','categorical')
Y = 10x1 categorical array
     [0 hr, 1 hr) 
     [1 hr, 2 hr) 
     [2 hr, 3 hr) 
     [0 hr, 1 hr) 
     [0 hr, 1 hr) 
     [1 hr, 2 hr) 
     [0 hr, 1 hr) 
     [0 hr, 1 hr) 
     [3 hr, 4 hr] 
     [2 hr, 3 hr) 

Измените отображение результатов быть многими минутами.

Y = discretize(X,'hour','categorical','m')
Y = 10x1 categorical array
     [0 min, 60 min) 
     [60 min, 120 min) 
     [120 min, 180 min) 
     [0 min, 60 min) 
     [0 min, 60 min) 
     [60 min, 120 min) 
     [0 min, 60 min) 
     [0 min, 60 min) 
     [180 min, 240 min] 
     [120 min, 180 min) 

Измените формат снова, чтобы отобразиться как много часов, минут и секунд.

Y = discretize(X,'hour','categorical','hh:mm:ss')
Y = 10x1 categorical array
     [00:00:00, 01:00:00) 
     [01:00:00, 02:00:00) 
     [02:00:00, 03:00:00) 
     [00:00:00, 01:00:00) 
     [00:00:00, 01:00:00) 
     [01:00:00, 02:00:00) 
     [00:00:00, 01:00:00) 
     [00:00:00, 01:00:00) 
     [03:00:00, 04:00:00] 
     [02:00:00, 03:00:00) 

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

X = randi(100,1,10);
edges = 0:25:100;
values = edges(2:end);
Y = discretize(X,edges,values)
Y = 1×10

   100   100    25   100    75    25    50    75   100   100

Используйте 'IncludedEdge' введите, чтобы указать, что каждый интервал включает свое правильное ребро интервала. Первый интервал включает оба ребра. Сравните результат с включением по умолчанию левых ребер интервала.

X = 1:2:11;
edges = [1 3 4 7 10 11];
Y = discretize(X,edges,'IncludedEdge','right')
Y = 1×6

     1     1     3     3     4     5

Z = discretize(X,edges)
Z = 1×6

     1     2     3     4     4     5

Числовые данные группы в категориальный массив. Используйте результат подтвердить объем данных, который находится в пределах 1 стандартного отклонения среднего значения.

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

X = randn(1000,1);
edges = std(X)*(-3:3);
Y = discretize(X,edges, 'categorical', ...
    {'-3sigma', '-2sigma', '-sigma', 'sigma', '2sigma', '3sigma'});

Y содержит неопределенные категориальные значения для элементов в X это более далеко, чем 3 стандартных отклонения от среднего значения.

Предварительно просмотрите значения в Y.

Y(1:15)
ans = 15x1 categorical array
     sigma 
     2sigma 
     -3sigma 
     sigma 
     sigma 
     -2sigma 
     -sigma 
     sigma 
     <undefined> 
     3sigma 
     -2sigma 
     <undefined> 
     sigma 
     -sigma 
     sigma 

Подтвердите, что приблизительно 68% данных находятся в пределах одного стандартного отклонения среднего значения.

nnz(Y=='-sigma' | Y=='sigma')/numel(Y)
ans = 0.6910

Входные параметры

свернуть все

Входной массив, заданный как векторный, матричный или многомерный массив. X содержит данные, которые вы хотите распределить в интервалы.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

Ребра интервала, заданные как монотонно увеличивающийся числовой вектор. Последовательные элементы в edges сформируйте дискретные интервалы, который discretize использование, чтобы разделить данные в X. По умолчанию каждый интервал включает левое ребро интервала, за исключением последнего интервала, который включает оба ребра интервала.

edges должен иметь по крайней мере два элемента, начиная с edges(1) левый край первого интервала и edges(end) правый край последнего интервала.

Пример: Y = discretize([1 3 5],[0 2 4 6]) распределяет значения 1, 3, и 5 в три интервала, которые имеют ребра [0,2), [2,4), и [4,6].

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

Количество интервалов, заданных как скалярное целое число.

discretize делит данные на N интервалы универсальной ширины, выбирая ребра интервала, чтобы быть "хорошими" числами, которые перекрывают область значений данных. Самые большие и самые маленькие элементы в X обычно не падайте прямо на ребра интервала. Если данные неравномерно распределяются, то некоторые промежуточные интервалы могут быть пустыми. Однако первый и последний интервал всегда включает по крайней мере одну часть данных.

Пример: [Y,E] = discretize(X,5) распределяет данные в X в 5 интервалов с универсальной шириной.

Универсальная длительность интервала, заданная как скалярный duration или calendarDuration, или как одно из значений в таблице.

Если вы задаете dur, затем discretize может использовать максимум 65 536 интервалов (или 216). Если заданная длительность интервала требует большего количества интервалов, то discretize использует большую ширину интервала, соответствующую максимальному количеству интервалов.

ЗначениеРаботы с...Описание
'second'

Datetime или значения длительности

Каждый интервал составляет 1 секунду.

'minute'

Datetime или значения длительности

Каждый интервал составляет 1 минуту.

'hour'

Datetime или значения длительности

Каждый интервал составляет 1 час.

'day'

Datetime или значения длительности

  • Для входных параметров datetime каждый интервал составляет 1 календарный день. Это значение составляет сдвиги Летнего времени.

  • Для входных параметров длительности каждый интервал составляет 1 день фиксированной длины (24 часа).

'week'

Значения datetime

Каждый интервал составляет 1 календарную неделю.
'month'

Значения datetime

Каждый интервал составляет 1 календарный месяц.
'quarter'

Значения datetime

Каждый интервал составляет 1 календарный квартал.
'year'

Datetime или значения длительности

  • Для входных параметров datetime каждый интервал составляет 1 календарный год. Это значение считает в течение дней прыжка.

  • Для входных параметров длительности каждый интервал составляет 1 год фиксированной длины (365,2425 дней).

'decade'

Значения datetime

Каждый интервал составляет 1 десятилетие (10 календарных лет).
'century'

Значения datetime

Каждый интервал является 1-м веком (100 календарных лет).

Пример: [Y,E] = discretize(X,'hour') делит X в интервалы с универсальной длительностью 1 часа.

Типы данных: char | duration | calendarDuration

Значения интервала, заданные как вектор любого типа данных. values должен иметь ту же длину как количество интервалов, length(edges)-1. Элементы в values замените нормальный индекс интервала в выходе. Таким образом, если X(1) попадает в интервал 2, затем discretize возвращает Y(1) как values(2) вместо 2.

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

Пример: Y = discretize(randi(5,10,1),[1 1.5 3 5],diff([1 1.5 3 5])) возвращает ширины интервалов, а не индексы в пределах от 1 - 3.

Datetime и формат отображения длительности, заданный как вектор символов. displayFormat значение не изменяет значения в Y, только их отображение. Можно задать displayFormat использование любого допустимого формата отображения для datetime и массивов длительности. Для получения дополнительной информации о доступных параметрах, смотрите Формат отображения Даты и времени Набора.

Пример: discretize(X,'day','categorical','h') задает формат отображения для массива длительности.

Пример: discretize(X,'day','categorical','yyyy-MM-dd') задает формат отображения для массива datetime.

Типы данных: char

Названия категории категориального массива, заданные как массив ячеек из символьных векторов. categoryNames должен иметь длину, равную количеству интервалов.

Пример: Y = discretize(randi(5,10,1),[1 1.5 3 5],'categorical',{'A' 'B' 'C'}) распределяет данные в три категории, AB, и C.

Типы данных: cell

Ребра, чтобы включать в каждый интервал, заданный как одно из этих значений:

  • 'left' — Все интервалы включают левое ребро интервала, за исключением последнего интервала, который включает оба ребра. Это значение по умолчанию.

  • 'right' — Все интервалы включают правильное ребро интервала, за исключением первого интервала, который включает оба ребра.

Пример: Y = discretize(randi(11,10,1),1:2:11,'IncludedEdge','right') включает правильное ребро интервала в каждый интервал.

Выходные аргументы

свернуть все

Интервалы, возвращенные как числовой вектор, матрица, многомерный массив или порядковый категориальный массив. Y одного размера с X, и каждый элемент описывает размещение интервала для соответствующего элемента в X. Если values задан, затем тип данных Y совпадает с values. Элементы из области значений выражаются по-другому в зависимости от типа данных выхода:

  • Для числовых выходных параметров, Y содержит NaN значения для элементов из области значений в X (где X(i) < edges(1) или X(i) > edges(end)), или где X содержит NaN.

  • Если Y категориальный массив, затем он содержит неопределенные элементы для из области значений или NaN входные параметры.

  • Если values вектор целочисленного типа данных, затем Y содержит 0 для из области значений или NaN входные параметры.

Форматы названия категории по умолчанию в Y для синтаксиса discretize(X,dur,'categorical') :

Значение durФормат названия категории по умолчаниюПример формата
'second'

глобальный формат по умолчанию

28-Jan-2016 10:32:06

'minute'
'hour'
'day'

глобальный формат даты по умолчанию

28-Jan-2016

'week'

[global_default_date_format, global_default_date_format)

[24-Jan-2016, 30-Jan-2016)

'month'

'MMM-uuuu'

Jun-2016

'quarter'

'QQQ uuuu'

Q4 2015

'year'

'uuuu'

2016

'decade'

'[uuuu, uuuu)'

[2010, 2020)

'century'

Ребра интервала, возвращенные как вектор. Задайте этот выход, чтобы видеть ребра интервала что discretize вычисляет в случаях, куда вы явным образом не передаете в ребрах интервала.

Советы

  • Поведение discretize похоже на тот из histcounts функция. Используйте histcounts найти число элементов в каждом интервале. С другой стороны, используйте discretize найти, какой интервал каждый элемент принадлежит (не рассчитывая).

Расширенные возможности

Представленный в R2015a