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

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

KNIME メモ:値を欠損値に置き換える

 

KNIME で値を欠損値*1に置き換える方法をメモしておきます。 

 

(品名「みかん」を欠損値に置換した例)

f:id:tymsk3891:20190216150121p:plain

 ↓↓↓

f:id:tymsk3891:20190216150217p:plain

 

(その1)

Java Snippet (simple) ノード等を使って、値を null に置き換える。*2

f:id:tymsk3891:20190216150847p:plain

 

(その2)

String Manipulation ノードの toNull 関数*3を使う。toNull 関数は空文字("")を null に置換する関数なので、その前に String Replacer ノード等で欠損値にしたい文字列を空文字にする。

f:id:tymsk3891:20190216152407p:plain

f:id:tymsk3891:20190216152858p:plain

 

 

 

*1:赤色の?マーク

*2:文字列と数値どちらにも使える。

*3:toNull 関数は Column Expressions ノードでも使える。

KNIME 3.7 について

 

 

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

www.knime.com

 

New Statistics Nodes

KNIME Labs の Statistics に3つの検定ノードが追加されました。

f:id:tymsk3891:20181216000440p:plain

 

Jupyter Integration

Python 関連ノードで Jupyter Notebook(.ipynb)をインポートし、そのまま実行できるようになりました。

例えば、下図のような Jupyter Notebook を「getIris.ipynb」ファイルとして出力します。  

f:id:tymsk3891:20181216003305p:plain

次に Python Source ノードで knime_jupyter.load_notebook 関数を使って「getIris.ipynb」ファイルを読み込み、getIris 関数の戻り値を output_table に渡すコードを書きます。

f:id:tymsk3891:20181216005656p:plain

Python Source ノードを実行すると、Irisデータが出力されます。

f:id:tymsk3891:20181216010239p:plain



XGBoost Integration

XGBoost が使えるようになりました。Linear Ensemble と Tree Ensemble の2タイプがあり、どちらも分類と回帰に対応しています。

f:id:tymsk3891:20181216011213p:plain

 

Google Authentication and Google Drive Connectivity

新しい Google Drive Connection ノードは Google ドライブに保存したファイルをKNIMEリモートファイル処理ノードと一緒に使用できます。マイドライブとチームドライブの両方に対応しています。Google Authentication ノードは Google Sheets / Google Drive / Google Analytics.など様々なサービスに使用できます。

 

Updated Tableau Integration

Tableau との連携が強化されました。*1

 

Usability Improvements

Zooming with the Keyboard

ワークフローエディタの拡大・縮小がキーボードショートカットでもできるようになりました。CTRL + で拡大、CTRL - で縮小できます。

 

Guided Analytics and New Views

Heatmap

JavaScript Views にヒートマップを作成できる Heatmap ノードが追加されました。カラーマップを変更したり、他の Views ノードと連携することもできます。

f:id:tymsk3891:20181216130608p:plain

Hierarchical Cluster Assigner

Hierarchical Cluster Assigner ノードを使うと、階層型クラスタ樹形図を視覚化し、ユーザーがクラスタ数を決定するしきい値を対話式に設定できます。 他の Views ノードと連携することもできます。

f:id:tymsk3891:20181216132150p:plain

 

Tile View

Card View ノードは KNIME テーブルの代わりとなるビューを提供します。Table View ノードと似ていますが、画像が表示できるという特徴があります。

f:id:tymsk3891:20181216121453p:plain

「Card View」は商標の都合上、KNIME 3.7.1 では「Tile View」に変更されるようです。

 

CSS Editor

JavaScript ビューのスタイルシートを編集するためのノードです。シンタックスハイライトやオートコンプリートが使えます。

f:id:tymsk3891:20181216132912p:plain

 

Interactive Layout Editor and Nested Wrapped Metanodes

ラップメタノードのレイアウトエディタに「Visual Layout」機能が追加されました。ドラッグ&ドロップでレイアウト操作したり、ラップメタノードをラップメタノード内に配置できるようになりました。

f:id:tymsk3891:20181216124109p:plain

 

