Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

categorical 配列の作成

この例では、categorical 配列を作成する方法を説明します。categorical は、離散カテゴリの有限集合からの値をもつデータを格納するためのデータ型です。これらのカテゴリには自然な順序がある場合がありますが、必須ではありません。categorical 配列は、データを効率的に格納して操作するのに適しています。また、値のわかりやすい名前を維持することもできます。多くの場合、categorical 配列は行のグループを定義するためにテーブルで使用されます。

既定の設定では、categorical 配列には数学的に順序付けされていないカテゴリが含まれます。たとえば、ペットのカテゴリの離散集合 {'dog' 'cat' 'bird'} には、意味のある数学的な順序が付けられていないので、MATLAB® はアルファベット順 {'bird' 'cat' 'dog'} を使用します。"順序" categorical 配列には、意味のある数学的な順序が付けられているカテゴリが含まれます。たとえば、サイズのカテゴリの離散集合 {'small', 'medium', 'large'} には数学的な順序 small < medium < large が付けられています。

文字ベクトルの cell 配列または string 配列から categorical 配列を作成する場合、先頭と末尾の空白が削除されます。たとえば、テキスト {' cat' 'dog '} をカテゴリとして指定し、これらをカテゴリに変換すると、{'cat' 'dog'} になります。

文字ベクトルの cell 配列からの categorical 配列の作成

関数 categorical を使用して、数値配列、logical 配列、string 配列、文字ベクトルの cell 配列または既存の categorical 配列から categorical 配列を作成することができます。

ニュー イングランドの州名を含む 1 行 11 列の文字ベクトルを作成します。

state = ["MA","ME","CT","VT","ME","NH","VT","MA","NH","CT","RI"];

cell 配列 state を数学的な順序が付けられていない categorical 配列に変換します。

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'}

カテゴリがアルファベット順に並べられています。

文字ベクトルの cell 配列からの順序 categorical 配列の作成

8 つのオブジェクトのサイズを含む 1 行 8 列の文字ベクトルの cell 配列を作成します。

AllSizes = ["medium","large","small","small","medium",...
            "large","medium","small"];

cell 配列 AllSizes には、'large''medium''small' の 3 つの異なる値が含まれています。文字ベクトルの cell 配列を使用する場合、small < medium < large を示す便利な方法はありません。

cell 配列 AllSizes を順序 categorical 配列に変換します。valueset を使用して、カテゴリを定義する値 smallmedium および large を指定します。順序 categorical 配列では、最初に指定されたカテゴリが最小になり、最後に指定されたカテゴリが最大になります。

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'

categorical 配列の値の順序 sizeOrd は変更されません。

categorical 変数 sizeOrd の離散カテゴリを一覧表示します。

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

カテゴリが、数学的な順序 small < medium < large に対応する指定された順序で並べられます。

数値データのビン化による順序 categorical 配列の作成

0 から 50 までの範囲の 100 個の乱数からなるベクトルを作成します。

x = rand(100,1)*50;

関数 discretize を使用して x の値をビン化して categorical 配列を作成します。0 ~ 15 までのすべての値を最初のビンに、15 ~ 35 までのすべての値を 2 番目のビンに、35 ~ 50 までのすべての値を 3 番目のビンに入れます。それぞれのビンには、左の端点は含まれますが、右の端点は含まれません。

catnames = ["small","medium","large"];
binnedData = discretize(x,[0 15 35 50],'categorical',catnames);

binnedData は、small < medium < large である 3 つのカテゴリを含む 100 行 1 列の順序 categorical 配列です。

関数 summary を使用して各カテゴリの要素の数を出力します。

summary(binnedData)
     small       30 
     medium      35 
     large       35 

string 配列からの categorical 配列の作成

R2016b 以降では、関数 string を使用して string 配列を作成し、categorical 配列に変換できます。

惑星の名前を含む string 配列を作成します。

str = ["Earth","Jupiter","Neptune","Jupiter","Mars","Earth"]
str = 1x6 string
    "Earth"    "Jupiter"    "Neptune"    "Jupiter"    "Mars"    "Earth"

str を categorical 配列に変換します。

planets = categorical(str)
planets = 1x6 categorical
     Earth      Jupiter      Neptune      Jupiter      Mars      Earth 

欠損要素を str に追加して、categorical 配列に変換します。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 

参考

| | |

関連する例

詳細