フロー構築の「手間」と「メンテナンス負荷」を最小限にする
Dataikuでフローを構築する際、出力先の変更や処理の追加が必要になる場面は多々あります。そのたびにレシピの入出力を手動で繋ぎ変えたり、データの列が増えるたびにレシピの設定を修正したりすることに、「地味に手間がかかるな……」と頭を悩ませている方は多いのではないでしょうか。
こうした作業は、単に時間が奪われるだけでなく、人的ミスの原因にもなりかねません。実はDataikuには、こうした運用上のストレスを解消し、「仕様変更があっても動じないフロー」を最小限の手間で実現するための仕組みが、あちこちに組み込まれています。
今回は、日々のフロー構築をよりスマートにし、メンテナンス負荷を劇的に抑えるための3つのテクニックをご紹介します。
データセットの接続を簡単に変更する
プロジェクトが進むと、出力先のデータベースを本番用のデータベースに切り替えたい場面などが出てきます。
その際に、変更したいデータセットを出力するレシピから、わざわざ新しいデータセットを生成し、さらに後続のすべてのレシピの入力として繋ぎ変える……という、気の遠くなるような作業をしていませんか?
実は、対象のデータセットをクリックし、「アクション」タブから「接続を変更」をクリックするだけで、この悩みは解決します。レシピを壊すことなく、安全にデータソースを差し替えられるこの機能は、環境移行などの際にも非常に重宝します。
レシピの割り込み作成と再接続
「フローの途中に一つ追加でレシピを挟みたい」と思ったとき、皆さんはどうしていますか?
入出力を一つずつ設定し直して「無理やり割り込ませる」手順を踏んでいる方も多いかもしれませんが、もっと簡単な方法があります。
追加したい箇所にあるデータセットを右クリックし、メニューから「このデータセット…の後にレシピを挿入」をクリックし、追加したいレシピを選択すれば、そのデータセットを出力とするレシピの直前にレシピを割り込ませることができます。
さらに便利なのが、レシピを削除したいときです。不要なレシピを右クリックして「削除して再接続(Delete and reconnect)」を選択すると、そのレシピと出力データセットが削除されると同時に、前のデータセットと後続のレシピを自動で繋いでくれます。フローの試行錯誤がこれだけで一気に加速します。
※注意点として、分割(Split)レシピや結合(Join)レシピ、あるいはグループレシピやピボットレシピなど、一部のレシピでは、レシピの割り込みや削除して再接続が利用できない場合があります。その際は従来通りの繋ぎ変えが必要です
準備レシピで「UNPIVOT(横持ちから縦持ち)」を完結させる
データの列数が取り込みのたびに増えたり減ったりする「可変」なデータを扱うのは、データ分析における大きな悩みどころです。
通常、列が可変だと取り込むたびにレシピを修正したり、複雑なPythonコードレシピを書いたりして対応する必要があります。しかし、Dataikuの「準備レシピ」にある「Fold multiple columns by patternプロセッサ」を使えば、GUI操作だけでデータを縦持ちに変換できます。
例えば、以下のような「顧客ID」と「各月の売上」データがあるとします。そして、各月の売上が登録されるごとに列数が増えていくデータとします。このようなデータの場合にUNPIVOTを行うことが有効になります。
| 顧客ID | 1月売上 | 2月売上 | 3月売上 |
| C001 | 10,000 | 12,000 | 11,000 |
| C002 | 8,000 | 9,500 | 10,000 |
以下のように、縦持ちに変換してしまえば、元データの列がどれだけ増減しても、後続の処理に影響を与えることなくスムーズにデータを整形できます。
| 顧客ID | 月 | 売上 |
| C001 | 1月売上 | 10,000 |
| C001 | 2月売上 | 12,000 |
| C001 | 3月売上 | 11,000 |
| C002 | 1月売上 | 8,000 |
| C002 | 2月売上 | 9,500 |
| C002 | 3月売上 | 10,000 |
準備レシピでは、Fold multiple columns by patternプロセッサを以下のように設定することで実現できます。
- 折りたたみパターン
縦持ちに変換したい対象の列名を指定します。今回の例では.*売上$という正規表現を使用することで、「〇〇月売上」のように「売上」で終わる列名をすべて自動で取得しています。 - 折りたたみ名の列
もとの列名(「1月売上」「2月売上」など)を格納するための新しい列名を指定します。 - 折りたたみ値の列
実際に格納されている数値データ(売上金額など)を入れるための列名を指定します。 - 折りたたまれた列を削除
変換前の「横持ち」の列をフローに残す必要はないため、基本的にはチェックを入れて問題ありません。
データの構造を「縦持ち」に変換しておくことで、その後の集計作業が圧倒的にスムーズになります。
例えば、顧客ごとの年間売上を算出したい場合、横持ちの状態では列ごとに足し合わせる計算式が必要になります。その場合、列が増えるたびに計算式を修正する必要があります。ですが、縦持ちであれば「顧客ID」をグループキーに指定して「売上(折りたたみ値)」を合計するだけで、簡単にグループレシピで求められるようになります。また、月が新しく増えたとしても、このグループレシピの設定を変更する必要はありません
まとめ
Dataikuには、今回紹介したような「実は標準機能で解決できる」便利な機能がたくさん存在しています。これらを上手く使いこなすことで、フローの作成を効率化し、より本質的なデータ分析の時間を作り出すことができます。
「もっと早く知りたかった!」という機能は、使えば使うほど見つかるはずです。ぜひご自身のプロジェクトでも早速試してみてください。