はじめに
こんにちは、自動化大好きまっきーです。
今回は便利なNode、Column Expressionsについて解説します。
実はこのNode、意図的に解説していませんでした。理由は、下記の通りです。
- 自由度が高い:このNodeは自由度が高く、これを多用してしまうとKNIMEの利点であるWorkflowのビジュアルからLogicが分かる点が薄れてしまう
- 追加インストールが必要:拡張機能から追加Installしないと使えないNodeです。(たしか、うろ覚えですが、、間違っていたら教えてください。。)
ただ、とても便利なNodeで、KNIMEのTrainingにも出てくるようなNodeですし、紹介してほしいというリクエストがあったので掲載しようと思います。慣れてきたら使ってもいいと思います。他人に共有するワークフローの場合、多用するのはあまりオススメしてないです。
今回のテーマ ~Column Expresions~
覚えてほしいこと
共有する場合、多用は避けるかコメントをできる限り残しておく
やりたいこと
String Manipulation、Math Formula、Rule Engineで達成できる下記の3つのやりたいことをColumn Expressions1つで達成する
これらはMath Forumla, String Manipulation, Rule Engineを使用すれば達成できます。
やりたいこと1 - Math Formula
残業代を2000円/hとして計算する
やりたいこと2 - String Manipulation
文字結合を行い、文章を作成する
やりたいこと3 - Rule Engine
ものすごく意図的ですが、、
残業時間の合計が、8時間以下ならOK、15時間以下ならRisk、15時間より大きい場合は、NGというラベルをつけます。欠損値がある場合に備えてデフォルト値は、Missingとします。
Column Expressionsの使い方
String Manipulation、Math Formula、Rule Engineの機能が一つにまとまったようなNodeです。複数カラムを一括で処理できるのがメリットです。コーディングのような自由度があるため、多用するのはオススメしていません。
Workflow - Column Expressions
Workflowは下記リンクからダウンロードできます。
Column Expressions - 一括カラム操作 – KNIME Hub
Confirm - Column Expressions
String Manipulation、Math Formula、Rule Engineの3Nodeを使った時と全く同じOutputになっていると思います。このように複数カラムが1Nodeで完結できるので、Nodeを組みあげる作業が減ります。
Configure - Column Expressions
自由度が高いですが、Configureはシンプルな画面です。
Step1 - Columnの指定
ExpressionはStep2で解説するので、ここではその他の項目について解説します。
上のプラスボタンから新しいExpressionを追加することができ、マイナスボタンからカラムを削除できます。
イメージとしては、このボタンでString Manipulation・Math Formula・Rule EngineにあたるNode1つを追加したり削除したりするものです。
- Expression:使用する関数・ロジックを示したもの。Step2で編集する。
- Type:データ型を指定する
- Collection:リスト型としてカラム作成
- Replace Column:Output Columnで指定した既存カラムを上書きする
- Output Column:出力時のカラム名
また、矢印のボタンで出力順番を変更できます。
Step2 - 関数の挿入 - Expression Editor
やりたいことごとにExpressionをお見せします。String Manipulation/Math Formula/Rule EngineとExpressionの表現が違うのでその違いも注意しましょう。
すでに表現を覚えている方は、直接入力していただいて問題ないのですが、分からない人のためにのボタンから補助してもらえます。クリックすると、使用できるカラムのリストや、変数のリスト、関数のリストが選択できます。
やりたいこと1 - Math Formula
残業代を2000円/hとして計算することでしたね。下図がExpressionになります。違いは、カラムの表現が「column("")」なのか、「$$」なのかです。
やりたいこと2 - String Manipulation
文字結合を行い、文章を作成することを行います。これらも、違いは、カラムの表現が「column("")」なのか、「$$」なのかです。
やりたいこと3 - Rule Engine
一番自由度を高くしているのがRule Engineの部分です。
残業時間の合計が、8時間以下ならOK、15時間以下ならRisk、15時間より大きい場合は、NGというラベルをつけます。欠損値がある場合に備えてデフォルト値は、Missingとします。
まさかのColumn Expressionの方が長い(Rule Engine 4行 vs Column Expression 11行)という結果。。
ただ、プログラミングをご存知の方はColumn Expressionの方が親しみが湧くのではないでしょうか。これのいい点は、プログラミング言語のように、Expression内で変数が定義できる点です。if文もプログラミング言語の表現そのままって感じですよね。
個人的には、どうやってoutputの変数を結びつけてるんだ!?という違和感が残りますが、outputの変数っぽいのを勝手に判断してくれるようです。今回はoutという変数を作っています。
Step3 - 関数の表現確認 - Evaluate
特にRule Engineに近しいExpressionだと、本当に正しく動いているのか。。。?と気になりますよね。そこで登場するのがこのEvaluate機能です。
Evaluateというボタンを押せば、現在のExpressionで最初の行を判断した時の値を出力してくれます。
おわりに
お疲れ様でした!やっぱ便利ですよね。特に複数カラム同じような処理を行わないといけない場合、とても便利だと思います。使いすぎ注意ですが、ぜひ使ってみてください。
もし何かリクエスト等ありましたらお気軽にDM等でお問い合わせください〜、ではまた!
KNIME Hubワークスペース
Twitter アカウント
まっきー | デジタル推進課 (@makkynm) | Twitter
KNIMEに関する本
KNIMEに関する日本語の本って今これくらいしかないと思うんですよね、、
本がいいなーと言う人はぜひ試してみてください。
参考リンク
- KNIME TV(英語):
- KNIME Example Workflow(英語):
-
KNIME公式サイト(英語):
Column Expressions for Data Manipulation | KNIME