数値列のカテゴリ化
数値を区切って、カテゴリ(階級)に分けます。年齢を年代に、金額を価格帯に、点数を評価に変えるときに使います。
数値のまま丸めたいだけなら数値列の丸めを使ってください。
入出力
| ポート | 内容 |
|---|---|
| 入力データ | データ |
| 出力データ | データ(新規列に挿入なら 1 列、右端に増えます) |
| カテゴリ閾値 | どの値で区切ったかの一覧 |
出力が 2 つあります。 2 つ目に何が入るかはカテゴリ閾値の出力で説明します。
Spark エンジンでも動きます。
設定項目
詳細な項目は「詳細設定」の見出しの下にあります。 条件によって出ないこともあります。
「処理を選択」で選んだ分け方によって、以降に出る欄が変わります。
- 結果の挿入先を設定
- 新規列に挿入(既定)か既存列に上書き。
- 新規列名を入力必須
- 「新規列に挿入」のときに出ます。カテゴリを入れる列の名前。
- 処理対象列を選択必須
- カテゴリに分ける列。数値の列だけ選べます。選べるのは 1 列だけです。「既存列に上書き」のときは「列を選択」という名前で出て、この列がそのまま結果の入り先になります(元の数値は残りません)。
- 処理を選択
- 等間隔に分割(既定)/ 等頻度に分割 / 範囲と間隔を指定して分割 / 区切り位置を指定して分割。
- 分割数を指定
- 等間隔・等頻度のときに出ます。いくつに分けるか。既定は 2 で、整数だけ入れられます。
- 範囲の最小値を指定 / 範囲の最大値を指定 / 分割する数値間隔を指定
- 「範囲と間隔を指定して分割」のときに出ます。既定はそれぞれ
0/100/10です。 - 区切り位置を入力(複数可)
- 「区切り位置を指定して分割」のときに出ます。境目の値をカンマ区切りで並べます。
- カテゴリ名の設定
- 自動でカテゴリ番号を付与(既定)か自分でカテゴリ名をつける。
- カテゴリ名を入力必須
- 「自分でカテゴリ名をつける」のときに出ます。1 行に 1 つずつ名前を並べます。並べる数はカテゴリの数とぴったり同じにしてください。
- 分割点の重複を削除する
- 「等頻度に分割」のときに出ます。既定は off です。同じ値が多くて区切れないときに on にします。
- 境界の設定
- 等間隔・範囲と間隔・区切り位置のときに出ます。a 以上 b 未満(既定)か a 大なり b 以下。「等頻度に分割」では出ません。等頻度はいつも「a 大なり b 以下」で区切ります。
- カテゴリ付与順を設定
- 番号や名前を、処理対象列の値の昇順(既定)と処理対象列の値の降順のどちらで割り当てるか。降順にすると、いちばん大きい側が 1 になります。どの分け方でも出ます。
- グループ内でカテゴリ化する
- 列を選ぶと、グループごとに区切りを計算し直します。複数の列を選べます。どの分け方でも出ます。
4 つの分け方
| 分け方 | 区切りの決まり方 | カテゴリの数 | 使いどころ |
|---|---|---|---|
| 等間隔に分割 | 最小〜最大を同じ幅で分ける | 分割数のとおり | 分布を粗く見る |
| 等頻度に分割 | 件数がなるべく同じになるように分ける | 分割数のとおり | 上位・中位・下位に分ける |
| 範囲と間隔を指定して分割 | 最小・最大・間隔を自分で決める | (最大 − 最小)÷ 間隔(端数は切り捨て) | 0〜100 を 10 刻みに |
| 区切り位置を指定して分割 | 区切る値を直接書く | 書いた値の数 + 1 | 業務で決まった区切り |
等間隔に分割
処理対象列の実際の最小値から最大値までを、同じ幅で分けます。範囲は自分では決められません。
等頻度に分割
値の小さい方から順に並べて、件数がなるべく同じになるところで区切ります。
同じ値が多いと区切る位置が重なってしまい、エラーになります。そのときは「分割点の重複を削除する」を on にします。on にすると、重なった区切りが 1 つにまとめられるので、できるカテゴリの数は指定した分割数より少なくなります。
範囲と間隔を指定して分割
最小値 から 間隔 ずつ区切って、最大値 までを分けます。0〜100 を 10 刻みにするなら、最小 0・最大 100・間隔 10 で 10 個のカテゴリができます。
割り切れないときは切り捨てます。 最小 0・最大 105・間隔 10 と入れても区切りは 100 までで、100 を超える値は範囲の外(空欄)になります。
区切り位置を指定して分割
境目の値をカンマ区切りで書きます。1000,5000 のように書きます。
書いた値の外側にも、カテゴリが 1 つずつできます。 1000,5000 と書くと、1000 未満 1000 以上 5000 未満 5000 以上 の 3 つになります。両端はどこまでも伸びるので、範囲から外れて空欄になる値はありません。
同じ値を 2 回書いても 1 つとして扱われます。並べる順番は自由です。
区切りの値そのものはどちらに入るか
「境界の設定」で決まります。違いが出るのは、区切りとぴったり同じ値だけです。区切り位置 30 で分けたときの例です。
| 処理対象列の値 | a 以上 b 未満 | a 大なり b 以下 |
|---|---|---|
| 20 | 1 | 1 |
| 30 | 2 | 1 |
| 40 | 2 | 2 |
「a 以上 b 未満」だと 30 は上側のカテゴリに、「a 大なり b 以下」だと下側のカテゴリに入ります。区切りの値を上側に含めたいなら「a 以上 b 未満」を選んでください。
「等頻度に分割」ではこの欄が出ません。 等頻度はいつも「a 大なり b 以下」です。
どちらで区切られたかはカテゴリ閾値の出力の 始点不等号 終点不等号 で確かめられます。
カテゴリに入る値
自動でカテゴリ番号を付与を選ぶと、1 から始まる番号が入ります。 0 ではありません。いちばん小さい側が 1 で、「カテゴリ付与順を設定」を降順にすると、いちばん大きい側が 1 になります。
できる列は文字列の列です。 番号が入っていても数値としては扱われないので、そのまま足したり平均を取ったりはできません。数値として使いたいときは列の型変更をつないでください。
次の 2 つは空欄になります。
- 処理対象列がもともと空欄の行
- 「範囲と間隔を指定して分割」で、指定した範囲の外に出た値
カテゴリ名
自動だと番号(1 2 3 …)が入ります。自分でカテゴリ名をつけるを選ぶと、名前を並べられます。
並べる数はカテゴリの数と同じにしてください。数が合わないとエラーになります。カテゴリの数は分け方で決まります。
| 分け方 | 並べる名前の数 |
|---|---|
| 等間隔に分割 | 分割数と同じ |
| 等頻度に分割 | 分割数と同じ |
| 範囲と間隔を指定して分割 | (最大 − 最小)÷ 間隔(端数は切り捨て) |
| 区切り位置を指定して分割 | 書いた区切り位置の数 + 1 |
名前は値の小さい方から順に割り当てられます。「カテゴリ付与順を設定」を降順にすると、値の大きい方から順になります。
カテゴリ閾値の出力
2 つ目の出力には、どの値で区切ったかが 1 カテゴリ 1 行で入ります。カテゴリの境目を資料に載せたいとき、思ったところで切れているかを確かめたいときに使います。
| 列 | 内容 |
|---|---|
| (結果の列と同じ名前) | カテゴリの番号または名前 |
| 始点 | そのカテゴリの下側の境目 |
| 始点不等号 | 下側の境目を含むなら <=、含まないなら < |
| 終点不等号 | 上側の境目を含むなら <=、含まないなら < |
| 終点 | そのカテゴリの上側の境目 |
| 範囲長 | 終点 − 始点 |
いちばん下といちばん上のカテゴリは境目が決まらないので、処理対象列の実際の最小値・最大値をもとにした値が入ります。「グループ内でカテゴリ化する」を使ったときは、先頭にグループの列が付きます。
グループごとに分けるとき
「グループ内でカテゴリ化する」に列を選ぶと、グループごとに区切りを計算し直します。 店舗によって売上の規模が違うときなどに使います。
出力の行はグループごとにまとまります。 入力の行の並びは保たれません。
エラーと対処
どのエラーも、設定を直してからノードを実行し直せば先に進めます。
カテゴリの数とカテゴリ名の数が合わない
「自分でカテゴリ名をつける」で、並べた名前の数がカテゴリの数と違うとき。
分割数に対してカテゴリ名の数が一致しません。分割の数とカテゴリ名の数を揃えてください。
直し方 — カテゴリ名の表で必要な数を数えて、合わせてください。
行数より分割数が多い
等間隔・等頻度で、分割数が処理対象列の値の数(空欄を除く)より多いとき。
処理対象データ数より分割数が多いため処理を中止しました。分割数を見直してください。
直し方 — 分割数を減らしてください。10 行のデータを 20 分割することはできません。「グループ内でカテゴリ化する」を使っているときは、いちばん行数の少ないグループで足りているかを見てください。
等頻度に分割できない
同じ値が多く、件数を等しく分けられないとき。
値の重複が多いためカテゴリ内の要素数を等しく分割することが出来ません。分割数を少なくするか、オプションの「分割点の重複を削除する」の利用をご検討下さい。
直し方 — 分割数を減らすか、「分割点の重複を削除する」を on にしてください。on にすると、できるカテゴリの数は指定した分割数より少なくなります。
区切り位置の書き方が違う
「区切り位置を入力(複数可)」に数値以外が入っているとき。
区切り位置の指定が正しくありません。数値、カンマ区切りが正しく入力されているかご確認ください。
直し方 — 1000,5000 のように、数値をカンマで区切って書いてください。
範囲と間隔が合わない
範囲と間隔の値が正しくありません。数値を見直してください。
直し方 — 最小が最大より小さいこと、間隔が「最大 − 最小」以下であることを確かめてください。
新規列名が既にある
「新規列名を入力」に入れた名前が、入力データに既にあるとき。
新規列名(
{{new_col}})が既存の列名と重複しています。
{{new_col}} には、重複した列名が入ります。
直し方 — 別の列名を入れるか、「既存列に上書き」に切り替えてください。
列を選ばずに実行した
処理対象列を選択(「既存列に上書き」なら列を選択)が空のまま実行したときに出ます。前の処理で列名が変わり、選んでいた列が入力データからなくなったときにも同じメッセージです。
対象の列が選択されていません。
直し方 — 列を選び直してください。
選んだ列が見つからない
グループ内でカテゴリ化するで指定した列が入力データにないとき、またはどの条件にも 1 列も当たらないとき。前の処理で列名が変わった場合にも出ます。
対象の列が存在しません。
直し方 — グループの列を選び直すか、グループを使わないなら off にしてください。
よく使う例
1. 年齢を年代にする
お題 — 10 歳刻みの年代に分けたい
入力
| 会員 | 年齢 |
|---|---|
| A | 23 |
| B | 38 |
| C | 67 |
設定 — 新規列名 年代、処理対象列 年齢、処理「範囲と間隔を指定して分割」、最小 0、最大 120、間隔 10
出力 — 0〜10 歳未満 が 1 なので、20 代は 3 になります
| 会員 | 年齢 | 年代 |
|---|---|---|
| A | 23 | 3 |
| B | 38 | 4 |
| C | 67 | 7 |
2. 売上を上位・中位・下位に分ける
お題 — 売上の大きさで 3 つに分けたい
入力
| 店舗 | 売上 |
|---|---|
| A | 100 |
| B | 200 |
| C | 300 |
| D | 400 |
| E | 500 |
| F | 600 |
| G | 700 |
| H | 800 |
| I | 900 |
設定 — 新規列名 売上ランク、処理対象列 売上、処理「等頻度に分割」、分割数 3、カテゴリ名を自分で付けて 下位 中位 上位
出力 — 件数は 4 / 3 / 2 になります(等頻度に分割を参照)
| 店舗 | 売上 | 売上ランク |
|---|---|---|
| A | 100 | 下位 |
| B | 200 | 下位 |
| C | 300 | 下位 |
| D | 400 | 下位 |
| E | 500 | 中位 |
| F | 600 | 中位 |
| G | 700 | 中位 |
| H | 800 | 上位 |
| I | 900 | 上位 |
3. 業務で決まった区切りで分ける
お題 — 1000 円未満・1000〜5000 円・5000 円以上の 3 つに分けたい
入力
| 注文 | 金額 |
|---|---|
| A | 800 |
| B | 1500 |
| C | 7000 |
設定 — 新規列名 価格帯、処理対象列 金額、処理「区切り位置を指定して分割」、区切り位置 1000,5000、境界の設定「a 以上 b 未満」
出力 — 書いた区切りは 2 つですが、その外側にもカテゴリができて 3 つになります
| 注文 | 金額 | 価格帯 |
|---|---|---|
| A | 800 | 1 |
| B | 1500 | 2 |
| C | 7000 | 3 |
4. 点数を 5 段階の評価にする
お題 — テストの点数を E 〜 A の 5 段階にしたい
入力
| 生徒 | 点数 |
|---|---|
| A | 0 |
| B | 25 |
| C | 50 |
| D | 75 |
| E | 100 |
設定 — 新規列名 評価、処理対象列 点数、処理「等間隔に分割」、分割数 5、カテゴリ名を自分で付けて E D C B A
出力 — 区切りは実際の最小値 0 から最大値 100 までを 5 等分した位置になります
| 生徒 | 点数 | 評価 |
|---|---|---|
| A | 0 | E |
| B | 25 | D |
| C | 50 | C |
| D | 75 | B |
| E | 100 | A |
5. 店舗ごとの基準で分ける
お題 — 店舗によって売上の規模が違うので、店舗ごとに 3 段階に分けたい
入力
| 店舗 | 商品 | 売上 |
|---|---|---|
| A | りんご | 100 |
| A | みかん | 200 |
| A | ぶどう | 300 |
| B | りんご | 1000 |
| B | みかん | 5000 |
| B | ぶどう | 9000 |
設定 — 新規列名 店内ランク、処理対象列 売上、処理「等間隔に分割」、分割数 3、「グループ内でカテゴリ化する」に 店舗
出力 — 区切りは店舗ごとに計算し直されます
| 店舗 | 商品 | 売上 | 店内ランク |
|---|---|---|---|
| A | りんご | 100 | 1 |
| A | みかん | 200 | 2 |
| A | ぶどう | 300 | 3 |
| B | りんご | 1000 | 1 |
| B | みかん | 5000 | 2 |
| B | ぶどう | 9000 | 3 |
6. どこで区切られたかを確かめる
お題 — 思ったところで切れているかを見たい
入力 — 例 3 と同じ
設定 — 例 3 と同じ
出力 — 2 つ目の出力「カテゴリ閾値」に、区切りの一覧が出ます
| 価格帯 | 始点 | 始点不等号 | 終点不等号 | 終点 | 範囲長 |
|---|---|---|---|---|---|
| 1 | 800 | <= | < | 1000 | 200 |
| 2 | 1000 | <= | < | 5000 | 4000 |
| 3 | 5000 | <= | < | 7001 | 2001 |
いちばん下といちばん上は、データの最小値 800・最大値 7000 をもとにした値で埋められます。
7. 大きい側を 1 番にする
お題 — 売上の大きい方を「1」として並べたい
入力
| 店舗 | 売上 |
|---|---|
| A | 100 |
| B | 200 |
| C | 300 |
設定 — 新規列名 売上ランク、処理対象列 売上、処理「等間隔に分割」、分割数 3、カテゴリ付与順「処理対象列の値の降順」
出力
| 店舗 | 売上 | 売上ランク |
|---|---|---|
| A | 100 | 3 |
| B | 200 | 2 |
| C | 300 | 1 |