デジタル推進課

KNIME・Excel Macro・Power Automateなど日々の業務で使用できる自動化ツールを中心に書き綴ります

KNIME - Loopで複数ファイルを一気に読み込む ~List Files / Loop Start / Loop End / URL to File Path~

f:id:makkynm:20201219234828p:plain

 

 

はじめに

さて、変数の次はLoopです。こちらもかなり大事な内容だと思います。

習得すればさらに幅が広がります。特にファイルの読み込みに力を発揮するので、ファイルの読み込み方を習得してしまいましょう。

 

Workflowはこちらからダウンロードできます。KNIME v4.3以降のバージョン変更により、Configureの画面が変わっています。

kni.me

 

 今回のテーマ ~Loop~

Loopということは、繰り返しという意味ですよね。全く同じ処理を行いたい場合に使用します。実用的にはファイルの読み込みや、補間するときくらいしか使わないです。

 

 

f:id:makkynm:20200520222936p:plain

Loop

 

覚えてほしいこと

全く同じ処理を複数のパターンで行いたい場合にはLoop

 

やりたいこと - 繰り返し

やりたいことは、同じ形式のファイルを読み込んで、上下でくっつける(Concatenate)ことです。

もちろん2ファイルであれば、ただ単にConcatenateするだけで構わないと思います。でもこのファイルが月ごとに増えていったら、Concatenateをどんどん追加していかないといけません。これは面倒ですよね? そこで登場するのが、Loopです!

変数を使っているので、月ごとにファイルの数が増えてもConfigureを変えなくて済みます!

f:id:makkynm:20200520225031p:plain

元データ

f:id:makkynm:20200520223649p:plain

Concatenate地獄をLoopで解消

では、各Nodeの使い方に移ります。

 

List Filesの使い方

まず使うのはList Filesです。このNodeを使うと指定したフォルダの下にあるファイルのファイルパス一覧を取得できます。

Workflow

下図のようにLoopの前によく使われるNodeです。

f:id:makkynm:20200520224453p:plain

Workflow - List Files

Confirm - Before After

実行すると、"Location"と"URL"の2つのコラムが得られます。Locationは絶対パス、URLは他への変換に使える形式になってます。

f:id:makkynm:20200520225154p:plain

Confirm - List Files

Configure

Configureをみてみましょう。設定すべきところは、Locationのみです。

f:id:makkynm:20200520225543p:plain

Configure - List Files
Location

Browseからファイル一覧を取得したいフォルダを指定しましょう。

include sub foldersにチェックを入れると、Locationで指定したフォルダの下にあるフォルダの中身まで見に行きます。

 

その他の項目 Filter

その他の項目Filterを見てみましょう。すべてのファイルを取り込みたくないとき、List Filesの後にRow Filterを挿入してFilterするのもよいのですが、ここで指定することもできます。

Defaultではnoneになっているので、なにもFilteringがかかっていませんが、他の項目を選ぶとList FilesのOutputですでにFilteringを書けることが可能です。

例えば "file extension(s)"を選択して「.csv」を入力すると、csvファイルのみを抽出できます。

f:id:makkynm:20200520230843p:plain

拡張子でFilteringをかける

その他の項目はいつもと同じです。regular expressionは正規表現、wild patternはワイルドカードでの指定です。case sensitiveを指定すると、大文字と小文字も区別します。

 

Table Row to Variable Loop Startの使い方

続いて、前回の変数の説明記事でほんのちょっと触った、 "Table Row to Variable"のLoop Start版です。通常の"Table Row to Variable"は、Tableの一行目のみを変数として変換します。

"Table Row to Variable Loop Start"を使うと、1回目のLoopは1行目、2回目のLoopは2行目を読むことになります。このようにして全く同じ処理を複数のパターンで行いたい場合に使用できます。

 Workflow  

このNodeからLoopがStartします。

f:id:makkynm:20200521215701p:plain

Workflow - Table Row to Variable Loop start

 

Confirm - Before After

今回はあえて、2回目の繰り返しのConfirmの画面を添付してみました。

"currentIteration"は、現在の繰り返し回数を指しています。0から始まるので、1というのは2回目のLoopということになります。maxIkterationsは最大繰り返し数です。3と書いてあるので、3回繰り返しますという意味ですね。