いつもどおり、ビッグデータ系の話、商用版の機能については割愛します。

 

まとめ

JavaScript を使った機能拡張が順調に進んでいるようです。

 

 

*1:Tableauは有償ソフトウェアなので省略

KNIME メモ:圧縮ファイルを扱う

 

KNIME で圧縮ファイルを扱うときの注意点をメモしておきます。 

  • .zip / .gz / .tar 形式で圧縮されたテキストファイルは Reader 系ノードで直接開ける。*1
  • zip の中に複数のテキストファイルが含まれていると、File Reader ノードの場合、1つ目のファイルが開かれる。*2
  • 非テキストファイル(.xlsx など)や複数ファイルからなる圧縮ファイルを展開するには Unzip Files ノードを使う。Unzip Files ノードは .zip / .jar / .tar / .tar.gz / .tar.bz2 / .cpio / .ar  の形式に対応している。
  • 圧縮ファイル内のテキストが欲しいだけなら、対応形式が多い Tika Parser ノードを使うのもアリ。

 

f:id:tymsk3891:20181017010804p:plain

*1:これをメモするためにブログ書きました。

*2:ノードによって挙動が違うかもしれません。

KNIME Analytics Platform 3.6 について

 

 

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

 

www.knime.com

KNIME Deep Learning

  • KNIMEノードを使って深層学習ネットワークを設定できるようになりました。このためコードを書かなくて良くなりました。
  • 正規の Tensorflow モデルを使用し、Keras から Tensorflow にシームレスに変換できるようになりました。

 これによりノード構成も大きく変更されています。Keras の Layers の中にはノードがたくさん入っています。

(3.6.0 のノード構成)

f:id:tymsk3891:20180715185224p:plain

(3.5.x のノード構成)

f:id:tymsk3891:20180715185241p:plain

 

Constant Value Column Filter

Constant Value Column Filter ノードは、入力したテーブルから定数列を削除します。例えば、列の値が0だけのもの、同一の文字のもの、すべて欠損値のものは削除されます。

f:id:tymsk3891:20180715191706p:plain

 ↓

f:id:tymsk3891:20180715191709p:plain

 

Numeric Outliers

Numeric Outlier ノードは、疑わしいまたは間違った数値データをデータセットから削除します。四分位範囲(IQR)を使用して、選択した各列の異常値を個別に検出して処理します。

f:id:tymsk3891:20180715203827p:plain

 ↓

f:id:tymsk3891:20180715203700p:plain

 

Column Expressions

Column Expressions ノードを使用すると、入力テーブルに対して行単位で実行される式を使って、列を追加したり、置き換えたりできます。この式は単一の関数呼び出しのようにシンプルにできますが、複雑な関数も使えます。文字列操作や数式の定義済み関数のライブラリを使用すると、式を簡単に作成できます。

 (例: ls -l コマンドの出力からファイルかディレクトリかを判別する)

f:id:tymsk3891:20180715233758p:plain

(結果)

f:id:tymsk3891:20180715233811p:plain

 

Scorer (JavaScript)

Scorer(JavaScript)ノードは、KNIMEのScorerノードの拡張バージョンです。予測精度に関する、より詳細な統計情報にアクセスできるようになります。ラップされたメタノードビュー内の他のJavaScriptビューと対話的に動作します。

f:id:tymsk3891:20180716000359p:plain

 

Git Nodes

Git ノードを使うと、ローカル Gitリポジトリ を操作できます。

  • Author や branch などを基準にコミットを見つける。
  • 特定のコミットを含む branch を見つける。
  • コミットをタグ付けする。
  • コミットの詳細(author, date, affected files..)を検索する。

 

Call Workflow (Table Based)

Call Workflow (Table Based) ノードを使うと、KNIME形式のテーブルを他のワークフローに簡単に渡せます。呼び出し側のワークフローはテーブルとフロー変数を他のワークフローに送り、処理結果のテーブルを受け取ります。呼び出される側のワークフローは Container Input/Output ノードでデータを送受信します。

  • Container Input (Table)  - 呼び出し側のワークフローからテーブルを受け取る。
  • Container Input (Variable)  - 呼び出し側のワークフローからフロー変数を受け取る。
  • Container Output (Table)  - 呼び出し側のワークフローにテーブルを送る。

