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

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

【KNIME】ノード紹介:Column Rename 〜カラム名を変更したい〜

 今回はカラム名を変えたいときにどうするか?というお話です。後から気が変わったり、KNIMEの仕様で勝手にカラム名を決められたり、様々な理由で変更したくなるタイミングがあると思います。下の例を参考にして、操作の方法を紹介します。

f:id:sumtat:20170731180014p:plain

*このテーブルができるまでの流れについては

【KNIME】ノード紹介:Transpose, Pivoting 〜表(table)の縦と横(行と列)を入れ替えたい〜

をご覧下さい。

 

Column Rename

もう、本当に名前のままのノードがあります。早速設定の内容をみちゃいましょうね。

f:id:sumtat:20170802161438p:plain

 特に難しいところはないと思います。Column Renameの入口▶︎に、カラム名を変えたいデータを繋いで、設定画面を開きます(ダブルクリック or configure...) 。画面左側に、流れてきたデータのカラム名が表示されているので、変更したいものをダブルクリックして下さい。最初は空欄だった右側に設定画面が増えます(左のリストは太字になります)。新しく右側に出た画面のChangeにチェックをいれて、新しいカラム名を入力します。また同時に、カラムの属性もプルダウンで指定可能です。

 apply-OKして実行すると次のようになります。

f:id:sumtat:20170802161956p:plain

 ばっちりですね。これだけだとおもしろくないので、"正規表現を使ってカラム名を変更する"方法についても紹介したいと思います。

 Column Rename (Regex)

  正規表現(Regular expression)というのに馴染みがない方もいるかと思います。

「とあるルールに従って記述された文字列」のルールを書く表現方法

といった感じでしょうか?web上には、wikiや多くの記事がありますので参考にして見て下さい。

正規表現 - Wikipedia

サルにもわかる正規表現入門

今回の場合、カラム名は【マウス+効果】や【人間+効果】のように

"動物の種類"+効果

というルールに従って書かれています。これを正規表現で示すと

.*[+]効果

こんな感じでしょうか。翻訳?してみると、何かしらの文字列が可能な限り連続し(.*)、続いて"+"という1文字、さらに"効果"という文字列が続きます。という感じです。

 こういう表現をうまく活用して、一気にカラム名を変換しようというのがColumn Rename (Regex)です。設定内容を見てみます。 

f:id:sumtat:20170802165001p:plain

 Search String (regexp)に変更させたいカラム名が持つルールを正規表現として記述します。で、その中から切り出したい部分を( )で括ります。これはノードの仕様です。今回は"動物種の部分"と"効果という文字列"の2つを切り出します。それぞれは$1, $2という書き方で表されます(注:この変数が使えるのはこのノード内のみ。workflow全体として変数を使う方法は今後紹介します)。

 続いてReplacement部分に、新しく設定するカラム名を記述します。今回は

$2(種族:$1)

と書きました。結果としては【効果(種族:マウス)】ようになる予定です。ではapply-OKをして実行してみます。

f:id:sumtat:20170802165839p:plain

ばっちり、一気にカラム名を変更できました。

 

<おまけ>

このノードはこんな場合に使っても便利ですよ!

f:id:sumtat:20170802171813p:plain

 ちょっと画像が小さいんですが、似たような2つのテーブルがあった場合、それぞれのカラム名にタグ付け的なことをしてやると、後にどっちのテーブル由来のデータだったかわかりやすくなりますよ!ということを示したつもりです。例ではカラム数が少ないですが、たくさんの情報を含む場合は役に立つときがあります。

  1. column rename (regex)ではそれぞれ(.+) → 1st_$1 or 2nd_$1
  2. joinerでは1st_IDと2nd_IDでjoin(アノテーションとかもいうのかな?)
  3. 最後にcolumn renameでカラム名の微調整

こんな感じです。