Main Content

categorical

범주에 할당된 값을 포함하는 배열

설명

categoricalHigh, Med, Low와 같은 유한한 이산 범주 집합에 값을 할당하는 데이터형입니다. 이러한 범주에는 High > Med > Low와 같은 수학적 정렬을 적용할 수 있으며, 이것은 필수 사항이 아닙니다. categorical형 배열을 사용하면 숫자형이 아닌 데이터를 효율적으로 저장하고 편리하게 조작하는 한편, 값에 의미 있는 이름을 부여할 수 있습니다. categorical형 배열은 흔히 테이블에서 행 그룹을 지정하는 데 사용됩니다.

생성

설명

예제

B = categorical(A)A 배열로부터 categorical형 배열을 만듭니다. B의 범주는 A에서 가져와 정렬한 고유한 값들입니다.

예제

B = categorical(A,valueset)valueset의 각 값에 대해 하나의 범주를 만듭니다. B의 범주는 valueset의 값과 순서가 동일합니다.

valueset을 사용하여 A에 없는 값에 대한 범주를 포함할 수 있습니다. 반대로, valueset에 없는 값이 A에 포함되어 있으면 B의 대응하는 요소가 정의되지 않습니다.

예제

B = categorical(A,valueset,catnames)valueset의 범주 값과 catnames의 이름을 일치시켜 B의 범주를 명명합니다.

예제

B = categorical(A,___,Name,Value)는 하나 이상의 Name,Value 쌍 인수를 추가 옵션으로 지정하여 categorical형 배열을 만듭니다. 위에 열거한 구문에 있는 어떤 입력 인수도 포함할 수 있습니다.

예를 들어, 범주에 수학적 정렬이 적용되었음을 나타내려면 'Ordinal',true를 지정하십시오.

입력 인수

모두 확장

입력 배열로, 숫자형 배열, 논리형 배열, categorical형 배열, datetime형 배열, duration형 배열, string형 배열 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다.

categorical은 string형이나 문자형 벡터인 입력값에서 선행 공백과 후행 공백을 제거합니다.

A에 누락값이 있으면 B의 대응 요소가 정의되지 않고 <undefined>로 표시됩니다. categorical 함수는 다음 값을 정의되지 않은 categorical형 값으로 변환합니다.

  • 숫자형 배열과 duration형 배열의 NaN

  • string형 배열에서 누락값인 string형(<missing>) 또는 빈 string형("")

  • 문자형 벡터로 구성된 셀형 배열에서 빈 문자형 벡터('')

  • datetime형 배열의 NaT

  • categorical형 배열에서 정의되지 않은 값(<undefined>)

B에는 정의되지 않은 값에 대한 범주가 없습니다. 누락되거나 정의되지 않은 값에 대한 명시적 범주를 만들려면 catnames에 원하는 범주 이름을 포함시키고 valueset에 대응 값으로서 누락값을 포함시켜야 합니다.

또한 A는 다음 클래스 메서드를 갖는 객체의 배열일 수 있습니다.

  • unique

  • eq

범주로, 고유한 값으로 구성된 벡터로 지정됩니다. valueset의 데이터형과 A의 데이터형은 동일해야 하지만 A가 string형 배열인 경우는 예외입니다. 이 경우, valueset는 string형 배열이거나 문자형 벡터로 구성된 셀형 배열일 수 있습니다.

categorical은 string형이나 문자형 벡터인 valueset의 요소에서 선행 공백과 후행 공백을 제거합니다.

범주 이름으로, 문자형 벡터로 구성된 셀형 배열 또는 string형 배열로 지정됩니다. catnames 입력 인수를 지정하지 않으면 categoricalvalueset의 값을 범주 이름으로 사용합니다.

A의 각기 다른 여러 값을 B의 단일 범주에 병합하려면 해당 값에 대응하는 중복된 이름을 포함하십시오.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: 'Ordinal',true는 범주에 수학적 정렬(Mathematical Ordering)이 적용되도록 지정합니다.

순서형 변수 표시자로, 'Ordinal'과 함께 false(0)나 true(1)가 쉼표로 구분되어 지정됩니다.

false (0)

categorical은 순서형이 아닌 categorical형 배열을 만듭니다(디폴트 동작).

B의 범주는 수학적 정렬(Mathematical Ordering)이 적용되지 않습니다. 따라서, B의 값이 동일한지 여부만 비교할 수 있습니다. 다른 관계 연산자를 사용하여 값을 비교할 수는 없습니다.

true (1)

categorical은 순서형 categorical형 배열을 만듭니다.

B의 범주는 지정된 첫 번째 범주가 가장 작고 마지막 범주가 가장 크도록 하는 수학적 정렬(Mathematical Ordering)이 적용됩니다. 값이 동일한지 비교할 수 있을 뿐만 아니라 보다 작음, 보다 큼 등의 관계 연산자를 사용하여 B의 값을 비교할 수 있습니다. 또한 순서형 categorical형 배열에는 min 함수와 max 함수를 사용할 수 있습니다.

