Main Content

categorical

カテゴリに割り当てられた値を含む配列

説明

categorical は、HighMedLow などの離散カテゴリの有限集合に値を割り当てるデータ型です。これらのカテゴリには High > Med > Low などの数学的な順序を指定することができますが、必須ではありません。categorical 配列は、非数値データを効率的に格納し操作するのに適しており、値に付けられたわかりやすい名前も維持されます。一般的に、categorical 配列は table の行のグループを指定するために使用します。

作成

説明

B = categorical(A) は、配列 A から categorical 配列を作成します。B のカテゴリは、A からの並べ替えられた一意の値です。

B = categorical(A,valueset) は、valueset の値ごとに 1 つのカテゴリを作成します。B のカテゴリは、valueset の値と同じ順序になります。

valueset を使用して、A には存在しない値のカテゴリを含めることができます。逆に、valueset に存在しない値が A に含まれている場合は、B の対応する要素が定義されません。

B = categorical(A,valueset,catnames) は、valueset のカテゴリ値と catnames の名前をマッチングさせて B のカテゴリに名前を付けます。

B = categorical(A,___,Name,Value) は、1 つ以上の Name,Value のペアの引数で指定された追加オプションを使用して、categorical 配列を作成します。前述の構文のいずれかの入力引数を含めることができます。

たとえば、カテゴリが数学的な順序になることを示すには、'Ordinal',true を指定します。

入力引数

すべて展開する

入力配列。数値配列、logical 配列、categorical 配列、datetime 配列、duration 配列、string 配列、または文字ベクトルの cell 配列として指定します。

categorical は、string または文字ベクトルである入力値から先頭のスペースと末尾のスペースを削除します。

A に欠損値が含まれる場合、B の対応する要素は定義されず、<undefined> として表示されます。関数 categorical は、次の値を未定義の categorical 値に変換します。

  • 数値配列および duration 配列内の NaN

  • string 配列内の欠損 string (<missing>) または空の string ("")

  • 文字ベクトルの cell 配列内にある空の文字ベクトル ('')

  • datetime 配列内の NaT

  • categorical 配列内の未定義値 (<undefined>)

B には未定義値のカテゴリが含まれません。欠損値または未定義値の明示的なカテゴリを作成するには、catnames に目的のカテゴリ名を含め、さらに欠損値を対応する値として valueset に含めなければなりません。

また、A は次のクラス メソッドをもつオブジェクトの配列にすることもできます。

  • unique

  • eq

カテゴリ。一意の値のベクトルとして指定します。valueset のデータ型と A のデータ型は同じでなければなりません。ただし、A が string 配列の場合を除きます。その場合、valueset は string 配列または文字ベクトルの cell 配列のいずれかにすることができます。

categorical は、string または文字ベクトルである valueset の要素から先頭のスペースと末尾のスペースを削除します。

カテゴリ名。文字ベクトルの cell 配列、または string 配列として指定します。入力引数 catnames を指定しない場合、categoricalvalueset 内の値をカテゴリ名として使用します。

A の複数の異なる値を B の 1 つのカテゴリにマージするには、それらの値に対応する重複した名前を含めます。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: 'Ordinal',true は、カテゴリが数学的な順序になることを指定します。

順序変数インジケーター。'Ordinal' と、false (0) または true (1) のいずれかで構成されるコンマ区切りのペアとして指定します。

false (0)

categorical は、順序がない categorical 配列を作成します。これは既定の動作です。

B のカテゴリは数学的な順序ではありません。したがって、B 内の値は等価性についてのみ比較できます。他の関係演算子を使用した値の比較はできません。

true (1)

categorical は、順序 categorical 配列を作成します。

B のカテゴリには数学的な順序があるため、最初に指定されるカテゴリは最小で、最後のカテゴリは最大になります。B の値は、値の等価性を比較するだけでなく、< (より小さい) や > (より大きい) などの関係演算子を使用して比較できます。関数 min および max を順序 categorical 配列に対して使用することもできます。

詳細については、順序 categorical 配列を参照してください。

保護されたカテゴリ インジケーター。'Protected' と、false (0) または true (1) のいずれかで構成されるコンマ区切りのペアとして指定します。順序 categorical 配列のカテゴリは常に保護されます。'Ordinal',true を指定したときの既定値は true です。それ以外の場合は、値は false です。

false (0)

新しい値を B に代入すると、カテゴリは自動的に更新されます。したがって、異なるカテゴリをもつ (非順序) categorical 配列を組み合わせることができます。それに伴って、両方の配列のカテゴリを含めてカテゴリを更新することができます。

true (1)

新しい値を B に代入する場合、値は既存のカテゴリの 1 つに属していなければなりません。したがって、同じカテゴリをもつ配列のみを組み合わせることができます。新しいカテゴリを B に追加するには、関数 addcats を使用しなければなりません。

すべて折りたたむ

気象計のラベルをもつ categorical 配列を作成します。それを温度測定値の table に追加します。次に、そのカテゴリを使用して、気象計別に温度測定値を選択します。

まず、温度測定値、日付、および気象計のラベルを含む配列を作成します。

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 

そのカテゴリを表示します。3 つの気象計のラベルがカテゴリです。

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

温度、日付、および気象計のラベルを含む table を作成します。

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 から取得した測定値を表示します。== 演算子を使用して S2 と等価の Station 値を見つけることができます。次に、論理インデックス付けを使用して、気象計 S2 からのデータを含む table 行を選択します。

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

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

文字ベクトルの cell 配列 A を categorical 配列に変換します。A に存在しない値を含むカテゴリのリストを指定します。

文字ベクトルの cell 配列を作成します。

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

A を順序 categorical 配列に変換します。ここで、123 は、それぞれカテゴリ childadultsenior を表します。

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 のカテゴリは、数学的な順序 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 を、A の 3 つのカテゴリとして追加します。

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 

100 個の乱数を 3 つのカテゴリにビニングするには、関数 discretize (categorical の代わりに) を使用します。

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]) は入力配列の 2 番目の要素を切り捨てます。数値データからカテゴリを作成するには、関数 discretize を使用します。

代替方法

関数 discretize を使用して、数値データをカテゴリ別にグループ化することもできます。

拡張機能

スレッドベースの環境
MATLAB® の backgroundPool を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool を使用してコードを高速化します。

バージョン履歴

R2013b で導入