Main Content

discretize

데이터를 Bin이나 범주로 그룹화

설명

예제

Y = discretize(X,edges)X의 요소를 포함하는 Bin의 인덱스를 반환합니다. j번째 Bin은 1 <= j < N에 대해 edges(j) <= X(i) < edges(j+1)인 경우 요소 X(i)를 포함합니다. 여기서 N은 Bin의 개수이며 length(edges) = N+1입니다. 마지막 Bin은 양쪽 경계값을 모두 포함합니다. 즉, edges(N) <= X(i) <= edges(N+1)입니다.

예제

[Y,E] = discretize(X,N)X의 데이터를 균일한 너비의 N개 Bin으로 나누고, Bin 경계값 E도 반환합니다.

예제

[Y,E] = discretize(X,dur)X를 균일한 시간 길이인 Bin값, dur로 나눕니다. 여기서 X는 datetime형 배열 또는 duration형 배열입니다. dur은 스칼라 duration형, calendarDuration 또는 시간 단위일 수 있습니다. 예를 들어, [Y,E] = discretize(X,'hour')X를 1시간의 균일한 기간을 갖는 Bin으로 나눕니다.

예제

[___] = discretize(___,values)는 위에 열거된 입력 인수나 출력 인수 조합 중 하나를 사용하여 Bin의 개수 대신 values의 대응하는 요소를 반환합니다. 예를 들어, X(1)이 5번 Bin에 있는 경우 Y(1)5가 아니라 values(5)입니다. values는 Bin의 개수와 길이가 동일한 벡터여야 합니다.

예제

[___] = discretize(___,'categorical')은 각 Bin이 범주인 categorical형 배열을 만듭니다. 대부분의 경우, 디폴트 범주 이름의 형식은 "[A,B)"(또는 마지막 Bin의 경우 "[A,B]")이며, 여기서 AB는 연속된 Bin 경계값입니다. dur을 문자형 벡터로 지정하는 경우 디폴트 범주 이름은 특별한 형식을 가질 수 있습니다. 표시 형식 목록을 보려면 Y를 참조하십시오.

예제

[___] = discretize(___,'categorical',displayFormat)은 datetime형 배열이나 duration형 배열 입력값에 대해 출력값의 범주 이름에 지정된 datetime형이나 duration형 표시 형식을 사용합니다.

예제

[___] = discretize(___,'categorical',categoryNames)는 문자형 벡터로 구성된 셀형 배열 categoryNames를 사용하여 Y에 포함된 범주의 이름을 지정합니다. categoryNames의 길이는 Bin의 개수와 같아야 합니다.

예제

[___] = discretize(___,'IncludedEdge',side)는 각 Bin에 오른쪽 Bin 경계값을 포함할지 왼쪽 Bin 경계값을 포함할지 지정합니다. 여기서 side'left' 또는 'right'입니다. 예를 들어, side'right'이면 각 Bin이 오른쪽 Bin 경계값을 포함합니다. 단, 예외적으로 첫 번째 Bin은 양쪽 경계값을 모두 포함합니다. 이 경우, j번째 Bin은 edges(j) < X(i) <= edges(j+1)인 경우 요소 X(i)를 포함합니다. 여기서 1 < j <= N이고 N은 Bin의 개수입니다. 첫 번째 Bin은 왼쪽 경계값을 포함합니다. 즉, edges(1) <= X(i) <= edges(2)를 포함합니다. side의 디폴트 값은 'left'입니다.

예제

모두 축소

discretize를 사용하여 숫자형 값을 개별 Bin으로 그룹화할 수 있습니다. edges가 5개의 Bin 경계값을 정의하므로, Bin은 4개입니다.

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는 데이터의 각 요소가 속해 있는 Bin을 나타냅니다. 값 1이 Bin의 범위를 벗어나므로, Y는 이러한 요소에 대해 NaN 값을 포함합니다.

임의의 데이터를 3개의 Bin으로 그룹화합니다. discretize에서 계산된 Bin 경계값을 반환하려면 두 번째 출력값을 지정하십시오.

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

2016년의 임의 날짜가 포함된 10×1 datetime형 벡터를 만듭니다. 그런 다음 datetime형 값을 월별로 그룹화하고 결과를 categorical형 배열로 반환합니다.

X = datetime(2016,1,randi(365,10,1))
X = 10x1 datetime
   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
     Oct-2016 
     Nov-2016 
     Feb-2016 
     Nov-2016 
     Aug-2016 
     Feb-2016 
     Apr-2016 
     Jul-2016 
     Dec-2016 
     Dec-2016 

duration형 값을 시간별로 그룹화하고 결과를 다양한 표시 형식으로 반환합니다.