f:id:tymsk3891:20180716151738p:plain

 

Text Processing

2つの新しいノードが追加されました。

  • Dictionary Tagger (Multi Column)  - 1つのデータテーブルの複数の列を独立した辞書として使用して、文書内の用語にタグを付けることができます。
  • Term Neighborhood Extractor - 文書内のすべての用語の左右の用語の近傍を抽出します。 左右の近傍の数を指定することができます。これによって、名詞の隣接した形容詞やタグ付けされた実体の隣接した動詞を全て見つけ出すことができるようになります。

 

Usability Improvements

キーボードショートカットを使ってノードを接続・接続解除する

右クリックメニューからノードの接続・接続解除ができるようになりました。接続したいノードを選択して、右クリックメニューまたは CTRL + L を入力してみましょう。接続解除も同様です。

f:id:tymsk3891:20180718012222p:plain

 

f:id:tymsk3891:20180718012321p:plain

 

ズーム

ワークフローエディタ上のワークフローをキーボードとマウスホイールでズームできるようになりました。 CTRL キーとマウスホイールを組み合わせるとズームイン・アウトできます。CTRL + ALT と マウスホイールできめ細かな調整ができます。

 

ノードをドロップして、ノードの置換と接続する

ノードをドラッグ&ドロップで置換できるようになりました。ドラッグすれば、接続していないノードを他のノードに置換できます。また、接続済みノードの線にのノードをドラッグすると、ノードを挿入できます。

f:id:tymsk3891:20180718013039p:plain

(Joiner ノードをドラッグ)

f:id:tymsk3891:20180718013134p:plain

(Joiner ノードを Row Filter ノード上で ドロップ)

f:id:tymsk3891:20180718013213p:plain

(ノードが置換される)

f:id:tymsk3891:20180718013322p:plain

 

Node repository 検索

検索がヒットしなかった場合、見つからなかった旨が表示されるようになりました。

f:id:tymsk3891:20180718014120p:plain

 

JavaScript Table view/editor でのコピー&ペースト

Table View(JavaScript) ノードと Table Editor(JavaScript) ノードにおいて、コピー&ペーストが簡単になりました。Table View ノードでセルを範囲選択し、キーボードショートカットを使って、Table Ediror ノードの表にデータを貼り付けることができます。Microsoft ExcelGoogle Sheets と一緒に使うと便利です。

 

その他いろいろ

パフォーマンス向上: Column Store (お試し版)

KNIME のパフォーマンス改善計画の最初のステップとして、Apache Parquet ベースの KNIME 列指向ストレージ のお試し版が使えるようになりました。この拡張は、内部のKNIMEテーブルをアクセスと圧縮がより高速な形式で格納します。大量のデータを処理する場合、多くのKNIMEノードの実行時間が短縮されます。

ビューが美しく:CCS の変更

全ての JavaScript ビューは  CSSルールを使ってカスタマイズできます。CSSルールを文字列に入れ、ノード設定ダイアログでフロー変数 'customCSS' をセットします。利用可能な CSS クラスのリストはこちらを参照してください。

 

Database Integration

新しいデータベースフレームワークはまだ完全ではありませんが、すでに新しい素敵な機能が搭載されています。新しいフレームワークを使って作成されたノードは、データベースと視覚的にやりとりできるようになっています。これらの新しいノードはノードリポジトリの KNIME Labs > DB から利用できます。

使いやすさ

信頼性

パフォーマンス

  • 並列実行のためのコネクションプーリング
  • 全ての Reader / Writer ノードがストリーミングに対応

 

Apache Kafka Integration

Apache Kafka 用のノードが3つリリースされました。

  1. Kafka Connector - Kafka クラスタに接続します。
  2. Kafka Consumer - Kafka からメッセージを受け取ります。
  3. Kafka Producer - Kafka にメッセージを送ります。

 

JSON Path library update

