Dataikuのvariablesを使ってみる

Dataikuを案件などで本格的に使っていくうえで避けては通れないvariablesについて紹介します。

参考サイト：https://academy.dataiku.com/variables-101/608267

#variablesとは
Dataikuのフローやシナリオ、pythonレシピやRレシピなどで使える変数です。
Applicationsやシナリオと組み合わせることで、Dataikuでできることの幅がぐっと広がります。

#variablesの定義
プロジェクトの上部のメニューから、Variables設定画面に行くことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/3d8ce72b-cb9e-43d3-ab70-46e55a1cffa0.png)

上記VariablesをクリックするとProject variablesを設定する画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/236d818d-4c33-5b83-a223-6b1116fcf6f9.png)



Project variablesにはGlobal variablesとLocal varialbesの二種類があり、どちらもプロジェクト固有の変数です。次のような違いがあります。

 - Local variablesで定義される変数はインスタンス固有。Design nodeからAutomation nodeにデプロイするバンドルには含まれない。
 - Global variablesは、Automation nodeにデプロイするバンドルに含むことができる。

つまり、実運用で使うvariablesは、Global variablesに設定しなければならないということです。



#variablesを試してみる
ここでは簡単に、Visual recipe内でvariablesを試してみます。
## プロジェクトのインポート
[+New PROJECT] > [DSS tutorials]>[Advanced Designer] > [Dataiku Applications(Tutorial)]で、Tutorial用プロジェクトをインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/b54016fd-0c21-bd94-c926-20abac8194b0.png)

フローは以下。本来はApplicationsという別の機能の説明用Tutorialを借りてきています。今回、用いるのはこのごく一部。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/01a52245-084f-2fe3-ad47-1f51a4537e60.png)

最初はフローがBuildされていないので、まずはフローをBuildします。
一番左側のオレンジの丸（ダウンロードレシピ）を右クリックして[Build Flow outputs reachable from here]をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/12e7bbed-8372-869a-58d5-a2887e247f75.png)

デフォルトでBuild required dependenciesが指定されているのでそのまま[BUILD]押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/cea8e7ca-f871-0266-3876-beda676ba6dd.png)

ネットワークの問題で最初のダウンロードでうまくいかない場合は、以下を手動でダウンロードして用います。
https://archive.ics.uci.edu/ml/machine-learning-databases/00502/online_retail_II.xlsx

## 今回やってみること。
フローの右下、赤枠部分に処理を加えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/7c076482-1497-5356-78df-d82f2e593e27.png)

itemsデータセットをのぞいてみると、'Customer ID'という列があることがわかります。
どうやら、商品ごとの購入顧客IDが記載されているようです。

itemsデータセットの次のフィルタレシピで、Customer IDが13758の顧客のみのデータセットに絞っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/a45a1d50-66e8-6a7d-cba3-71f745084b2c.png)

実際に、items_of_one_customerデータセットのCustomer ID列を見てみると、顧客IDが全て13758になっていることがわかります。

この、ハードコードされている13758に対して今回はvariablesを設定します。


## variablesの設定と実行
冒頭で出てきたProject variables画面でLocal varialbesを以下のように設定します。ちなみにjson形式です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/54974eb6-e34b-a26a-cc62-f02ac5d41b3b.png)

さきほどのフィルタレシピで13758とハードコードしていた箇所を"${customer_id}"に書き換えて、右上の[SAVE]クリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/67888997-749f-b883-64ec-e815c122dd55.png)

これでRUNボタン押下により、project variablesのcustomer_idに設定された顧客IDのデータのみを抜き出すレシピになります。

試しに15362に設定してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/cf9b6e39-fb17-0f91-25fe-bbc0ed2bb01b.png)

フィルタレシピを実行すると、後続のitems_of_one_customerデータセットのCustomer IDが15362になっていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/102ba4b3-9860-a370-5b7b-90730c2f6afb.png)


# まとめ
Dataiku DSSのvariablesの設定方法の基本についてやってみました。
今回はvisual recipeで使いましたが、これはpythonコードやシナリオ、Applications、web appと組み合わせて使うことで、非常に実運用で使い倒せる機能となっています。
そのうち、Applicationsやコードでのvariablesの仕様方法についても時間があったらまとめたいです。