皆さん、Dataiku使ってますか?
私も少し前までは抵抗を感じることもあったのですが、日々使っていくことで、Dataikuの良さを実感しています。
Dataikuの良さは色々ありますが、真っ先に思いつくのは「レシピ」でデータ加工が簡単にできることではないでしょうか?
今回は、そのなかでも「Prepare(準備)レシピ」の発展的な使い方を紹介している、Advanced Prepare Recipe Usageをやってみたので、その内容を紹介します。
対象の読者
明確な決まりはないですが、以下に挙げたレベル程度にDataikuに慣れ親しんでいると、内容がよくわかると思います。
- Dataikuの基本的な操作がわかる
- Dataikuでチュートリアルを実施したことがある
Advanced Prepare Recipe Usageの内容について
このコースは以下の7つで構成されています。
・The Prepare Recipe - 導入
・Handling Decimal Notations - Dataikuの10進数表記について
・Enriching Web Logs - ログの解析について
・Applying Prepare Steps to Multiple Columns - 複数列への同じ操作の適用について
・Performing Joins in the Prepare Recipe - データの結合について
・Become a Master of Dataiku DSS Formulas - 数式について
・Custom Python functions in the Prepare Recipe - データセットに対しての行単位の演算について
今回は、このうち「Handling Decimal Notations」「Performing Joins in the Prepare Recipe」の内容を紹介します。残りの項目は後編で紹介します。
Handling Decimal Notations
一般的には、「1,234,567.89」 のような表記で、大数や小数の数値を表します。
しかし、国によってはこの表記とは限らないそうです。
(例えば、「1234567.89」「1 234 567,89」など。)
Dataikuでは、これらの数字をどのように扱うのでしょうか?
結論としては、Dataikuではコンピュータ記法の数字だけを、小数として扱います。
そのため、冒頭の「1,234,567.89」は、Dataikuでは数値ではなく、文字列として扱われます。
下記の例を見てみましょう。
左側のus_notationのカラムの意味は、「Decimal(10進数)」と予測されていますが、最初の2つの値が無効(背景色が赤)となっています。
一方、fr_notationのカラムについては、「Decimal (comma) 」の意味を予測しています。
Dataikuでは、このような国による標記の違いを統一する仕組みがあるようです。
実際に、Prepareレシピでそれを実現できました。
fr_notationのところでクリックすると、画像のようにタブが表示されます。
この中央付近に「Convert French format to regular decimal」という項目があるので、それをクリックします。
すると、下の画像のように、自動で表記が修正されました。
また、カラムの意味もDecimal(comma)から、Decimalに変更されています。
また、us_notationの列も、修正することができます。
「+ ADD A NEW STEP」>「Convert number formats」を選択します。
Convert number formatsで、下記のように設定を行います。
・Column 「us_notation」
・Output column 「us_notation_converted」
・Input format 「English」
・Output format 「Raw」
すると、下記のように新しいカラムが作成されます。
先ほどのfr_notationもfr_notation_convertedとして新しいカラムを作成しました。
これで、同じ数値で異なる表記が異なる場合でも、それを統一できることが確認できました。
以上の方法で、私たちとは異なる数値表現をするデータに出くわした際には、このようにボタン一つで解決ができそうです。
Performing Joins in the Prepare Recipe
Dataikuでデータセットの結合を行う場合、何を選択されているでしょうか?
結合を考えるとき、真っ先に思い浮かぶのがJoinレシピだと思います。しかし、比較的小さなデータセットの左結合の場合は、Prepareレシピを使用して実行することができます。
また、Prepareレシピでは、ファジー結合とジオ結合を実行することもできるようです。
「Haiku-Tshirts」チュートリアルのデータを参考に確認してみましょう。
「Orders」データセットを選択し、prepareレシピを選択します。Output datasetの名前「Orders_prepared」として、レシピを作成します。
画面左下の [+ ADD A NEW STEP] から、[Processors library] の [join] にチェックを入れると、joinレシピの選択肢が3つ出てきます。その中から、[Join with other dataset(memory-based)] を選択します。この機能は、その名の通り、同じプロジェクト内の別のデータセットとの結合を実現してくれます。
このステップでの各設定は以下のようにします。
・Join column 「customer_id」
・Dataset to Join with 「Customers」
・Join column(in other dataset) 「customerID」
・Columns to retrive 「gender」「ip_address」
・Prefix all copied column names with this 「join_」
以上のステップを加えると、「別データセットCustomersの列 customerIDと、このデータセットの列 customer_idを結合する」という指定ができました。
これを反映したデータセットを見てみると、
右側二列に、Customersデータセットから持ってきたデータに「join_」を付けたカラム「join_gender」「join_ip_address」が作成できました。
簡単なデータの結合の場合は、このようにPrepareレシピで実施することで、フローが大きくならずに済みそうです。
まとめ
今回行ったチュートリアルでは、Prepareレシピの便利な使い方が紹介されていました。Dataikuには、まだ知らない便利な機能がたくさんあるんだなと実感しています。後編では、このチュートリアルの残りの項目について紹介します。