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

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

"あ"さんにコメントを頂きました 〜オートフィル(excel)の実現〜

みなさん、こんばんは。

私は普段お酒をあまり飲みませんが、今日はなんとなくむしゃくしゃしたのでビールを飲みました。ほろ酔いで書いていきます(わたしはよなよなエールが好きです)。

 

f:id:sumtat:20171012233338j:plain

 

さて、タイトルの通り、"あ"さんよりコメントを頂きました!

とても嬉しいです!

コメント内で、次のような質問をいただきました。

エクセルチックに絶対参照しながらフィルハンドルを引っ張るような操作はknimeで実現できないでしょうか。

 コメント欄ではうまくお返事できないかなと思い、記事にしてみることにしました。的外れな内容だったら、"あ"さん、ごめんなさい! 

 最初に、私なりの見解です。

KNIMEで

  1. フィルハンドル(excelのセル右下のポチ■のことですよね?)を引っ張る】という操作自体は不可能です。
  2. "ドラッグする"という操作(手動)で実現したい処理をワークフローに落とし込む(自動化)は可能です。

 

これではうまく伝わらないかもしれないので、

i-bitzedge.com

 の内容を例題として、KNIMEを使って同じ結果になるようにしてみます。

 

相対参照

 上記リンクの「相対参照」の部分をご覧になってください。=A2*B2をC2に書いて、下方向に■をドラッグする。結果、商品A(の値段?)×個数が、各行で行われるという内容が書いてあります。

 同じ結果を得るために、KNIMEではExcel Readerで所望のエクセルファイルを読み込んで、Math Formulaを使って、掛け合わせるカラム名を使って数式を表現します。(下のキャプチャ左下はmath formulaの設定・右下は実行結果)

f:id:sumtat:20171012222155p:plain

 ■をドラッグして範囲を指定する必要がないので、どんなファイルが対象となっても、データの入っている行に関しては、確実に計算を実施できることがアドバンテージでしょうか?

絶対参照

 先ほどのリンク内の「絶対参照」をご覧になってください。=A2*$B$2をC2に書いて、下方向に■をドラッグする。結果、商品A(の値段?)×2(B2に入力された定数)が、各行で行われるという内容が書いてあります。

 同じ結果を得るためのいくつかの方法を書いてみます。色々考えられると思いますが、2通り書いてみます。

1:定数(今回は2)がわかっているものとする場合

 前述のものとほぼ同じフローですが、Math Formulaの設定を下のキャプチャのように【商品A×】にしてしまえばとりあえずは解決です。

f:id:sumtat:20171012224203p:plain

f:id:sumtat:20171012224436p:plain ただし、これだと複数のファイルを相手にしなければならない時、個数が必ずとは限らない場合もあると思うので、汎用性に欠けています。

 

2:個数カラムの行数を指定して値を抽出後、掛け算を行う

簡単にフローを説明していきます。

まず、2つに分岐させて、Column Filterを使って個数カラムだけ残します。

f:id:sumtat:20171012225416p:plain

 

 次に、Row Filterを使って、個数カラムの1行目だけを残します。

f:id:sumtat:20171012225939p:plain

 Include rows by numberにチェックを入れると、【何行目から何行目まで残すの?】と聞かれるので、【1〜1】に設定すればOKです。ここまでの作業で、絶対参照するセルの内容を指定したことになります。

 続いてTable Row to Variableを使って、指定した内容(2という定数のこと)を変数にします。

f:id:sumtat:20171012230713p:plain

 

 最後にMath Formulaを使って掛け算をします。掛け算をする内容は

【商品Aカラムのデータ】×【作成した変数:個数】です!

f:id:sumtat:20171012231219p:plain

f:id:sumtat:20171012231855p:plain

 

 ここで個数カラムの内容との掛け算にすると(青色の方)、次のような結果になっちゃいます。

f:id:sumtat:20171012231654p:plain

 ?は欠損値(Missing Value)です(データなし)。無をかけても、無になるので、計算結果も?になります。

 

 いかがでしたか?

  • 目視して、所望のデータをクリックして選択する
  • 範囲指定やコピー等、意味を持ったドラッグ操作行う

など、人間の頭を介する作業を(半)自動化させるには、一つ一つの作業の意味をマシンに伝えなくてはなりません。これはKNIMEのようなフローツールでも、プログラミングでも同じことが言えると思います。

 こんな細かいことをいちいち面倒くさい…と思うかもしれませんが、これを最初に我慢して用意しておけば、後々楽になると信じています。

 

 一度きりの作業であれば、エクセルはドラッグ等を活用しながら直感的に作業が行える非常に優れたツールです。使い分けが重要かと思います。

"あ"さんのイメージされていた内容通りではないかもしれませんが、参考になれば幸いです。

 

すぐにお返事できないこともあると思いますが、皆様からのコメントをお待ちしております!