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

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

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

 

 

 

NodePit - KNIME ノードを探す便利ツール

 

Twitter を眺めていると何やらよさげなものを見つけました。

NodePit なるノード探しに使えるグレートなツールがあるようです。 NodePit の Twitter アカウントにあるリンクから NodePit の WEBサイトへアクセスしてみます。

nodepit.com

サイトのトップページは Google のような感じです。テキストエリアにキーワードを入力すれば、検索できそうです。

f:id:tymsk3891:20180128225033p:plain

 

テキストエリアに「CSV」と入力し、検索アイコンをクリックすると、以下のような結果が得られました。「CSV」に関係したものがヒットしてきています。

f:id:tymsk3891:20180128225409p:plain

 

3番目の結果「CSV Reader」をクリックすると、詳細が表示されます。

f:id:tymsk3891:20180128230246p:plain

  • Options・・・KNIME の Node Description と同じ
  • Best Friends (Incoming)・・・入力ポートによく使われるノードの一覧
  • Best Friends (Outgoing)・・・出力ポートによく使われるノードの一覧
  • Workflows・・・このノードが含まれるサンプルワークフローの一覧
  • Update Site・・・ノードのインストール方法

 

まだベータ版のためか公開元がPRしてないので、ここでは簡単な紹介に留めておきます。NodePitのプラグイン もあるようなので、興味ある人は使ってみてはいかがでしょうか。

 

 

KNIME Analytics Platform 3.5 について

 

 

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

 

www.knime.com

 

 

KNIME Big Data Extensions

KNIME3.5 最大のニュースです。商用モジュールとして提供されてきた「KNIME Big Data Extensions」が KNIME Analytics Platform の一部になり、無償で利用できるようになりました。Apache HadoopApache Spark  を KNIME から操作してみましょう。

 

JavaScript Views

新たに3つの Views が追加されました。

  • Tag Cloud
  • Data Explorer
  • Table Editor

 

Tag Cloud (都道府県人口)

f:id:tymsk3891:20171210225644p:plain

Data Explorer  (アヤメのデータを表示)

f:id:tymsk3891:20171210224656p:plain

 

KNIME Deep Learning - Keras Integration

Deep Learning ライブラリ「Keras」が KNIME で利用できるようになりました。これにより「KNIME Labs」に「Deep Learning」カテゴリが新たに追加されています。KNIME の Deep Learning は通常の KNIMEノードと同様にバックエンド環境に依存しないため、すぐに使い始められます。Keras を通じて TensorFlow や CNTK にアクセスしましょう。

 

Google Sheets Nodes

Google スプレッドシートにデータの読み書きできるようになりました。

 

Run R Model in Microsoft SQL Server

「Run R Model in Microsoft SQL Server」ノードを使うと「SQL Server Machine Learning Services」を KNIME から利用できます。SQL Server 上のデータを KNIME 側にダウンロードすることなく処理できるなどのメリットがあります。

 

Improved H2O Integration

新たなノードが追加されました。

  • k-Means
  • PCA
  • Generalized Low Rank Models
  • Column Filter
  • MOJO  (Model Object, Optimized) 

 

Extensions that have “graduated” from KNIME Labs

「KNIME Labs」カテゴリで提供されてきた以下のノードが標準ノードの仲間入りとなりました。

 

The Math Formula (Multi Column) node

 複数列を同時に処理できる「Math Formula」ノードが登場しました。従来の「Math Formula」ノードは1列ずつしか処理できなかったため、複数列を計算する場合、ノードを連続する必要がありました。

 

アヤメのデータの各列の平均を求める設定例(CURRENT_COLUMNがポイント)

f:id:tymsk3891:20171210232449p:plain

 

The OPTICS nodes

OPTICS とは DBSCAN を基本としたクラスタリングアルゴリズムです。KNIMEで「OPTICS Cluster Compute」ノードと「OPTICS Cluster Assigner」ノードを組み合わせることで利用できます。

 

The Window Loop Start node

「The Window Loop Start」ノードを使えば、1度のループで読み込む期間、次のループで読み込み始める日時を指定したループ処理が可能になります。

 

その他

  • KNIME にバンドルされている Windows R のバージョンが 3.0.3 から 3.4.2 にアップデートされました。
  • Java のバージョンが 1.8.0_60 から 1.8.0_152 にアップデートされました。
  • Linux 用 KNIME の32bit バイナリの提供が終了となりました。
  • ノード全部入り版(+ all free extensions)のインストーラの提供が終了となりました。

 

商用版の機能については割愛します。

 

 まとめ

 

Hadoop、Spark、SQL Server 等との連携機能強化が印象的なリリースとなりました。また、機械学習ライブラリ H2O 関連ノードの拡張、Keras ノードで TensorFlow との親和性も高くなっている点にも注目です。

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

 

KNIME と macOS 10.13 High Sierra について 【追記あり】

最近、KNIME を起動するとトップ画面に以下のような警告が表示されます。

f:id:tymsk3891:20171018012115p:plain

どうも KNIME ユーザは macOS 10.13 High Sierra にアップグレードしないほうがいいようです。 Apple に問題を報告していると書かれているため、macOS 側に原因あると考えられます。(known issues のリンク先には High Sierra の不具合が多数紹介されています。)

 

High Sierra にアップグレードしてしまった!!!という人は Apple が修正アップデートを早く出してくれるように祈りましょう。。。

 

とは言っても、一体どんな問題が発生しているのか?不安な人がいるかもしれないので、警告が表示されるきっかけとなった KNIME Community Forum のやりとりを紹介します。

www.knime.com

  1. 投稿者が 「XLS reader の出力ポートからデータが読み取れない」旨の不具合を報告する。 - 10/2
  2. コミュニティの2名が検証を行い、ファイルの行数が多い場合に不具合が再現することを突き止める。 - 10/3
  3. KNIMEの達人が High Sierra の zip standard/API が壊れていることが原因だと結論づける。Appleにバグレポートを送る模様。 - 10/5
  4. さらに Table reader/writer でも同じ不具合が発生することが報告される。 - 10/10
  5. Apple に バグレポートしたけど音沙汰なし。。。 - 10/11
  6. Sierra ユーザに伝えたほうがいいよね。。。 - 10/11
  7. KNIMEのトップ画面に警告を表示することに - 10/12

 のような経緯となっています。

 

この不具合は High Sierra に組み込まれた zlib ライブラリが原因で、zlib ライブラリの修正は終わっているようです。あとはApple の対処を待つのみ。。。

 

まとめ

macOS で KNIME を使いたい人は High Sierra へのアップグレードは控えましょう。(2017.10.18 時点)

 

追記(2017.11.15)

KNIME 3.4.2 がリリースされました。更新履歴を見てみると

Bug Fixes:

AP-8083: Issues with newest Mac OS X version (High Sierra) -- data corruption

ということで、High Sierra 問題が解消されたようです。macOS 10.13 High Sierra にしてしまった人は早速 バージョン 3.4.2 にアップグレードしましょう。