ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

discretize

データをビンまたはカテゴリにグループ化

構文

Y = discretize(X,edges)
[Y,E] = discretize(X,N)
[Y,E] = discretize(X,dur)
[___] = discretize(___,values)
[___] = discretize(___,'categorical')
[___] = discretize(___,'categorical',displayFormat)
[___] = discretize(___,'categorical',categoryNames)
[___] = discretize(___,'IncludedEdge',side)

説明

Y = discretize(X,edges) は、X の要素を含むビンのインデックスを返します。j 番目のビンには、1 <= j < Nedges(j) <= X(i) < edges(j+1) の場合に要素 X(i) が含まれます。ここで、N はビン数であり、length(edges) = N+1 です。最後のビンには、edges(N) <= X(i) <= edges(N+1) を満たす両側のエッジが含まれます。

[Y,E] = discretize(X,N)X の範囲を N 個の一様なビンに分割し、さらにビン エッジ E を返します。

[Y,E] = discretize(X,dur) は、datetime 配列 X または duration 配列 X を、時間の長さが dur の一様なビンに分割します。dur は、スカラーの duration、スカラーの calendarDuration または時間の単位にすることができます。たとえば、[Y,E] = discretize(X,'hour') は、X を duration が 1 時間の一様なビンに分割します。

[___] = discretize(___,values) は、前述の入力引数または出力引数の任意の組み合わせを使用して、ビン番号ではなく、values 内の対応する要素を返します。たとえば、X(1) がビン 5 にある場合、Y(1)5 ではなく、values(5) です。values は、ビン数と同じ長さをもつベクトルでなければなりません。

[___] = discretize(___,'categorical') は、各ビンがカテゴリとなる categorical 配列を作成します。ほとんどの場合、既定のカテゴリ名の形式は "[A,B)" (最後のビンでは "[A,B]") です。ここで、AB は連続するビン エッジです。dur を文字ベクトルとして指定すると、既定のカテゴリ名が特殊な形式になる場合があります。表示形式のリストについては、Y を参照してください。

[___] = discretize(___,'categorical',displayFormat) は、datetime または duration 配列入力の場合に、指定された datetime または duration の表示形式を出力のカテゴリ名に使用します。

[___] = discretize(___,'categorical',categoryNames) も、文字ベクトルの cell 配列 categoryNames を使用して Y のカテゴリに名前を付けます。categoryNames の長さはビン数と等しくなければなりません。

[___] = discretize(___,'IncludedEdge',side) は、各ビンに右側または左側のビン エッジのいずれを含めるかを指定します。ここで、side'left' または 'right' です。たとえば、side'right' の場合、両側のエッジを含む "最初" のビンを除く各ビンに、右側のビン エッジが含まれます。この場合、edges(j) < X(i) <= edges(j+1) であれば、j 番目のビンは要素 X(i) を含みます。ここで、1 < j <= N であり、N はビン数です。最初のビンは、edges(1) <= X(i) <= edges(2) を満たす左側エッジを含みます。side の既定値は 'left' です。

すべて折りたたむ

discretize を使用して数値を離散的なビンにグループ化します。edges は 5 つのビン エッジを定義するため、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 は、データの各要素が属するビンを示します。値 1 がビンの範囲外の場合、Y にはこれらの要素の NaN 値が含まれます。

乱数データを 3 つのビンにグループ化します。discretize で計算されたビン エッジを返すための 2 番目の出力を指定します。

