いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【KNIME】エラーの出た記述子列を除去したい

・先日、化学構造からMordredを用いてDescriptorをたくさん算出した。

・1600を超えるDescriptorを提示いただけたが、エラーが生じているものも少なくなかった。そこで、エラーが生じた記述子列を除去するワークフローを考えてみた(下図)。

f:id:choron81:20220409152119p:plain

・ここでいうエラーは、目的のDescriptorが正しく算出されなかったものではなく、Descriptorに数値が返ってこなかったことを指すことにする。そこで本ワークフローでは、「算出されたDescriptorの表から、数値以外のセルを含む列を除去する」ことを目指した。

・流れは以下の通り。

・以前の記事の通り、Python Scriptを用いてMordredでDescriptorを算出した。

・次に、ColumnSplitterで、消したくないString列を分離した。今回は、StructureのSMILESは残したかったので、SMILESとその他で分離した。

・次に、分離したSMILES以外の列の型を判別した。Python Scriptの出力は、数値だけを含む列もStringになってしまっているので、そういう列をちゃんと数値型と認識させなければならない。Column Auto Type Castというノードが便利で、型を自動で判別して振りなおしてくれる。

・次に、型を振りなおした表から、Column Filterで数値型の列だけを抽出した(設定は下図)。

f:id:choron81:20220409152846p:plain

・最後に、分離したSMILES列と数値型だけの列を結合しした(下図は出力)。もともとPython Scriptで出た表は1615列あったが、1462列になっており、構造情報を除く列がすべてNumberになっている。

f:id:choron81:20220409153113p:plain

・今回は、「すべての化合物について数値データである場合のみDescriptorを残す」ことにしたので、1化合物だけで算出不可だった(文字列データを返してきた)場合でもDescriptorを削除している。そのため、情報ロスが若干多く感じる。化合物数が多いのであれば、Descriptorではなく化合物を除去することで対応するなどの手もあると思う。

 

終わり。