자세한 내용은 순서형 categorical형 배열 항목을 참조하십시오.

보호된 범주 표시자로, 'Protected'와 함께 false(0)나 true(1)가 쉼표로 구분되어 지정됩니다. 순서형 categorical형 배열의 범주는 항상 보호됩니다. 'Ordinal',true를 지정한 경우 이 디폴트 값은 true입니다. 그렇지 않을 경우 값은 false가 됩니다.

false (0)

B에 새 값을 할당하면 범주가 자동으로 업데이트됩니다. 따라서 범주가 다른 (비순서형) categorical형 배열을 결합할 수 있습니다. 그에 따라 범주가 업데이트되어 두 배열의 범주를 포함할 수 있습니다.

true (1)

B에 새 값을 할당할 때 값이 기존 범주 중 하나에 속해야 합니다. 따라서 동일한 범주를 가진 배열만 결합할 수 있습니다. B에 새 범주를 추가하려면 addcats 함수를 사용해야 합니다.

예제

모두 축소

기상 관측소 레이블로 이루어진 categorical형 배열을 생성합니다. 이 배열을 온도 측정값 테이블에 추가합니다. 그런 다음 범주를 사용하여 관측소별 온도 측정값을 선택합니다.

먼저 온도 측정값, 날짜, 관측소 레이블을 포함하는 배열을 생성합니다.

Temps = [58; 72; 56; 90; 76];
Dates = {'2017-04-17';'2017-04-18';'2017-04-30';'2017-05-01';'2017-04-27'};
Stations = {'S1';'S2';'S1';'S3';'S2'};

Stations를 categorical형 배열로 변환합니다.

Stations = categorical(Stations)
Stations = 5x1 categorical
     S1 
     S2 
     S1 
     S3 
     S2 

범주를 표시합니다. 세 개의 관측소 레이블이 범주입니다.

categories(Stations)
ans = 3x1 cell
    {'S1'}
    {'S2'}
    {'S3'}

온도, 날짜, 관측소 레이블을 포함하는 테이블을 생성합니다.

T = table(Temps,Dates,Stations)
T=5×3 table
    Temps        Dates         Stations
    _____    ______________    ________

     58      {'2017-04-17'}       S1   
     72      {'2017-04-18'}       S2   
     56      {'2017-04-30'}       S1   
     90      {'2017-05-01'}       S3   
     76      {'2017-04-27'}       S2   

관측소 S2에서 측정한 값을 표시합니다. == 연산자를 사용하여 StationS2인 값을 찾을 수 있습니다. 그런 다음 논리형 인덱싱을 사용하여 관측소 S2의 데이터가 있는 테이블 행을 선택합니다.

TF = (T.Stations == 'S2');
T(TF,:)
ans=2×3 table
    Temps        Dates         Stations
    _____    ______________    ________

     72      {'2017-04-18'}       S2   
     76      {'2017-04-27'}       S2   

문자형 벡터로 구성된 셀형 배열 A를 categorical형 배열로 변환합니다. A에 없는 값을 포함하는 범주 목록을 지정합니다.

문자형 벡터로 구성된 셀형 배열을 만듭니다.

A = {'republican' 'democrat'; 'democrat' 'democrat'; 'democrat' 'republican'};

A를 categorical형 배열로 변환합니다. independent에 대한 범주를 추가합니다.

valueset = {'democrat' 'republican' 'independent'};
B = categorical(A,valueset)
B = 3x2 categorical
     republican      democrat   
     democrat        democrat   
     democrat        republican 

B의 범주를 표시합니다.

categories(B)
ans = 3x1 cell
    {'democrat'   }
    {'republican' }
    {'independent'}

숫자형 배열을 만듭니다.

A = [1 3 2; 2 1 3; 3 1 2]
A = 3×3

     1     3     2
     2     1     3
     3     1     2

A를 categorical형 배열 B로 변환하고 범주 이름을 지정합니다.

B = categorical(A,[1 2 3],{'red' 'green' 'blue'})
B = 3x3 categorical
     red        blue      green 
     green      red       blue  
     blue       red       green 

B의 범주를 표시합니다.

categories(B)
ans = 3x1 cell
    {'red'  }
    {'green'}
    {'blue' }

B는 순서형 categorical형 배열이 아닙니다. 따라서, B에 있는 값은 등호 ==~=만 사용하여 비교할 수 있습니다.

범주 'red'에 속하는 요소를 찾습니다. 논리형 인덱싱을 사용하여 찾은 요소에 액세스합니다.

TF = (B == 'red');
B(TF)
ans = 3x1 categorical
     red 
     red 
     red 