X = randn(15,1);
[Y,E] = discretize(X,3)
Y = 15×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 array
   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 array
     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 array
   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 array
     [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 array
     [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 array
     [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) 

values 入力として各ビンの右側エッジを使用します。各ビンの要素の値は常に、ビンの値未満です。

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' 入力を使用して、各ビンに右側のビン エッジを含めるように指定します。最初のビンには両側のエッジが含まれます。この結果を、ビンの左側エッジを含む既定の設定と比較します。

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 標準偏差内のデータ量を確認します。

標準偏差で測定された平均値からの距離に従って、正規分布データをビンにグループ化します。

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

Y に含まれる未定義のカテゴリカル値は、平均値から標準偏差の 3 倍以上離れた X の要素に対応します。

Y の値をプレビューします。

Y(1:15)
ans = 15x1 categorical array
     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 にはビンに分配するデータが含まれます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

ビンのエッジ。単調増加する数値ベクトルとして指定します。edges の連続要素は、X のデータを分割するために discretize が使用する離散的なビンを形成します。既定では、最後のビンを除く各ビンは左側のエッジを含みます。最後のビンは両側のエッジを含みます。

edges には、要素が少なくとも 2 つなければなりません。これは、edges(1) が最初のビンの左側のエッジ、edges(end) が最後のビンの右側のエッジであるためです。

例: Y = discretize([1 3 5],[0 2 4 6]) は、値 135 を、それぞれ [0,2)[2,4)[4,6] のエッジをもつ 3 つのビンに分配します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

ビンの数。スカラー整数として指定します。discretize はデータの範囲を N 個の等間隔のビンに分割します。データが不均等に分散している場合、中間のいくつかのビンは空になることがあります。ただし、最初のビンと最後のビンは、常に 1 つ以上のデータを含みます。

例: [Y,E] = discretize(X,5) は、X のデータを均一な幅の 5 つのビンに分配します。

一様なビンの期間。スカラーの duration、スカラーの calendarDuration または表の値のいずれかとして指定します。

dur を指定する場合、discretize は最大 65,536 個 (216) のビンを使用できます。指定したビンの期間にさらに多くのビンが必要となる場合、discretize は最大のビン数に対応する、より大きいビンの幅を使用します。

対応する入力説明
'second'

datetime または duration の値

各ビンは 1 秒です。

'minute'

datetime または duration の値

各ビンは 1 分です。

'hour'

datetime または duration の値

各ビンは 1 時間です。

'day'

datetime または duration の値

  • datetime 入力の場合、各ビンは 1 カレンダー日です。この値には、夏時間のシフトが考慮されます。

  • duration 入力の場合、各ビンは固定長の 1 日 (24 時間) です。

'week'

datetime 値

各ビンは 1 カレンダー週です。
'month'

datetime 値

各ビンは 1 カレンダー月です。
'quarter'

datetime 値

各ビンは 1 カレンダー四半期です。
'year'

datetime または duration の値

  • datetime 入力の場合、各ビンは 1 カレンダー年です。この値には、うるう日が考慮されます。

  • duration 入力の場合、各ビンは固定長の 1 年 (365.2425 日) です。

'decade'

datetime 値

各ビンは 10 年 (10 カレンダー年) です。
'century'

datetime 値

各ビンは 1 世紀 (100 カレンダー年) です。

例: [Y,E] = discretize(X,'hour') は、X を duration が 1 時間の一様なビンに分割します。

データ型: char | duration | calendarDuration

ビンの値。任意のデータ型のベクトルとして指定します。values の長さはビン数 length(edges)-1 と同じでなければなりません。出力の通常のビンのインデックスが values の要素に置き換えられます。つまり、X(1) がビン 2 に含まれる場合、discretizeY(1) を、2 ではなく values(2) として返します。

values が cell 配列の場合、すべての入力データが 1 つのビンに属していなければなりません。

例: Y = discretize(randi(5,10,1),[1 1.5 3 5],diff([1 1.5 3 5])) は、1 から 3 のインデックスではなく、ビンの幅を返します。

datetime と duration の表示形式。文字ベクトルとして指定します。displayFormat の値は Y の値を変更せず、表示のみを変更します。datetime 配列と duration 配列の有効な表示形式を使用して、displayFormat を指定できます。使用可能なオプションの詳細については、日付と時刻の表示形式の設定を参照してください。

例: discretize(X,'day','categorical','h') は、duration 配列の表示形式を指定します。

例: discretize(X,'day','categorical','yyyy-MM-dd') は、datetime 配列の表示形式を指定します。

データ型: char

categorical 配列のカテゴリ名。文字ベクトルの cell 配列として指定します。categoryNames の長さはビン数と等しくなければなりません。

例: Y = discretize(randi(5,10,1),[1 1.5 3 5],'categorical',{'A' 'B' 'C'}) は、データを 3 つのカテゴリ AB および C に分配します。

データ型: cell

各ビンに含めるエッジ。次の値のいずれかとして指定します。

  • 'left' — 両側のエッジを含む最後のビンを除いて、すべてのビンに左側のビン エッジが含まれます。これは既定値です。

  • 'right' — 両側のエッジを含む最初のビンを除いて、すべてのビンに右側のビン エッジが含まれます。

例: Y = discretize(randi(11,10,1),1:2:11,'IncludedEdge','right') は、各ビンに右側のビン エッジを含めます。

出力引数

すべて折りたたむ

ビン。数値ベクトル、行列、多次元配列または順序 categorical 配列として返されます。Y のサイズは X と同じで、各要素は X の対応する要素のビンの配置を表します。values が指定されている場合、Y のデータ型は values と同じです。範囲外の要素の表現は、出力のデータ型によって異なります。

  • 数値出力の場合、Y は、X に範囲外の要素 (X(i) < edges(1) または X(i) > edges(end)) がある場合、あるいは XNaN が含まれる場合に、NaN 値を含みます。

  • Y が categorical 配列である場合、範囲外の入力または NaN の入力に対して、未定義の要素を含みます。

  • values が整数データ型のベクトルである場合、範囲外の入力または NaN の入力に対して、Y0 を含みます。

構文 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'

ビン エッジ。ベクトルとして返されます。ビン エッジが明示的に渡されない場合に discretize が計算したビン エッジを確認するには、この出力を指定します。

ヒント

  • discretize の動作は、関数 histcounts の動作と似ています。各ビンの要素数を調べるには、histcounts を使用します。一方、各要素が属するビンを調べる (要素数のカウントはしない) には、discretize を使用します。

拡張機能

R2015a で導入