いろいろ倉庫

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ではなく化合物を除去することで対応するなどの手もあると思う。

 

終わり。

【KNIME】化合物のDescriptorをたくさん計算してみたい

・先日、化合物の記述子をRDKitを使って算出した。この方法で、記述子を100個強得ることができたが、もっと得たい。

Pythonも含めて調べてみると、mordredというライブラリを利用するのが良さそうだった。mordredに関しては、以下を参照。

github.com

・まずはPythonの設定を行い、仮想環境中でmordredをインストールする。ちなみに、rdkitが入っていないとダメなので、もし入っていないようであれば一緒にインストールする。

・SMILESを用意して、Python Scriptノードに渡す(下図。ウィンドウはそれぞれのノードの出力)。1600個強のDescriptorが算出された。

f:id:choron81:20220403114019p:plain

Python Scriptノードの中のコードは以下。私はプログラミングに暗いので、何かおかしいかもしれないが、ご容赦いただきたい。入力ポートから入ったデータはPandasのDataFrameとして扱われる。また、出力形式はPandasのDataFrameでないと受け付けられない。算出したdescriptorsを文字列に変換してからPandasのDataFrameに変換するところがミソ。

from rdkit import Chem
from mordred import Calculator, descriptors
import pandas as pd

#dfを定義して、MOLオブジェクトを作成
df = input_table_1
df['MOL'] = df['SMILES'].apply(Chem.MolFromSmiles)

#mordredのDescriptorを計算
calc = Calculator(descriptors, ignore_3D=True)
descriptors = calc.pandas(df['MOL'])

#descriptorsをPandasのDataFrameに変換
descriptors = pd.DataFrame(descriptors.astype(str))

#元の表にDescriptorの表をくっつけて出力
output_table_1 = input_table_1.join(descriptors)

 

・何かに使えるかも。

 

終わり。

【KNIME】化合物のDescriptorを計算してみたい

・分子の性質を語るために、計算科学的に算出される指標のことを、記述子(Descriptor)と呼ぶ。このDescriptorにはいろいろな種類があり、ケモインフォマティクスの分野では必要に応じていろいろ使い分けられている。

・KNIMEで化合物の構造情報を扱っていると、Descriptorを算出していろいろすることもあるかもしれない。KNIMEにRDKitのExtensionをインストールしているのであれば、RDKit Descriptor Calculationノードが便利かもしれない(以下)。

hub.knime.com

・例えば、以下のような感じで使う、、、のかもしれない。

f:id:choron81:20220402234947p:plain

・ちなみに、RDKit Descriptor Calculationノードでは、算出したいDescriptorを選ぶことができる(下図)。

f:id:choron81:20220402235655p:plain

・ざっくり119個のDescriptorが算出されたっぽい。

 

終わり。