このNodeでは、行数分繰り返すという設定なので、2回目の繰り返しではList Filesの2行目の値を変数として格納しています。

f:id:makkynm:20200521233350p:plain

Confirm - Table Row to variable Loop Start

Configure

設定する値は特にありません。そのままでOKです。

 

f:id:makkynm:20200521233721p:plain

Configure - Table Row To Variable Loop Start
その他の項目

 セルが空白だった時の処理を選べます。Defaultでは、User Defaultsという選択肢になっています。各選択肢は下記のような意味になっています。

Fail

どれかのコラムに空白のセルがあった場合、エラーとして処理を止めます。

Use Defaults

データ型によって、下の値をデフォルト値として入れていきます。例えば上の設定だと、String型のコラムがコラムだった場合は、missngという値が仮に入ります。

Omit

空白セルだった場合は、変数にする作業を省略します。

 

Excel Reader の設定

Excel ReaderのConfigureだけ載せておきます。基本は普通のExcel Readerの設定と変わりません。

前回扱った、変数を使って読み込むファイルを指定しましょう。Locationという箱を指定することで、前の”Table Row to Variable Loop Start”でLocationの箱に入れられた値を読みに行くことになります。

f:id:makkynm:20200523111145p:plain

Excel Reader Configure

 

Loop End の使い方

 Loopを始めたら(Start)、必ず終了させます(End)。繰り返し処理を終えたい最後のNodeに合わせた形のLoop Endを挿入しましょう。

 

Workflow

今回はExcel Readerが繰り返し最後のNodeなので、Inputが黒い矢印が1つInputになるLoop Endを選択しました。水色のLoopの中の処理が繰り返されます。

f:id:makkynm:20200523114951p:plain

Workflow - Loop End

 

Confirm 

実行すると、繰り返し処理されて、各ステップで取得された結果が上下にくっついた(Concatenateされた)形で出力されます。

f:id:makkynm:20200523124106p:plain

Confirm - Loop End

Configure

このNodeも設定はいりません。デフォルトの設定でOKです。

コラム名(Header)をもとにして自動的に上下にくっつけていきます。データ型も一緒にする必要があります。各チェックの意味を一応説明します。

f:id:makkynm:20200523124428p:plain

Configure - Loop End
Row key Policy