JSON Path ライブラリ json-path のバージョンが 2.0.0 から 2.4.0 にアップデートされました。いくつかの不具合が修正され、特定の JSON Path の結果が少し変更されています。

 

Java Snippet Bundle Imports

新たに追加された Additional Bundles タブ を使うと、KNIME Analytics Platformのインストールに既に含まれているライブラリをバンドルして使用できるようになりました。

f:id:tymsk3891:20180721191833p:plain

 

長くなったので、KNIME Workflow Hub、ビッグデータ系の話、商用版の機能については割愛します。

 

まとめ

ディープラーニング関連ノードが大幅にパワーアップしたのが印象的ですが、特定の機能によらず、いろいろとアップデートが進められているように見えます。個人的には Constant Value Column Filter ノードがお気に入りです。

各機能の詳細については、(時間があれば)別記事で取り上げたいと思います。

 

KNIME Analytics Platform 3.5.4 について

 

個人的にお気に入りのソフトウェア「KNIME」の最新バージョン 3.5.4 がリリースされました。3.5.3 をインストールしてアップグレードすることで利用できるようです。(インストーラは提供されていません。)

 

www.knime.com

 

バグ修正のリストのうち、日本語関連の修正と思われる「AP-8986 - Send Email node messes up file name of attachments when name contains Japanese characters」について試してみたいと思います。雰囲気で訳すと「Send Email ノードは添付ファイル名に日本語文字が含まれているとき、ファイル名をダメにする。」ということで、正直心当たりがあります。

 

修正前の Send Email ノード の動き

まずは修正前の Send Email ノードの動きをチェックします。

f:id:tymsk3891:20180613230610p:plain

ノードの設定ダイアログの Attachments タブで日本語文字を含むファイルを添付します。

f:id:tymsk3891:20180613230746p:plain

Mail タブと Mail Host (SMTP) タブに必要な設定を入力し、ノードを実行します。

 

Send Email ノードで送信したメールを確認すると、添付ファイルが文字化けしています。(下図は Gmail の表示)

f:id:tymsk3891:20180613230958p:plain

 

修正後の Send Email ノード の動き

同じことを KNIME 3.5.4 の Send Email ノードで実施してみます。メールを確認すると、添付ファイルの日本語が正しく表示されています。

f:id:tymsk3891:20180613231740p:plain

 

 まとめ

KNIME 3.5.4 にアップグレードすると、Send EMail ノードで日本語の添付ファイルが送れるようになります。

 

KNIME Analytics Platform 3.5.3 について

 

個人的にお気に入りのソフトウェア「KNIME」の最新バージョン 3.5.3 がリリースされましたが、その中にうれしいバグ修正があったので紹介したいと思います。

そのバグ修正とは Changelog の「AP-8686: Problems with certain Japanese Characters in Java Snippet nodes」です。

 

www.knime.com

 

 

何が修正されたのか?

Java Snippet ノードで、列名に日本語が含まれているテーブルを処理できるようになりました。実際にワークフローを作成して確認してみます。

 

(作成したワークフロー)・・・身長と体重からBMIを計算

f:id:tymsk3891:20180418044140p:plain

(身長・体重データ)・・・Table Creator ノードで作成

f:id:tymsk3891:20180418045300p:plain

Java Snippet ノードの設定)・・・Input に日本語の列名が含まれている

f:id:tymsk3891:20180418044814p:plain

 

ワークフローを実行すると正常に処理されました。

f:id:tymsk3891:20180418044037p:plain

Java Snippet ノードの出力)

f:id:tymsk3891:20180418045231p:plain

 

ワークフローの互換性?

KNIME 3.5.3 で作成した上記のワークフローを KNIME 3.5.2 で実行しようとするとどうなるのか興味があったので調べてみました。ワークフローを開こうとすると警告が出るようです。

f:id:tymsk3891:20180418050204p:plain

Load Anyway をクリックすればワークフローは開けますが、実行するとエラーになりました。

f:id:tymsk3891:20180418050401p:plain

 

 まとめ

Java Snippet ノードで、列名に日本語が含まれているテーブルを処理できるようになりました。長年の不便が解消されてうれしい限りです。