- はじめに
- 覚えてほしいこと
- やりたいこと - 繰り返し
- List Filesの使い方
- Table Row to Variable Loop Startの使い方
- Excel Reader の設定
- Loop End の使い方
- ちょっと一言
- おわりに
- 参考リンク
はじめに
さて、変数の次はLoopです。こちらもかなり大事な内容だと思います。
習得すればさらに幅が広がります。特にファイルの読み込みに力を発揮するので、ファイルの読み込み方を習得してしまいましょう。
Workflowはこちらからダウンロードできます。KNIME v4.3以降のバージョン変更により、Configureの画面が変わっています。
今回のテーマ ~Loop~
Loopということは、繰り返しという意味ですよね。全く同じ処理を行いたい場合に使用します。実用的にはファイルの読み込みや、補間するときくらいしか使わないです。
覚えてほしいこと
全く同じ処理を複数のパターンで行いたい場合にはLoop
やりたいこと - 繰り返し
やりたいことは、同じ形式のファイルを読み込んで、上下でくっつける(Concatenate)ことです。
もちろん2ファイルであれば、ただ単にConcatenateするだけで構わないと思います。でもこのファイルが月ごとに増えていったら、Concatenateをどんどん追加していかないといけません。これは面倒ですよね? そこで登場するのが、Loopです!
変数を使っているので、月ごとにファイルの数が増えてもConfigureを変えなくて済みます!
では、各Nodeの使い方に移ります。
List Filesの使い方
まず使うのはList Filesです。このNodeを使うと指定したフォルダの下にあるファイルのファイルパス一覧を取得できます。
Workflow
下図のようにLoopの前によく使われるNodeです。
Confirm - Before After
実行すると、"Location"と"URL"の2つのコラムが得られます。Locationは絶対パス、URLは他への変換に使える形式になってます。
Configure
Configureをみてみましょう。設定すべきところは、Locationのみです。
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ファイルのみを抽出できます。
その他の項目はいつもと同じです。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します。
Confirm - Before After
今回はあえて、2回目の繰り返しのConfirmの画面を添付してみました。
"currentIteration"は、現在の繰り返し回数を指しています。0から始まるので、1というのは2回目のLoopということになります。maxIkterationsは最大繰り返し数です。3と書いてあるので、3回繰り返しますという意味ですね。
このNodeでは、行数分繰り返すという設定なので、2回目の繰り返しではList Filesの2行目の値を変数として格納しています。
Configure
設定する値は特にありません。そのままでOKです。
その他の項目
セルが空白だった時の処理を選べます。Defaultでは、User Defaultsという選択肢になっています。各選択肢は下記のような意味になっています。
Fail
どれかのコラムに空白のセルがあった場合、エラーとして処理を止めます。
Use Defaults
データ型によって、下の値をデフォルト値として入れていきます。例えば上の設定だと、String型のコラムがコラムだった場合は、missngという値が仮に入ります。
Omit
空白セルだった場合は、変数にする作業を省略します。
Excel Reader の設定
Excel ReaderのConfigureだけ載せておきます。基本は普通のExcel Readerの設定と変わりません。
前回扱った、変数を使って読み込むファイルを指定しましょう。Locationという箱を指定することで、前の”Table Row to Variable Loop Start”でLocationの箱に入れられた値を読みに行くことになります。
Loop End の使い方
Loopを始めたら(Start)、必ず終了させます(End)。繰り返し処理を終えたい最後のNodeに合わせた形のLoop Endを挿入しましょう。
Workflow
今回はExcel Readerが繰り返し最後のNodeなので、Inputが黒い矢印が1つInputになるLoop Endを選択しました。水色のLoopの中の処理が繰り返されます。
Confirm
実行すると、繰り返し処理されて、各ステップで取得された結果が上下にくっついた(Concatenateされた)形で出力されます。
Configure
このNodeも設定はいりません。デフォルトの設定でOKです。
コラム名(Header)をもとにして自動的に上下にくっつけていきます。データ型も一緒にする必要があります。各チェックの意味を一応説明します。
Row key Policy
Row IDの設定ルールの設定です。デフォルトでは、元々のRow IDに、繰り返し番号(例:最初のループで取り込んだものは#0)を付けたものをRow IDとします。
"Gererate new row IDs"を指定すると、Row0から番号を振りなおしてくれます。"Leave row IDs unmodified"を選択すると、元々のRow IDを使用します。もし、2回目以降のループで同じRowIDが使用されていたら、エラーになります。
Add iteration column 繰り返し番号を記録する
デフォルトではチェックが入っています。
これにチェックを入れると何回目の繰り返しで取り込んだかが分かるようになります。
Ignore empty input tables 空テーブルは無視
デフォルトでチェックが入っています。
これにチェックを入れると、空白のテーブルが入ってきた場合、エラーを出さずに繰り返しを継続させてくれます。
Allow variable column types データ型が異なっててもOKにする
これにチェックを入れると、各ファイルでコラムのデータ型が異なっていた場合でもエラーが起こらずに処理できます。最終的には、”?”というデータ型が分からないよ!という表示になります。
ためしに、残業時間は現在数字しか入っていませんが、4月分のファイルにだけ、1hというようにわざと、Stringで取り込まれるようにしてみましょう。
この項目に何もチェックしないと、下図のように、「データ型が最初に取り込んだテーブルの形と違うよー 、元々4つしかコラムなかったのに5つもあるよー」というエラーになってしまいます。
execute failed: Input table's structure differs from reference (first iteration) table: different column counts 5 vs 4
この項目にチェックを入れると、データ型が異なっていてもエラーなしに実行できるようになります。ただし、データ型は異なるので、?というデータ型になっていると思います。
Allow changing table specifications 取り込むテーブルがどんな形でもOKにする
Allow variable column types の強化版です。ある程度なんでもOKになります。”Allow variable column types ”のチェックだけでは、コラムの数が異なる事象が発生するとエラーになってしまいます。この設定はテーブルのスペックが変化してもOKにする設定です。
ためしに4月のファイルにだけ”コメント”というコラムを追加してみました。チェックを入れるとどうなるか見てみましょう。
これにチェックを入れると、下図のように、エラーにはならずに新しいコラムとして追加することができます。他のファイルにはこのコラムはないので、空白になっています。
ちょっと一言
Loop用の実行方法 "Step Loop Execution"
Loopで普通の実行をしてしまうとすべての繰り返し処理を一気に行ってしまうので、途中で止めて結果を確認するということができません。エラーがありそうだから、2回目の繰り返しで止めたい!というようなとき不便ですよね。
そこでLoopには、通常の実行だけでなく、一回一回実行していく方法があります。 "Step Loop Execution"というオプションで、Loop Endで右クリックすると選択できます。一度押すと、1回目のLoopが実行された状態で止まります。
再度Loop Endで右クリックをすると、選択できる項目が増えます。
Step Loop Executionを押すと、次のステップの繰り返し処理が実行されます。Resume Loop Executionを押すと、最後まで一気に実行されます。
ファイル名を加えていきたい場合
繰り返し回数でなくて、どのファイルから取り込まれたかが分かるようにファイル名をくっつけたいんだよねーという要望が多々あります。そこでそちらの方法を簡単にお伝えします。
追加するNodeはURL File Pathと、String Manipuratonです。
やりたいこと
ファイル名を追加する
Workflow - URL to File Path
URL to File Pathでファイル名をコラムにしておきます。そうすることで、Table Row to Variable Loop Startでその値が変数として、使えるようになるという算段です。
Confirm- URL to File Path
このNodeは、URLの形になっているコラムを、「親フォルダ、ファイル名、ファイル拡張子、ファイルパス」にいい感じに分割してくれるNodeです。
Configure- URL to File Path
設定は、URLになっているコラムを選択するだけです。
オプションで、エラーとして止める設定ができます。
"Fail if URL has invalid syntax"
チェックを入れると、URLとしてKNIMEに認識されないとエラーにします
"Fail if file does not exist"
ファイルが実際になかった場合にエラーにします。
Configure - String Manipulation
String Manipuratonの使い方はすでに過去記事で触ったので、Configureだけお見せします。変数の値を新しいコラムとして追加するという処理を行っています。
おわりに
また長くなってしまいました。これでかなりプログラム特有の機能は説明できたので、 これからはNodeの紹介中心に行きたいと思います。
コロナ落ち着いてきましたね、一刻も早く外でリラックス出来ることを願って^^
余談
複数でまとまっている感のあるおススメ映画が「きっと、うまくいく」です!
今までインド映画見たことなかったのですが、この映画見てインド映画いい!!と思ったきっかけの映画です!笑えますし、感動しますしなんかとりあえず、インド映画見たことなければ一度ぜひ!!
参考リンク
-
すさんのBlog:
【超入門】Loopを回せ! 〜KNIMEを使って複数のファイルを一気に読んでみよう〜 - 非プログラマーのためのインフォマティクス入門。(仮)
- KNIME公式Node Pit(英語):
- KNIME Example Workflow(英語):
- KNIME E-Learnig(英語):