たまにはちょっとソフトウェア

ワークフロー&スウィィート

KNIMEメモ:Workflow Reader と Workflow Executor を使う

 

KNIME の Workflow Reader と Workflow Executor を使って、TeachOpenCADD のワークフローを再構築した。

f:id:tymsk3891:20220127233647p:plain

せっかく作ったので、KNIME HUBに置いた。

kni.me

Workflow Executor でエラーが起きた場合、メタノードのようにエラー個所をすぐ見れないので好き嫌いが分かれそう。でも個人的にはコンポーネントより好き。

 

まとめ

TeachOpenCADD のワークフローを KNIME 4.5.1 で再構築した。CHEMBL ID 203 と 2046267 で動作検証したので動くはず。

 

 

KNIMEメモ:複数ファイルを読み込む方法

 

KNIMEで複数ファイルを読み込む方法を調べると、ループを使う方法にたどり着く。
実は最近のKNIME (ver.4.3以降) ならループを使わなくて良い場合がある。

複数のCSVファイルを1つにまとめるフローの例を挙げておく。

f:id:tymsk3891:20220121232735p:plain

昔のフロー

f:id:tymsk3891:20220121232847p:plain

最近のフロー

 

まとめ

最近のReader系ノードはディレクトリ配下の複数ファイル読み込みに対応している。

 

補足

  • バージョン 4.2 --- 昔のフローを作成する必要がある。
  • バージョン 4.3 --- 一部のReader系ノードが対応しているが、読み込みファイルが特定できず使いにくい。
  • バージョン 4.4 --- 主要なReader系ノードが対応し、読み込みファイルが特定できるようになった。JSONXMLの読み込みが未対応。
  • バージョン 4.5 --- JSONXMLの読み込みも含め、主要なReader系ノードが対応した。
  • 複数ファイル読み込み非対応のReader系ノードを使う場合、昔のフローを作成する必要がある。

 

 

KNIMEメモ:Python Script (Labs) ノードが速い

 

KNIME 4.5 で登場した Python Script (Labs) ノードが速い。

 

従来の Python Script ノードは入力テーブルの行数が10万超えた辺りでかなり遅くなっていたのだが、劇的に改善したらしい。テーブルを入力してそのまま出力するだけの処理でベンチマークしてみた。5万行超えた辺りから明らかな性能差がみられる。

f:id:tymsk3891:20211220233244p:plain

Python Script ノードの新旧ベンチマーク

1000万行まで処理してみたが、10秒程度で終わった。

f:id:tymsk3891:20211220234720p:plain

2000行以下の処理が若干遅いのは Python カーネルの呼び出しタイミングの影響なので、気になる人は Preferences の値を変更してみると良いかも。

f:id:tymsk3891:20211220235311p:plain

Python カーネルの呼び出し周り変えたい人用設定

まとめ

Python Script (Labs) ノードが速い。

 

KNIME 4.1 について

  

 

個人的にお気に入りのソフトウェア「KNIME Analytics Platform(以下 KNIME)」の最新バージョン 4.1.0 がリリースされました。早速新機能をチェックしてみましょう。

 

Navigation in the Workflow Canvas

ワークフローキャンバス上で Ctrl+F(Macの場合はCommand+F)を押して、ワークフロー内のノードを検索できるようになりました。ノード名、ノードID、コメントで検索できます。

f:id:tymsk3891:20191208015411p:plain

Ctrl+F を押すとワークフローのノード一覧が表示

f:id:tymsk3891:20191208015208p:plain

「抽出」をキーワードにして検索

 

Machine Learning

Binary Classification Inspector node

二項分類問題では、分類しきい値を調整して、分類タスクに合わせてモデルを最適化することが不可欠です。Binary Classification Inspectorノードは、機械学習アルゴリズムごとに最適なしきい値を適用することにより、二項分類子を比較するのを助けてくれます。

 

AWS Personalization Service

Amazon Personalize サービスと連携できるノード群がリリースされました。使用するには AWS 環境と資格情報が必要です。

aws.amazon.com

 

 

Components

 Component がワークフローと同様に KNIME Explorer 上でダブルクリックして編集できるようになりました。Component の説明に加え、カテゴリとアイコンも設定できるようになりました。 

