非プログラマーのためのインフォマティクス入門。(仮)

非プログラマーがインフォマティクスについて勉強したことを記録します。主にKNIMEというソフトを使用しています。

【超入門】KNIMEで変数を使うには 〜今日の日付をエクセルのシート名にして書き出してみよう〜

 今回*1は変数*2の使い方について、基本的な部分を書いてみようと思います。あまり馴染みのない方もいらっしゃるかもしれませんが、

くらいに幅が広がると思います。

(さらにループ処理ができればルーラですかね。それはまた別の機会にしましょう)

 

題材として、

【作業(stock:noを取ってくる)をしている日付を、書き出すエクセルのシート名にする】

ということをしてみようと思います。 

f:id:sumtat:20170812221019p:plain

 まずは全体像のキャプチャを載せます

f:id:sumtat:20170812221941p:plain

 まず青の部分が、例に挙げた作業"stockがnoのデータを取得する"を行なっている部分です。後に簡単に触れますが、詳細に関しては

【超入門(2/3)】KNIMEの使い方 〜欲しい行だけ抽出しよう(Row filter, splitter)〜

で書いた内容を参考にして下さい。

 

 緑色の部分では、日付のデータを取得しています。ここでゲットした情報を赤色矢印で示した部分で変数にして、エクセルのシート名として利用しています。今回のお話のメインの内容になります。

 

では、の順に解説します。

 

青色部分

f:id:sumtat:20170812223235p:plain

 ざっくりです。冒頭で示したエクセルファイルと読み込み、row splitterでカラム名"stock"の情報で"no"というデータを持つものをinclude (出口の上側▶︎)にするように設定しています。これをexcel writerに繋げば、あとは最初に緑色、赤色で示した部分の処理待ちです。

 

緑色部分(Time Generator, Time to String)

それでは日付の情報を取得していきます。まずはTime Generatorです。

f:id:sumtat:20170812224113p:plain

 初期設定では、ちょうど1年前〜現在までの時間データ1000件を発生させるような設定になっています。

ですので、

  • 一番上の設定で【発生させるデータ数】を1にする
  • Use excution time as starting timeにチェックを入れれば、開始時間設定しなくてよくなる

この2つの設定をすれば、このノードを実行した時間を取得することができます。

f:id:sumtat:20170812224638p:plain

結果はこんな感じになります。次に、本質的には通す必要はないのですが、time to stringノードをつなぎます。

f:id:sumtat:20170812225033p:plain

 date属性カラムの内容を文字列に変換してくれます。どこの情報を変換したいかを、一番上の設定でプルダウンを使って指定します。変換後の情報と置き換えたければreplace selected columnにチェックを入れて下さい。

 今回は変換後のデータを"for_sheet_name"というカラム名にして吐き出させることにします。また変換する際の形式をプルダウンから選べます。今回はyyyy-MM-ddにしました。実行結果を見てみます。

f:id:sumtat:20170812225423p:plain

こんな感じになります。さていよいよ今回のメインイベントです。

 

Table Row to Variable

rowの情報を変数にするよ!というノードです。特に設定の必要はありません。繋いで実行するだけです。結果を見てみます。

f:id:sumtat:20170812230223p:plain

 ちょっとこれまでと雰囲気が違います

  1. データの出口が▶︎ではなくになってる
  2. 結果のテーブルに"Table"ではなく"Flow Variables"って書いてある

 そうなんです。KNIMEでは基本的には変数の受け渡しはから赤線で繋ぐ*3という方法をとります。一度変数を渡されたら、通常の黒線を流れて、その後に接続したノード内でも使用できます(補足:既に定義済みの変数を他のflowに流す時は、上辺右上の赤丸から飛ばします)。

 また実行結果の確認画面ですが、Tableというタブがありません。流れている変数の情報を確認するためのFlow Variablesというタブのみしかないのです。▶︎から吐くデータを確認するときは通常Tableというタブで確認しますが、この隣にはいつもFlow variablesのタブもあります。気づいていましたか?

 今回の結果としては確かにfor_sheet_nameという変数が出来上がり、その値は先ほど取得した日付データになっていますね!この変数をexcel reader, row splitter, excel writerのいずれかに渡せば、書き出し時に使用することができます。今回はexcel writerに渡しました*4

 

続いてExcel writerの設定を見てみます。

f:id:sumtat:20170812231557p:plain

 通常通り、書き出しファイル名の設定、ヘッダの有無等を指定します。問題は変数の使い方です。2通りの方法を説明します。

 

①variableボタンを使う

シート名を指定するとこの右側に【v=?】みたいなボタンがありますよね?これを押すと、もう一つウインドウが開きます。Use Variableにチェックを入れて、プルダウンから使いたい変数を選びます。今回はfor_sheet_nameという変数です。

(設定内容に変数を使うと、画面下部にその旨を示すコメントが表示されます)

 

②Flow Variablesタブから指定する

f:id:sumtat:20170812233053p:plain

 変数を使って指定できる項目が全て並んでいます。この中から適切なところを選び、プルダウンから使用する変数を指定します。今回はsheetnameのところです。このようにvariableボタンがなくても変数を設定値に使うことが可能です。

 

いずれかの方法で設定を行い、実行すると次のようになります。

f:id:sumtat:20170812234028p:plain

うまくいきました!変数の使い方の概要はつかめたでしょうか?色んな場面で使えますので、今後も例を交えて紹介できればいいなと思っています。

 さて次回は、今回のフローに1本だけ線を付け加えた次のフローについて紹介しようと思います。一体どんな意味があるのか、お楽しみにして下さい。

f:id:sumtat:20170812235908p:plain

 

*1:記事の作成日は2017/08/12です

*2:変数について書かれている記事はweb上にたっぷりあるので、好みのものを探して読んでみるのが1番いいと思いますが、"状況により変わる数(データ)"のことです。

 例えば今回の記事では【変数="本日の日付グループご担当者様"】みたいな感じでしょうか?今日の時点では【"2017/08/12さん"が実際の担当者=実際の変数の値】みたいな感じです。明日の担当者は"2017/08/13さん"になるし、その後も変わっていく数ですよね。

*場合によっては変数といいながらも内容が変わらないこともあります。"変わることができる数"といったほうが適当かもしれません

*3:ノード上辺の赤丸は見えないんですが、心の目で見えてるつもりで線を引っ張ると勝手に出てきます。うまくいかない場合は右クリックメニューからShow Flow Variable Portsを選択してください

*4:仮にrow splitterに渡すとこうなります。

f:id:sumtat:20170812233647p:plain

このノード以降、自分の作った変数for_sheet_nameが使えるわけです。