5×2 숫자형 배열을 만듭니다.

A = [3 2;3 3;3 2;2 1;3 2]
A = 5×2

     3     2
     3     3
     3     2
     2     1
     3     2

A1, 2, 3으로 범주 child, adult, senior를 각각 나타내는 순서형 categorical형 배열로 변환합니다.

valueset = [1:3];
catnames = {'child' 'adult' 'senior'};

B = categorical(A,valueset,catnames,'Ordinal',true)
B = 5x2 categorical
     senior      adult  
     senior      senior 
     senior      adult  
     adult       child  
     senior      adult  

B가 순서형 배열이므로, B의 범주에는 수학적 정렬(Mathematical Ordering)인 child < adult < senior가 적용됩니다.

NaN으로 구성된 배열을 만들고 이 배열을 categorical형 배열로 변환하여 임의 크기의 categorical형 배열을 사전할당할 수 있습니다. 배열을 사전할당한 후에는 범주 이름을 지정하고 범주를 배열에 추가하여 해당 범주를 초기화할 수 있습니다.

먼저 NaN으로 구성된 배열을 만듭니다. 임의 크기의 배열을 만들 수 있습니다. 예를 들어, NaN으로 구성된 2×4 배열을 만듭니다.

A = NaN(2,4)
A = 2×4

   NaN   NaN   NaN   NaN
   NaN   NaN   NaN   NaN

그런 다음 NaN으로 구성된 배열을 변환하여 categorical형 배열을 사전할당합니다. categorical 함수는 NaN을 정의되지 않은 categorical형 값으로 변환합니다. NaN이 "숫자가 아님(Not-a-Number)"을 나타내는 것처럼 <undefined>는 범주에 속하지 않는 categorical형 값을 나타냅니다.

A = categorical(A)
A = 2x4 categorical
     <undefined>      <undefined>      <undefined>      <undefined> 
     <undefined>      <undefined>      <undefined>      <undefined> 

실제로 이 시점에서 A는 범주가 없습니다.

categories(A)
ans =

  0x0 empty cell array

A 범주를 초기화하려면 addcats 함수를 사용하여 범주 이름을 지정하고 이를 A에 추가합니다. 예를 들어 smallmedium, large를 3개의 A 범주로 추가합니다.

A = addcats(A,["small","medium","large"])
A = 2x4 categorical
     <undefined>      <undefined>      <undefined>      <undefined> 
     <undefined>      <undefined>      <undefined>      <undefined> 

A의 요소는 정의되지 않은 값인 반면, 해당 범주는 addcats로 초기화하였습니다.

categories(A)
ans = 3x1 cell
    {'small' }
    {'medium'}
    {'large' }

이제 A에 범주가 있으므로 정의된 categorical형 값을 A 요소로 할당할 수 있습니다.

A(1) = "medium";
A(8) = "small";
A(3:5) = "large"
A = 2x4 categorical
     medium           large      large            <undefined> 
     <undefined>      large      <undefined>      small       

R2017a부터는 큰따옴표를 사용하여 string형 배열을 생성할 수 있습니다. 또한 string형 배열에는 따옴표 없이, <missing>으로 표시되는 누락값이 있을 수 있습니다.

str = ["plane","jet","plane","helicopter",missing,"jet"]
str = 1x6 string
    "plane"    "jet"    "plane"    "helicopter"    <missing>    "jet"

string형 배열 str을 categorical형 배열로 변환합니다. categorical 함수는 누락값인 string형 값을 정의되지 않은 categorical형 값으로 변환하여, <undefined>로 표시합니다.

C = categorical(str)
C = 1x6 categorical
     plane      jet      plane      helicopter      <undefined>      jet 

categorical 대신 discretize 함수를 사용하여 100개의 난수를 세 개의 범주로 비닝합니다.

x = rand(100,1);
y = discretize(x,[0 .25 .75 1],'categorical',{'small','medium','large'});
summary(y)
     small       22 
     medium      46 
     large       32 

  • categorical형 배열을 수락하거나 반환하는 함수 목록은 categorical형 배열 항목을 참조하십시오.

  • 입력 배열에 서로 지나치게 가까이 있는 숫자형 값, datetime형 값 또는 duration형 값이 있는 경우, categorical 함수는 해당 값을 중복 값으로 처리해 자릅니다. 예를 들어, categorical([1 1.00001])은 입력 배열의 두 번째 요소를 자릅니다. 숫자형 데이터에서 범주를 생성하려면 discretize 함수를 사용하십시오.

대안

또한 discretize 함수를 사용하여 숫자 데이터를 범주로 그룹화할 수 있습니다.

확장 기능

스레드 기반 환경
MATLAB®의 backgroundPool을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool을 사용해 코드 실행 속도를 높일 수 있습니다.

버전 내역

R2013b에 개발됨