MENU

RDKitを用いた分子記述子の生成[Tips]

目次

目的

  1. SMILESから分子記述子を生成する手法を学ぶ

前提

RDKitのインストール

pip install rdkit
import rdkit

print(rdkit.__version__)

# <output>
# RDKit version: 2023.09.6

RDKitで生成できる記述子

RDKitで生成できる記述子は、rdkit.Chem.DescriptorsモジュールのDescListで確認できます。
DescListには、(記述子名, 記述子生成関数)のタプルがリストで格納されています。
RDKitは、210種類の記述子を生成可能です。(RDKit version: 2023.09.6 時点)

from rdkit.Chem import Descriptors

print(len(Descriptors.descList))

# <output>
# 記述子の個数:  210

main: SMILESから分子記述子を生成

練習として、Amigdalin (MoleculeNetWater solubility dataより)の分子記述子を生成します。

smiles= 'OCC3OC(OCC2OC(OC(C#N)c1ccccc1)C(O)C(O)C2O)C(O)C(O)C3O'
mol= Chem.MolFromSmiles(smiles)  # SMILESからMolオプジェクトを生成
mol

全記述子(210種類)をまとめて生成

Descriptors.CalcMolDescriptors()関数を用いることで、実装されている全ての記述子(210種類)をまとめて計算することができます。(ただし、RDKit version 2023.03.1以降)

results= Descriptors.CalcMolDescriptors(mol)
pd.DataFrame.from_dict(results,orient="index",columns=["Amigdalin"]).T  

# <output>
# 1 rows × 210 columns
スクロールできます
MaxAbsEStateIndexMaxEStateIndexMinAbsEStateIndexMinEStateIndexqedSPSMolWtHeavyAtomMolWtExactMolWtNumValenceElectronsfr_sulfidefr_sulfonamdfr_sulfonefr_term_acetylenefr_tetrazolefr_thiazolefr_thiocyanfr_thiophenefr_unbrch_alkanefr_urea
Amigdalin10.25332910.2533290.486602-1.7016050.21751841.0625457.432430.216457.158411178.00.00.00.00.00.00.00.00.00.00.0

特定の記述子のみを生成

例えば、分子量を計算したいときは、以下のように記述子生成関数を直接呼び出します。

Descriptors.MolWt(mol)  # molは、上述のAmigdalinのmolオプジェクト

# <output>
# 457.4320000000001

ただし、すべての関数がrdkit.Chem.Descriptors モジュール下に存在するわけではありません。
例えば、MaxAbsEStateIndex 記述子は、rdkit.Chem.Estate.Estate モジュールのMaxAbsEStateIndex()関数を用います。

from rdkit.Chem.EState import EState

EState.MaxAbsEStateIndex(mol, force=1)  # molは、上述のAmigdalinのmolオプジェクト

# <output>
# 10.253328884035504

自分が計算したい記述子がどのモジュール下に存在するかわからないときは、一旦次のようなdescDictを作成し、記述子名でアクセスすると扱いやすくなります。

descDict= {name:func for name,func in Descriptors.descList}
# MaxAbsEStateIndex 記述子を計算する例
descDict["MaxAbsEStateIndex"](mol)

# <output>
# 10.253328884035504

終わり。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次