categorical 配列の作成
この例では、さまざまなタイプの入力データから categorical 配列を作成し、それらの要素を変更する方法を示します。categorical
データ型は、離散カテゴリの有限集合からの値を格納します。数値配列、logical 配列、string 配列、または文字ベクトルの cell 配列から categorical 配列を作成することができます。入力配列からの一意の値が categorical 配列のカテゴリになります。categorical 配列は、データを効率的に格納して操作するのに適しています。また、値のわかりやすい名前を維持することもできます。
既定では、categorical 配列のカテゴリに数学的な順序はありません。たとえば、ペットのカテゴリの離散集合 ["dog" "cat" "bird"]
には、意味のある数学的な順序が付けられていないので、MATLAB® はアルファベット順 ["bird" "cat" "dog"]
を使用します。ただし、カテゴリに意味のある数学的な順序を付けた順序 categorical 配列も作成できます。たとえば、サイズのカテゴリの離散集合 ["small" "medium" "large"]
には small < medium < large
という数学的な順序を付けることができます。順序 categorical 配列により、それらの要素間の比較が可能になります。
入力配列からの categorical 配列の作成
入力配列から categorical 配列を作成するには、関数 categorical
を使用します。
たとえば、ニュー イングランド地域のすべての州を要素とする string 配列を作成します。一部の string の先頭や末尾に空白があることに注意してください。
statesNE = ["MA" "ME" " CT" "VT" " ME " "NH" "VT" "MA" "NH" "CT" "RI "]
statesNE = 1×11 string
"MA" "ME" " CT" "VT" " ME " "NH" "VT" "MA" "NH" "CT" "RI "
string 配列を categorical 配列に変換します。string 配列 (または文字ベクトルの cell 配列) から categorical 配列を作成する場合、先頭と末尾の空白が削除されます。
statesNE = categorical(statesNE)
statesNE = 1×11 categorical
MA ME CT VT ME NH VT MA NH CT RI
関数 categories
を使用して statesNE
のカテゴリを一覧表示します。statesNE
の各要素は、これらのカテゴリのいずれかに属します。statesNE
には一意の州が 6 つあるため、カテゴリは 6 つになります。州の省略形に数学的な順序はないため、カテゴリはアルファベット順に並べられています。
categories(statesNE)
ans = 6×1 cell
{'CT'}
{'MA'}
{'ME'}
{'NH'}
{'RI'}
{'VT'}
要素の追加と変更
categorical 配列に 1 つの要素を追加するには、カテゴリ名を表すテキストを代入できます。たとえば、statesNE
に州を追加します。
statesNE(12) = "ME"
statesNE = 1×12 categorical
MA ME CT VT ME NH VT MA NH CT RI ME
複数の要素を追加または変更するには、categorical 配列を代入する必要があります。
statesNE(1:3) = categorical(["RI" "VT" "MA"])
statesNE = 1×12 categorical
RI VT MA VT ME NH VT MA NH CT RI ME
未定義の要素としての欠損値の追加
categorical 配列の未定義の要素として欠損値を代入できます。未定義の categorical 値はいずれのカテゴリにも属しません。これは、数値配列の NaN
(Not-a-Number) に似ています。
欠損値を代入するには、関数 missing
を使用します。たとえば、categorical 配列の最初の要素を欠損値になるように変更します。
statesNE(1) = missing
statesNE = 1×12 categorical
<undefined> VT MA VT ME NH VT MA NH CT RI ME
categorical 配列の末尾に欠損値を 2 つ代入します。
statesNE(12:13) = [missing missing]
statesNE = 1×13 categorical
<undefined> VT MA VT ME NH VT MA NH CT RI <undefined> <undefined>
string 配列を categorical 配列に変換する場合、欠損 string と空の string は categorical 配列において未定義の要素になります。数値配列を変換する場合は、NaN
が未定義の要素になります。したがって、欠損 string、""
、''
、または NaN
を categorical 配列の要素に代入すると、それらは未定義の categorical 値に変換されます。
statesNE(2) = ""
statesNE = 1×13 categorical
<undefined> <undefined> MA VT ME NH VT MA NH CT RI <undefined> <undefined>
string 配列からの順序 categorical 配列の作成
順序 categorical 配列では、比較を可能にする数学的な順序がカテゴリの順序によって定義されます。この数学的な順序により、順序 categorical 配列の要素は関係演算子を使用して比較できます。順序がない categorical 配列の要素は比較できません。
たとえば、8 つのオブジェクトのサイズを含む string 配列を作成します。
AllSizes = ["medium" "large" "small" "small" "medium" ... "large" "medium" "small"];
string 配列には一意の値が 3 つ含まれています。"large"
、"medium"
、および "small"
です。string 配列には small < medium < large
を示す便利な方法はありません。
string 配列を順序 categorical 配列に変換します。カテゴリを small
、medium
、large
として、この順序で定義します。順序 categorical 配列では、最初に指定されたカテゴリが最小になり、最後に指定されたカテゴリが最大になります。
valueset = ["small" "medium" "large"]; sizeOrd = categorical(AllSizes,valueset,"Ordinal",true)
sizeOrd = 1×8 categorical
medium large small small medium large medium small
categorical 配列の値の順序 sizeOrd
は変更されません。
sizeOrd
の離散カテゴリを一覧表示します。カテゴリの順序が数学的な順序 small < medium < large
と一致しています。
categories(sizeOrd)
ans = 3×1 cell
{'small' }
{'medium'}
{'large' }
数値データのビン化による順序 categorical 配列の作成
連続数値データをもつ配列がある場合、数値の範囲をカテゴリとして指定すると便利なことがあります。このような場合、関数 discretize
を使用してデータをビン化します。ビンにカテゴリ名を代入します。
たとえば、0 から 50 までの範囲の 100 個の乱数からなるベクトルを作成します。
x = rand(100,1)*50
x = 100×1
40.7362
45.2896
6.3493
45.6688
31.6180
4.8770
13.9249
27.3441
47.8753
48.2444
7.8807
48.5296
47.8583
24.2688
40.0140
⋮
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 = 100×1 categorical
large
large
small
large
medium
small
small
medium
large
large
small
large
large
medium
large
small
medium
large
large
large
medium
small
large
large
medium
large
large
medium
medium
small
⋮
binnedData
は、small < medium < large
である 3 つのカテゴリを含む順序 categorical 配列です。
各カテゴリの要素数を表示するには、関数 summary
を使用します。
summary(binnedData)
binnedData: 100×1 ordinal categorical small 30 medium 35 large 35 <undefined> 0 Additional statistics: Min small Median medium Max large
ビン化されたデータのさまざまな種類のグラフを作成できます。たとえば、binnedData
の円グラフを作成します。
pie(binnedData)
categorical 配列の事前割り当て
NaN
の配列を作成して categorical 配列に変換することにより、任意のサイズの categorical 配列を事前割り当てできます。配列を事前割り当てした後、カテゴリ名を配列に追加することによってカテゴリを初期化できます。
たとえば、NaN
の 2 行 4 列の配列を作成します。
A = NaN(2,4)
A = 2×4
NaN NaN NaN NaN
NaN NaN NaN NaN
その後、NaN
の配列を未定義の categorical 値の categorical 配列に変換します。
A = categorical(A)
A = 2×4 categorical
<undefined> <undefined> <undefined> <undefined>
<undefined> <undefined> <undefined> <undefined>
この時点で A
にカテゴリはありません。
categories(A)
ans = 0×0 empty cell array
addcats
関数を使用して、カテゴリ small
、medium
、large
を A
に追加します。
A = addcats(A,["small" "medium" "large"])
A = 2×4 categorical
<undefined> <undefined> <undefined> <undefined>
<undefined> <undefined> <undefined> <undefined>
A
の要素は未定義値のままですが、A
のカテゴリは定義されています。
categories(A)
ans = 3×1 cell
{'small' }
{'medium'}
{'large' }
A
にカテゴリが存在するようになったため、定義済みの categorical 値を A
の要素として割り当てることができます。
A(1) = "medium"; A(8) = "small"; A(3:5) = "large"
A = 2×4 categorical
medium large large <undefined>
<undefined> large <undefined> small
参考
categorical
| categories
| discretize
| summary
| addcats
| missing