f:id:tymsk3891:20191214143030p:plain

Component に色とアイコンを設定

 

Input Filtering and Validation

 Column Filter Configuration ノードと Column Selection Configuration ノードが拡張されました。選択対象とする列のタイプを選択したり、選択数の下限値を設定できるようになりました。

f:id:tymsk3891:20191214154432p:plain

KNIME 4.1 の設定画面

f:id:tymsk3891:20191214154519p:plain

KNIME 4.0 の設定画面

 

Nodes, Nodes, Nodes (新ノード)

MDF

 MDF(Measurement Data Format)はバイナリファイル形式で、測定およびキャリブレーションシステムの事実上の標準です。MDF Readerノードを使用すればMDF ファイルを読み込むことができます。

f:id:tymsk3891:20191214230503p:plain

.mf4 ファイルを読んだ状態

 Power BI

 Send to Power BI ノードを使えば、KNIMEで作成したデータをPower BIに簡単にアップロードできます。 ノードのダイアログでOAuthベースの認証を使用し、データをアップロードするワークスペース、データセット、およびテーブルを選択します。ノードを実行すると、すべてのデータがPower BIダッシュボードで利用可能になります。

 Row Filter (Labs)

Row Filter (Labs) ノードを使用すると、行インデックスや行IDなど、複数の列の条件で行をフィルターできます。 KNIME Labs Extensions として提供されているので、複数の条件に基づいてデータをフィルタリングする場合は、試してみると良いでしょう。

f:id:tymsk3891:20191214232247p:plain

複数条件を組み合わせてフィルター

 Webpage Retriever

 Webpage Retriever ノードは HTTP GET 要求を発行し、Webページを取得します。 XHTML 形式に変換できるので、XPath ノードを使用すれば取得した Web ページから必要な情報を抽出できます。 Web ページからCookieを抽出したり、リクエストにCookieを含めることもできます。

f:id:tymsk3891:20191215233858p:plain

得られた XHTMLXPath ノードで解析

 Top k Selector

 Top k Selector ノードを使えば、指定した並べ替え規則に従って上位 k 行を選択できます。Active Learning 拡張機能の Element Selector ノードをKNIME 標準ノードとして完全に書き直したものです。Sorter ノードと Row Filter ノードを1つにしたようなノードです。 

f:id:tymsk3891:20191215235859p:plain

上下とも同じ結果になる

 

KNIME Database Extension

 DB Connection Extractor ノードや DB Connection Closer ノードなどの実用的なノードが追加されましたが、大きな改良点はトランザクション管理ができるようになったことです。 DB Transaction Start ノードと DB Transaction End ノードでトランザクション限界を指定できるようになりました。

 

kni.me

 

 Technical Improvements

 Dynamic Ports

 一部のノード(Concatenateノードなど)でポート数が変更できるようになりました。 左下隅に3つの黒い点があるノードが対応しています。

f:id:tymsk3891:20191217001529p:plain

Concatenate のポートを増やした例

 New Flow Variable Types

KNIME Analytics Platform 4.1では、新しいタイプのフロー変数が導入されています。 これまでフロー変数は string、integer、および double が使用可能でしたが、新たにboolean、long、array タイプが使えるようになりました。

 

まとめ

 ユーザの使いやすさを向上させるアップデートとなりました。Component のアイコン部分に愛犬の写真など入れてみてはいかがでしょうか。

 

KNIME 4.0 について

 

www.knime.com

 

 

個人的にお気に入りのソフトウェア「KNIME」の最新バージョン 4.0 がリリースされました。早速新機能をチェックしてみましょう。

Components

