ご注文はリード化合物ですか?〜医薬化学録にわ〜

自分の勉強や備忘録などを兼ねて好き勝手なことを書いていくブログです。

小ネタ:RDKit による分子記述子の算出

RDKit はケモインフォマティクスをやるのに欠かせないライブラリです。
分子の描写など、色々できますが、分子記述子を算出することもできます。
ちなみに、Mordred も、RDKit をベースに記述子を計算しています。

aimedchem.hatenablog.com

RDKit で分子記述子を算出するコードは以下の通りです。

import numpy as np
import pandas as pd
from rdkit import Chem
from rdkit.Chem import Descriptors
from rdkit.ML.Descriptors.MoleculeDescriptors import MolecularDescriptorCalculator

# 化学構造データの読み込み
supplier = Chem.SDMolSupplier("../data/logSdataset1290_2d.sdf")
smiles_list = [Chem.MolToSmiles(mol) for mol in supplier]

# 記述子名の抽出
descriptor_names = [descriptor_name[0] for descriptor_name in Descriptors._descList]

# 記述子を計算するインスタンスの作成
calculator = MolecularDescriptorCalculator(descriptor_names)

# 記述子計算
descriptors = [calculator.CalcDescriptors(mol) for mol in supplier]

# DataFrame 形式にする
descriptors = pd.DataFrame(descriptors, index = smiles_list, columns = descriptor_names)

上記のコードは、以下の記事を参考にさせて頂きました。

datadriven-rnd.com


何をしているか少し解説をすると、MolecularDescriptorCalculator が記述子を計算してくれるインスタンスで、(RDKit に対応している)記述子名を入れると、その記述子を計算してくれます。実は、Descriptors._descList は記述子名とその記述子を計算してくれる関数のタプルが集合しているインスタンスなので、特定の記述子だけ計算したい場合は、ここから上手く選択してやるのも良いかもしれません。

インスタンスである calculator から記述子名の一覧を取得したいときは、calculator.GetDescriptorNames() を使うと便利です。また、記述子の簡単な説明が欲しい場合は、calculator.GetDescriptorSummaries() を使うと、記述子の説明や参考文献が出てきます(N/A となっている記述子もあるので注意)。

2022 年 1 月現在、上記の方法で 200 種類の記述子を取得することが可能です。

余談ですが、CompoundDescriptors というクラスもあり、公式の説明をざっと読んだ感じ、原子レベルの記述子を MoleculeDescriptors と同じ要領で計算できそうな雰囲気がするのですが、記述子名の取得が分からず断念・・・

今回の記事も自分のメモ用ですが、誰かの調べる手間が少しでも軽減すれば幸いです。