Row IDの設定ルールの設定です。デフォルトでは、元々のRow IDに、繰り返し番号(例:最初のループで取り込んだものは#0)を付けたものをRow IDとします。

"Gererate new row IDs"を指定すると、Row0から番号を振りなおしてくれます。"Leave row IDs unmodified"を選択すると、元々のRow IDを使用します。もし、2回目以降のループで同じRowIDが使用されていたら、エラーになります。

f:id:makkynm:20200523125755p:plain

Row key Policy
Add iteration column 繰り返し番号を記録する

デフォルトではチェックが入っています。

これにチェックを入れると何回目の繰り返しで取り込んだかが分かるようになります。

f:id:makkynm:20200523130124p:plain

Add iteration column
Ignore empty input tables 空テーブルは無視

デフォルトでチェックが入っています。

これにチェックを入れると、空白のテーブルが入ってきた場合、エラーを出さずに繰り返しを継続させてくれます。

Allow variable column types データ型が異なっててもOKにする

これにチェックを入れると、各ファイルでコラムのデータ型が異なっていた場合でもエラーが起こらずに処理できます。最終的には、”?”というデータ型が分からないよ!という表示になります。

ためしに、残業時間は現在数字しか入っていませんが、4月分のファイルにだけ、1hというようにわざと、Stringで取り込まれるようにしてみましょう。

f:id:makkynm:20200523131421p:plain

4月分のファイルの1行がおかしい場合

この項目に何もチェックしないと、下図のように、「データ型が最初に取り込んだテーブルの形と違うよー 、元々4つしかコラムなかったのに5つもあるよー」というエラーになってしまいます。

execute failed: Input table's structure differs from reference (first iteration) table: different column counts 5 vs 4

f:id:makkynm:20200523131941p:plain

データが異なるエラーが発生する

この項目にチェックを入れると、データ型が異なっていてもエラーなしに実行できるようになります。ただし、データ型は異なるので、?というデータ型になっていると思います。

f:id:makkynm:20200523132319p:plain

データ型が?だが、取り込みはできる
Allow changing table specifications 取り込むテーブルがどんな形でもOKにする

Allow variable column types の強化版です。ある程度なんでもOKになります。”Allow variable column types ”のチェックだけでは、コラムの数が異なる事象が発生するとエラーになってしまいます。この設定はテーブルのスペックが変化してもOKにする設定です。

ためしに4月のファイルにだけ”コメント”というコラムを追加してみました。チェックを入れるとどうなるか見てみましょう。

f:id:makkynm:20200523132954p:plain

4月のファイルにコラムを追加してみる

これにチェックを入れると、下図のように、エラーにはならずに新しいコラムとして追加することができます。他のファイルにはこのコラムはないので、空白になっています。

f:id:makkynm:20200523133214p:plain

コラムの数が異なっていてもOK

 

 ちょっと一言

 Loop用の実行方法 "Step Loop Execution"

Loopで普通の実行をしてしまうとすべての繰り返し処理を一気に行ってしまうので、途中で止めて結果を確認するということができません。エラーがありそうだから、2回目の繰り返しで止めたい!というようなとき不便ですよね。

そこでLoopには、通常の実行だけでなく、一回一回実行していく方法があります。  "Step Loop Execution"というオプションで、Loop Endで右クリックすると選択できます。一度押すと、1回目のLoopが実行された状態で止まります。

f:id:makkynm:20200523134202p:plain

Step Loop Execution

再度Loop Endで右クリックをすると、選択できる項目が増えます。

Step Loop Executionを押すと、次のステップの繰り返し処理が実行されます。Resume Loop Executionを押すと、最後まで一気に実行されます。

f:id:makkynm:20200523134335p:plain

Step Loop Execution

 

 

 ファイル名を加えていきたい場合

繰り返し回数でなくて、どのファイルから取り込まれたかが分かるようにファイル名をくっつけたいんだよねーという要望が多々あります。そこでそちらの方法を簡単にお伝えします。

追加するNodeはURL File Pathと、String Manipuratonです。

やりたいこと

ファイル名を追加する

f:id:makkynm:20200523135405p:plain

やりたいこと
Workflow - URL to File Path

URL to File Pathでファイル名をコラムにしておきます。そうすることで、Table Row to Variable Loop Startでその値が変数として、使えるようになるという算段です。

f:id:makkynm:20200523134623p:plain

Workflow - URL to File Path
Confirm- URL to File Path

このNodeは、URLの形になっているコラムを、「親フォルダ、ファイル名、ファイル拡張子、ファイルパス」にいい感じに分割してくれるNodeです。

f:id:makkynm:20200523135920p:plain

Confirm - URL to File Path
Configure- URL to File Path

設定は、URLになっているコラムを選択するだけです。

f:id:makkynm:20200523140243p:plain

Configure - URL to File Path

オプションで、エラーとして止める設定ができます。

"Fail if URL has invalid syntax"

チェックを入れると、URLとしてKNIMEに認識されないとエラーにします

"Fail if file does not exist"

ファイルが実際になかった場合にエラーにします。

 

Configure - String Manipulation

String Manipuratonの使い方はすでに過去記事で触ったので、Configureだけお見せします。変数の値を新しいコラムとして追加するという処理を行っています。

f:id:makkynm:20200523140801p:plain

Configure - String Manipulation

 

おわりに

また長くなってしまいました。これでかなりプログラム特有の機能は説明できたので、 これからはNodeの紹介中心に行きたいと思います。

コロナ落ち着いてきましたね、一刻も早く外でリラックス出来ることを願って^^

 

 

 

余談

複数でまとまっている感のあるおススメ映画が「きっと、うまくいく」です!

今までインド映画見たことなかったのですが、この映画見てインド映画いい!!と思ったきっかけの映画です!笑えますし、感動しますしなんかとりあえず、インド映画見たことなければ一度ぜひ!!

きっと、うまくいく(字幕版)

きっと、うまくいく(字幕版)

  • 発売日: 2013/11/26
  • メディア: Prime Video
 

www.youtube.com

参考リンク