Wrapped Metanodes の呼び名が Components に変更されました。右クリックメニューの Metanode の内容などが変更になっています。使用感は変わらず、普通の Metanode はそのままのようです。(細かい変更理由はこちら

f:id:tymsk3891:20190629155024p:plain

KNIME 4.0 - Components

f:id:tymsk3891:20190629155307p:plain

KNIME 3.7 - Wrapped Metanodes

Performance

KNIME のパフォーマンスが大きく改善しました。

  • できる限り直近に読み込んだテーブルをメモリに保持
  • テーブルをメモリに保持できない場合、高度なファイル圧縮アルゴリズムを使用
  • ノードのデータ処理量の大部分を並列化
  • ガベージコレクションアルゴリズムの更新によってフリーズが減少
  • Parquet カラムナフォーマットのテーブルを利用

数倍スピードアップした例が紹介されています。

KNIME Database Extension

KNIME Labs でリリースされていた DB ノードが正式なノードとしてリリースされました。旧 Database ノードからパワーアップしているようです。

  • データタイプマッピング
  • データベーススキーマの操作性
  • ドライバー管理
  • データベース接続管理
  • 全 Reader / Writer ノードのストリーミング対応
  • 進化した SQL エディタ(シンタックスハイライト、プレビュー)

f:id:tymsk3891:20190629172653p:plain

KNIME 4.0 - DB vs. KNIME 3.7 - Database

Machine Learning

機械学習モデル解釈と自動化のためのノードと新しいアルゴリズムが追加されました。

Machine Learning Interpretability (機械学習解釈可能性)

LIME / SHAP / Shapley Values Loop ノードを使うと、予測モデルが行ごとにどのように動作するかの説明が得られ、モデルの予測結果についての理解を助けてくれます。

Partial Dependence/ICE Plot (JavaScript) ノードを使うと、モデル予測が単一列の変化にどのように反応するか調べることができます。

 

Machine Learning Algorithms

以下が追加されました。

  • Isolation Forest (H2O)
  • t-SNE 
  • ONNX フォーマットの読み込み

 

Machine Learning Automation

Parameter Optimization Loop ノードで Bayesian Optimization (ベイズ的最適化)が使えるようになりました。

 

Plotly Integration

Plotly のライブラリがバンドルされ、Plotly ライブラリを使った View ノードが追加されました。

f:id:tymsk3891:20190704014151p:plain

JavaScript Views - Plotly

f:id:tymsk3891:20190704014035p:plain

3D Scatter Plot (Plotly)

 

Duplicate Row Filter

Duplicate Row Filter ノードが追加されました。重複行を除くシンプルなノードですが、コミュニティからのリクエストに応えて作成されました。GroupBy ノードを使うよりも直感的に重複除去できます。

 

AdoptOpenJDK

KNIME Analytics Platform 4.0 から Java ランタイムが AdoptOpenJDK に変更されました。以前は Oracle Java を使用していました。

 

クラウド系、ビッグデータ、商用版の機能については割愛します。

 

まとめ

機械学習を自動化するための機能が強化され、KNIMEによって分析が完全自動化できる日がすぐそこまで来ているような気がします。

 

 

KNIME メモ:固定値の列を追加する

 

個人的によく使う、KNIMEで固定値の列を追加する方法をメモしておきます。

 

Constant Value Column ノードを使う

一番シンプルな方法。

f:id:tymsk3891:20190430010403p:plain

 

Java Snippet ノードを使う

Java のコードを書かなければならないが、return 文1行でいける。

f:id:tymsk3891:20190430010751p:plain

f:id:tymsk3891:20190430010842p:plain

 

String Manipulation ノードを使う

これも string() 関数を使って1行で書ける。

f:id:tymsk3891:20190430011431p:plain

f:id:tymsk3891:20190430011515p:plain

 

Table Row to Variable ノードを使う

別テーブルの列名と固定値を使って、列を追加する。変数を使わなければいけない。

f:id:tymsk3891:20190430012433p:plain

 

Column Appender ノード + Missing Value ノード を使う

昔作ったワークフローから発掘した今思えば非効率な方法。2つの警告マークがあるのがチャームポイント。

f:id:tymsk3891:20190430013032p:plain

 

まとめ

 個人的には Java Snippet ノードまたは String Manipulation ノードを使う方法がプログラマーみたいでかっこいいと思います。

 

 

KNIME メモ:Int To Double

 

KNIME で列を Integer 型から Double 型に変換する方法をメモしておきます。

 

「値段」列を Integer 型から Double 型に変換する。

f:id:tymsk3891:20190216150121p:plain

 ↓↓↓

f:id:tymsk3891:20190227235419p:plain

 

(方法)

Round Double ノードを使う。

f:id:tymsk3891:20190227235904p:plain

Round Double ノードの設定例

f:id:tymsk3891:20190227235931p:plain

 

ちなみにこの逆の Double To Int ノードは存在する。