欠損値処理
空欄(欠損値)を削除・補完・抽出します。計算や機械学習の前に、空欄をどう扱うかを決めるノードです。
時系列のデータを前後の値から埋めたいときは時系列に沿った欠損値処理を使ってください。
入出力
| ポート | 内容 |
|---|---|
| 入力データ | データ |
| 出力データ | データ |
Spark エンジンでも動きます。
選んだ処理によって、変わるものが違います。
| 処理 | 行 | 列 |
|---|---|---|
| 欠損値を削除 | 減ることがある | 減ることがある |
| 欠損値を補完 | 変わらない | 変わらない |
| 欠損値を抽出 | 減ることがある | 減ることがある |
| 欠損値を含む行にフラグ立て | 変わらない | 1 列増える |
設定項目
「オプション」はチェックを入れるまで中身が出ません。 見出しの横のチェックボックスを on にすると、処理対象列を限定する / 判定結果の挿入先を指定する / 列名を入力 が出ます。
- 処理を選択必須
- 欠損値を削除(既定)/ 欠損値を補完 / 欠損値を抽出 / 欠損値を含む行にフラグ立て。選んだ処理によって、以降の項目が変わります。
欠損値を削除を選んだとき
- 処理方向を選択必須
- 行を削除(既定)か列を削除。
- 処理方法を選択必須
- 欠損値を一つでも含む行(列)を削除(既定)か全てが欠損値である行(列)を削除。文言は処理方向に合わせて変わります。
- 処理対象列を限定する
- 既定は off。on にすると列を選ぶ欄が出て、選んだ列だけを見て判定します。off だと全列を見ます。
欠損値を抽出を選んだとき
- 処理方向を選択必須
- 行を抽出(既定)か列を抽出。
- 処理方法を選択必須
- 欠損値を一つでも含む行(列)を抽出(既定)か全てが欠損値である行(列)を抽出。
- 処理対象列を限定する
- 削除と同じです。
欠損値を含む行にフラグ立てを選んだとき
- 処理方法を選択必須
- 欠損値を一つでも含む行を判定(既定)か全てが欠損値の行を判定。
- 処理対象列を限定する
- 削除と同じです。
- 判定結果の挿入先を指定する
- 既定は off。on にすると列名を入力が出ます。off のときの列名は
欠損値フラグです。
フラグの列には 1 と 0 が入ります。 当てはまる行が 1 です。
欠損値を補完を選んだとき
補完という組になっていて、いくつでも足せます。
- 対象列を選択必須
- 埋める列。複数選べます。
- 補完方法を選択必須
- 平均値で補完 / 中央値で補完 / 最頻値で補完 / 指定した値を代入 / 直前の値で順次補完 / 直後の値で順次補完。既定はありません。
- 補完する値を入力必須
- 指定した値を代入のときだけ出ます。
補完方法の選び方
| 方法 | 向いている場面 | 注意 |
|---|---|---|
| 平均値で補完 | 数値で、分布が偏っていない | 外れ値に引きずられる |
| 中央値で補完 | 数値で、外れ値がある | |
| 最頻値で補完 | カテゴリや少数の値 | |
| 指定した値を代入 | 0 や「不明」を入れたい | 列の型に合う値が必要 |
| 直前の値で順次補完 | 時系列で、前の値を引き継げる | 行の並び順に依存する |
| 直後の値で順次補完 | 同上 | 同上 |
4 つの処理
| 処理 | 結果 |
|---|---|
| 欠損値を削除 | 空欄を含む行(または列)を消す |
| 欠損値を補完 | 空欄に値を入れる |
| 欠損値を抽出 | 空欄を含む行(または列)だけを残す |
| 欠損値を含む行にフラグ立て | 全行を残し、判定の列を増やす |
まず「抽出」でどれくらい空欄があるか見てから、削除か補完かを決めると安全です。
エラーと対処
列の型に合わない値を指定した
指定した値を代入で、列の型にできない値を入れたときに出ます。
{{value_name}}列には{{value_name}}以外は代入できません。
{{value_name}} には列の型が入ります(数値 / 日付 / 日付時間)。
直し方 — 列の型に合う値を入れてください。数値の列に「不明」は入れられません。文字列として扱いたいなら、先に列の型変更で文字列にします。
補完方法を選んでいない
補完の組で、補完方法を選択が空のままだと出ます。
補完方法が選択されていません。
直し方 — 組ごとに補完方法を選んでください。
補完の対象列が入力にない
欠損値を補完の組で、選んだ列が入力にないときに出ます。
対象の列が存在しません。
直し方 — 組ごとに対象列を選択を選び直してください。前の処理で列名を変えた・列を消したときも、ここを選び直す必要があります。
よく使う例
1. 空欄のある行を消す
分析に使えない行を落としたいとき。
入力
| 店舗 | 売上 | 来店数 |
|---|---|---|
| 渋谷 | 100 | 10 |
| 新宿 | (空欄) | 8 |
設定
| 設定項目 | 値 |
|---|---|
| 処理を選択 | 欠損値を削除 |
| 処理方向を選択 | 行を削除 |
| 処理方法を選択 | 欠損値を一つでも含む行を削除 |
出力 — 渋谷の 1 行だけが残ります。
2. 全部空の行だけ消す
一部が空なだけの行は残したいとき。
入力
| 店舗 | 売上 | 来店数 |
|---|---|---|
| 渋谷 | 100 | 10 |
| 新宿 | (空欄) | 8 |
| (空欄) | (空欄) | (空欄) |
設定
| 設定項目 | 値 |
|---|---|
| 処理を選択 | 欠損値を削除 |
| 処理方向を選択 | 行を削除 |
| 処理方法を選択 | 全てが欠損値である行を削除 |
出力 — 3 行目だけが消え、渋谷と新宿が残ります。
3. 特定の列だけ見て行を消す
売上が空の行は落としたいが、備考が空なだけの行は残したいとき。
入力
| 店舗 | 売上 | 備考 |
|---|---|---|
| 渋谷 | 100 | (空欄) |
| 新宿 | (空欄) | 改装中 |
設定
| 設定項目 | 値 |
|---|---|
| 処理を選択 | 欠損値を削除 |
| 処理方向を選択 | 行を削除 |
| 処理対象列を限定する | on(列に 売上) |
出力 — 渋谷の 1 行だけが残ります。備考が空でも消えません。
4. 数値を 0 で埋める
未入力を 0 として集計したいとき。
入力
| 商品 | 在庫 |
|---|---|
| A | 12 |
| B | (空欄) |
設定
| 設定項目 | 値 |
|---|---|
| 処理を選択 | 欠損値を補完 |
| 対象列を選択 | 在庫 |
| 補完方法を選択 | 指定した値を代入 |
| 補完する値を入力 | 0 |
出力 — B の在庫が 0 になります。
5. 列ごとに違う方法で埋める
数値は中央値、カテゴリは最頻値にしたいとき。
入力
| 顧客 | 年齢 | 会員区分 |
|---|---|---|
| C-1 | 32 | 一般 |
| C-2 | (空欄) | (空欄) |
| C-3 | 48 | 一般 |
設定 — 補完を 2 つ足します。
| 組 | 対象列を選択 | 補完方法を選択 |
|---|---|---|
| #1 | 年齢 | 中央値で補完 |
| #2 | 会員区分 | 最頻値で補完 |
出力 — C-2 の年齢が 40、会員区分が 一般 になります。
6. どれくらい空欄があるか調べる
消す前に、空欄を含む行がどれだけあるかを数えたいとき。
入力 — 例 1 と同じ
設定
| 設定項目 | 値 |
|---|---|
| 処理を選択 | 欠損値を抽出 |
| 処理方向を選択 | 行を抽出 |
| 処理方法を選択 | 欠損値を一つでも含む行を抽出 |
出力 — 新宿の 1 行だけが残ります。行数がそのまま「空欄を含む行の数」です。
7. 全行を残したまま印を付ける
空欄のある行を消さずに、あとで絞り込めるようにしておきたいとき。
入力 — 例 1 と同じ
設定
| 設定項目 | 値 |
|---|---|
| 処理を選択 | 欠損値を含む行にフラグ立て |
| 処理方法を選択 | 欠損値を一つでも含む行を判定 |
| 判定結果の挿入先を指定する | on(列名 要確認) |
出力 — 2 行とも残り、要確認 が 0 / 1 になります。