【KNIME】ノード紹介:Column Rename 〜カラム名を変更したい〜
今回はカラム名を変えたいときにどうするか?というお話です。後から気が変わったり、KNIMEの仕様で勝手にカラム名を決められたり、様々な理由で変更したくなるタイミングがあると思います。下の例を参考にして、操作の方法を紹介します。
*このテーブルができるまでの流れについては
【KNIME】ノード紹介:Transpose, Pivoting 〜表(table)の縦と横(行と列)を入れ替えたい〜
をご覧下さい。
Column Rename
もう、本当に名前のままのノードがあります。早速設定の内容をみちゃいましょうね。
特に難しいところはないと思います。Column Renameの入口▶︎に、カラム名を変えたいデータを繋いで、設定画面を開きます(ダブルクリック or configure...) 。画面左側に、流れてきたデータのカラム名が表示されているので、変更したいものをダブルクリックして下さい。最初は空欄だった右側に設定画面が増えます(左のリストは太字になります)。新しく右側に出た画面のChangeにチェックをいれて、新しいカラム名を入力します。また同時に、カラムの属性もプルダウンで指定可能です。
apply-OKして実行すると次のようになります。
ばっちりですね。これだけだとおもしろくないので、"正規表現を使ってカラム名を変更する"方法についても紹介したいと思います。
Column Rename (Regex)
正規表現(Regular expression)というのに馴染みがない方もいるかと思います。
「とあるルールに従って記述された文字列」のルールを書く表現方法
といった感じでしょうか?web上には、wikiや多くの記事がありますので参考にして見て下さい。
今回の場合、カラム名は【マウス+効果】や【人間+効果】のように
"動物の種類"+効果
というルールに従って書かれています。これを正規表現で示すと
.*[+]効果
こんな感じでしょうか。翻訳?してみると、何かしらの文字列が可能な限り連続し(.*)、続いて"+"という1文字、さらに"効果"という文字列が続きます。という感じです。
こういう表現をうまく活用して、一気にカラム名を変換しようというのがColumn Rename (Regex)です。設定内容を見てみます。
Search String (regexp)に変更させたいカラム名が持つルールを正規表現として記述します。で、その中から切り出したい部分を( )で括ります。これはノードの仕様です。今回は"動物種の部分"と"効果という文字列"の2つを切り出します。それぞれは$1, $2という書き方で表されます(注:この変数が使えるのはこのノード内のみ。workflow全体として変数を使う方法は今後紹介します)。
続いてReplacement部分に、新しく設定するカラム名を記述します。今回は
$2(種族:$1)
と書きました。結果としては【効果(種族:マウス)】ようになる予定です。ではapply-OKをして実行してみます。
ばっちり、一気にカラム名を変更できました。
<おまけ>
このノードはこんな場合に使っても便利ですよ!
ちょっと画像が小さいんですが、似たような2つのテーブルがあった場合、それぞれのカラム名にタグ付け的なことをしてやると、後にどっちのテーブル由来のデータだったかわかりやすくなりますよ!ということを示したつもりです。例ではカラム数が少ないですが、たくさんの情報を含む場合は役に立つときがあります。
- column rename (regex)ではそれぞれ(.+) → 1st_$1 or 2nd_$1
- joinerでは1st_IDと2nd_IDでjoin(アノテーションとかもいうのかな?)
- 最後にcolumn renameでカラム名の微調整
こんな感じです。