t_kahi’s blog

KNIMEやCellProfiler、創薬に関する記事と,日々のメモです

【KNIME】化合物処理の時系列データから変化量を計算するKNIME Workflow

こんばんは,@PKです.

今回は化合物処理の時系列データから変化量を計算するKNIME Workflowについて紹介します.

はじめに

以下に今回の目的をイメージ図で示しました.
f:id:t_kahi:20190912215257p:plain

ここでは濃度を変えた化合物を添加した際に,各タイムポイントごとに測定値を取得し,タイムポイント間の変化量を計算するというものです.

化合物や測定値が少ない場合はEXCELでもできると思いますが,HCA解析で特徴量が膨大な場合などは少し煩雑になると思います.

紹介するWorkflowを使って,以下に示すような変換を行うことができます.
f:id:t_kahi:20190912215901p:plain

KNIME Workflowの概要

今回紹介するWorkflowを以下に示します.
f:id:t_kahi:20190912221442p:plain

Excel Reader」でデータを読み込んだ後に,「Group Loop Start」で各化合物+濃度ごとにループ処理を行います.

f:id:t_kahi:20190912222024p:plain

このあとWorkflowが分岐していますが,ここでは変化量を計算するカラム(下分岐)と,化合物の濃度やタイムポイントなどの情報を抽出する部分(上分岐)にわけておきます.

f:id:t_kahi:20190912222439p:plain

続いて,変化量を測定するループ処理の部分について紹介します.

「Column Rename (Regex)」を使用してカラム名を変更

まずは「Column List Loop Start」で変化量を測定するカラムを選択します.
f:id:t_kahi:20190916090319p:plain
f:id:t_kahi:20190916103122p:plain

続いて,「Column Rename (Regex)」を使用してループを回すカラムの名前をANONYMOUSに変えます.
この部分については下記記事に詳細を載せているので,是非参考にしてください.
【KNIME】全てのカラムの数値データをループで処理する - t_kahi’s blog

f:id:t_kahi:20190916120854p:plain

「Lag Column」で変化量を計算する

変化量の測定ですが,ここでは「Lag Clolumn」というノードを使用します.
このノードを使うと,指定したノードから指定した分ずらした行を抽出することができます.
以下の例で示しているように,「Lag Column」を使って作成したANONYMOUS(-1)という行は,ANONYMOUS行を一つずらした値になっていることがわかります
f:id:t_kahi:20190916120926p:plain

nodepit.com

他のプログラムではlag関数として知られているものです(おまけでdplyrのlag関数を使った例を示します)

ノードの設定について以下に示します.

  • Column to Lag:値をシフトするカラムを指定する
  • Lag:値をシフトしたカラムの生成数
  • Lag interval:何個の行をシフトするか
  • Skip initial incomplete rows:最初の行が省略され,ラグの出力列に欠損値がでないようにする
  • Skip last incomplete rows:最後のラグ出力の行が省略される(もし選択しない場合はラグ出力値以外は欠損値となる)

今回は単純に一つシフトさせたカラムを作成したかったので,Lag, Lag intervalは1に設定しました.

「Math Formula」で変化量を計算する

「Lag Column」で値をシフトさせたカラムを作成できれば,あとは簡単です.
以下のように「Math Formula」でカラムごとの引き算を行い,変化量のカラムを新たに作成します.

f:id:t_kahi:20190916205916p:plain

上図のように,変化量のカラムを作成することができました.
最後に,「Column Filter」でループ処理で不必要なカラムを除いて,「Column Rename (Regex)」で変化量rateのカラムをもとの測定値のカラム名に直してループを終了します.
f:id:t_kahi:20190916210406p:plain

あとは「Loop End (Column Append)」で絡むリストのループを閉じて,「Column Appender」で化合物の濃度やタイムポイントなどの情報と結合して「Loop End」ですべての濃度や化合物をループ処理すれば終了です.
再掲ですが,以下のようにタイムポイントごとの変化量を測定することができました.
f:id:t_kahi:20190916211057p:plain

おまけ:dplyrを使って変化量を測定する

「Lag Column」と「Math Formula」をRのdplyr(でぃーぷらいあーと読むらしいです)で処理すると以下のようになります.

library(dplyr)

data <- knime.in

data.result <- data %>% mutate(ANONYMOUSE = ANONYMOUSE - lag(ANONYMOUSE))

knime.out <- data.result

最後に

今回は化合物処理の時系列データから変化量を計算するKNIME Workflowについて紹介しました.
同僚からできないか,と相談されて作成したWorkflowなのですが,変化量を使った解析は私も今後行う予定だったので使い回せるWorkflowだと感じています.

最後にWorkflowの動画を紹介します.

youtu.be