일부 임의 duration형 값을 시간별로 그룹화하고 결과를 categorical형 배열로 반환합니다.

X = hours(abs(randn(1,10)))'
X = 10x1 duration
   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
     [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
     [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
     [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) 

각 Bin의 오른쪽 경계값을 values 입력값으로 사용합니다. 각 Bin에 포함된 요소의 값은 항상 Bin의 값보다 작습니다.

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' 입력값을 사용하여 각 Bin이 오른쪽 Bin 경계값을 포함하도록 지정합니다. 첫 번째 Bin은 양쪽 경계값을 모두 포함합니다. 이 결과를 왼쪽 Bin 경계값을 포함(디폴트 설정)한 결과와 비교합니다.

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

숫자형 데이터를 categorical형 배열로 그룹화합니다. 이 결과를 사용하여 평균값의 1 표준편차 내에 속하는 데이터 양을 확인할 수 있습니다.

표준편차로 측정된, 평균과의 거리에 따라 정규분포된 데이터를 Bin으로 그룹화합니다.

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

YX의 요소 중 평균에서 3 표준편차 범위 밖에 있는 요소에 대해 정의되지 않은 categorical형 값을 포함합니다.

Y의 값을 미리 봅니다.

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

데이터의 약 68%가 평균의 1 표준편차 내에 있는지 확인합니다.

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

입력 인수

모두 축소

입력 배열로, 벡터, 행렬 또는 다차원 배열로 지정됩니다. X는 Bin에 분포시키려는 데이터를 포함합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

Bin 경계값으로, 값이 증가하는 숫자형 벡터로 지정됩니다. Bin 경계값에는 연속적으로 반복된 요소가 있을 수 있습니다. edges에 포함된 연속된 요소는 개별 Bin을 형성하고, discretize는 이를 사용하여 X에 포함된 데이터를 파티셔닝합니다. 기본적으로 각 Bin은 왼쪽 Bin 경계값을 포함합니다. 단, 예외적으로 마지막 Bin은 양쪽 경계값을 모두 포함합니다.

edges(1)은 첫 번째 Bin의 왼쪽 경계값이고 edges(end)는 마지막 Bin의 오른쪽 경계값이므로 edges는 최소 2개의 요소를 가져야 합니다.

예: Y = discretize([1 3 5],[0 2 4 6])은 값 1, 3, 5를 경계값으로 [0,2), [2,4), [4,6]을 갖는 3개의 Bin에 분포시킵니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

Bin 개수로, 스칼라로 지정됩니다.

discretize는 Bin 경계값이 데이터 범위와 겹치는 "적절한" 숫자가 되도록 선택하여, 데이터를 균일한 너비의 N개 Bin으로 나눕니다. 일반적으로 X의 최대 요소와 최소 요소는 Bin 경계값에 딱 맞아떨어지지는 않습니다. 데이터가 균일하지 않게 분포된 경우, 일부 Bin이 비어 있을 수 있습니다. 그러나 첫 번째 Bin과 마지막 Bin은 항상 하나 이상의 데이터를 포함해야 합니다.

예: [Y,E] = discretize(X,5)X를 균일한 너비의 5개 Bin으로 분포하게 만듭니다.

균일한 Bin 기간으로, duration형 스칼라 또는 calendarDuration형 스칼라나, 다음 표의 값 중 하나로 지정됩니다.

dur를 지정하면 discretize는 최대 65,536개의 Bin(즉, 216)을 사용할 수 있습니다. 지정된 Bin 기간에 더 많은 Bin이 필요할 경우 discretize는 최대 Bin 개수에 해당하는 더 큰 Bin 너비를 사용합니다.

사용 가능한 값 유형설명
'second'

datetime형 또는 duration형 값

각 Bin은 1초입니다.

'minute'

datetime형 또는 duration형 값

각 Bin은 1분입니다.

'hour'

datetime형 또는 duration형 값

각 Bin은 1시간입니다.

'day'

datetime형 또는 duration형 값

  • datetime형 입력값의 경우 각 Bin은 달력상의 1일입니다. 이 값은 일광 절약 시간제 변동을 고려합니다.

  • duration형 입력값의 경우 각 Bin은 고정 길이 1일(24시간)입니다.

'week'

datetime형 값

각 Bin은 달력상의 1주일입니다.
'month'

datetime형 값

각 Bin은 달력상의 1개월입니다.
'quarter'

datetime형 값

각 Bin은 달력상의 1사분기입니다.
'year'

datetime형 또는 duration형 값

  • datetime형 입력값의 경우 각 Bin은 달력상의 1년입니다. 이 값은 윤일을 고려합니다.

  • duration형 입력값의 경우 각 Bin은 고정 길이 1년(365.2425일)입니다.

'decade'

datetime형 값

각 Bin은 10년(달력상의 10년)입니다.
'century'

datetime형 값

각 Bin은 1세기(달력상의 100년)입니다.

예: [Y,E] = discretize(X,'hour')X를 1시간의 균일한 기간을 갖는 Bin으로 나눕니다.

데이터형: char | duration | calendarDuration

Bin 값으로, 임의의 데이터형 벡터로 지정됩니다. values는 Bin의 개수 length(edges)-1과 길이가 동일해야 합니다. values의 요소는 출력값에서 일반 Bin 인덱스를 대체합니다. 즉, X(1)이 Bin 2에 포함되면 discretizeY(1)2가 아니라 values(2)로 반환합니다.

values가 셀형 배열이면 모든 입력 데이터는 Bin에 속해야 합니다.

예: Y = discretize(randi(5,10,1),[1 1.5 3 5],diff([1 1.5 3 5]))는 1에서 3 사이의 인덱스가 아니라 Bin의 너비를 반환합니다.

datetime형과 duration형 표시 형식으로, 문자형 벡터로 지정됩니다. displayFormat 값은 Y의 값은 변경하지 않으며, 이러한 값의 표시만 변경합니다. datetime형 및 duration형 배열에 유효한 표시 형식을 사용하여 displayFormat을 지정할 수 있습니다. 사용 가능한 옵션에 대한 자세한 내용은 날짜/시간 표시 형식 설정하기 항목을 참조하십시오.

예: discretize(X,'day','categorical','h')는 duration형 배열의 표시 형식을 지정합니다.

예: discretize(X,'day','categorical','yyyy-MM-dd')는 datetime형 배열의 표시 형식을 지정합니다.

데이터형: char

categorical형 배열 범주 이름으로, 문자형 벡터로 구성된 셀형 배열로 지정됩니다. categoryNames는 Bin의 개수와 길이가 동일해야 합니다.

예: Y = discretize(randi(5,10,1),[1 1.5 3 5],'categorical',{'A' 'B' 'C'})A, B, C의 3개의 범주로 데이터를 분포시킵니다.

데이터형: cell

각 Bin에 포함할 경계값으로, 다음 값 중 하나로 지정됩니다.

  • 'left' — 모든 Bin이 왼쪽 Bin 경계값을 포함합니다. 단, 예외적으로 마지막 Bin은 양쪽 Bin 경계값을 모두 포함합니다. 이는 디폴트 값입니다.

  • 'right' — 모든 Bin이 오른쪽 Bin 경계값을 포함합니다. 단, 예외적으로 첫 번째 Bin은 양쪽 경계값을 모두 포함합니다.

예: Y = discretize(randi(11,10,1),1:2:11,'IncludedEdge','right')는 각 Bin에 오른쪽 Bin 경계값을 포함합니다.

출력 인수

모두 축소

Bin으로, 숫자형 벡터, 행렬, 다차원 배열, 순서형 categorical형 배열 중 하나로 반환됩니다. YX와 크기가 같으며, 각 요소는 X에서 해당하는 요소에 대한 Bin 배치를 설명합니다. values가 지정된 경우 Y의 데이터형은 values의 데이터형과 같습니다. 범위를 벗어난 요소는 출력값의 데이터형에 따라 다르게 표현됩니다.

  • 숫자 출력값의 경우 YX에서 범위를 벗어난 요소에 대해 NaN 값을 포함합니다. 즉, X(i) < edges(1) 또는 X(i) > edges(end)이거나 XNaN을 포함하는 경우에 해당합니다.

  • Y가 categorical형 배열인 경우 Y는 범위를 벗어난 입력값이나 NaN 입력값에 대해 정의되지 않은 요소를 포함합니다.

  • values가 정수 데이터형으로 구성된 벡터인 경우 Y는 범위를 벗어난 입력값이나 NaN 입력값에 대해 0을 포함합니다.

구문 discretize(X,dur,'categorical')에 대한 Y의 디폴트 범주 이름 형식은 다음과 같습니다.

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'

Bin 경계값으로, 벡터로 반환됩니다. Bin 경계값을 명시적으로 전달하지 않는 경우 discretize가 계산하는 Bin 경계값을 보려면 이 출력값을 지정하십시오.

Ediscretize가 Bin 경계값을 계산할 때마다 행 벡터로 반환됩니다. Bin 경계값을 전달할 경우, Eedges 입력값의 방향을 유지합니다.

  • discretizehistcounts 함수와 유사하게 동작합니다. 각 Bin의 요소 개수를 구하려면 histcounts를 사용해야 합니다. 반면, 각 요소가 속해 있는 Bin을 찾으려면(요소 개수는 세지 않음) discretize를 사용해야 합니다.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2015a에 개발됨