目次
目的
- 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 (MoleculeNetのWater 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
スクロールできます
MaxAbsEStateIndex | MaxEStateIndex | MinAbsEStateIndex | MinEStateIndex | qed | SPS | MolWt | HeavyAtomMolWt | ExactMolWt | NumValenceElectrons | … | fr_sulfide | fr_sulfonamd | fr_sulfone | fr_term_acetylene | fr_tetrazole | fr_thiazole | fr_thiocyan | fr_thiophene | fr_unbrch_alkane | fr_urea | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Amigdalin | 10.253329 | 10.253329 | 0.486602 | -1.701605 | 0.217518 | 41.0625 | 457.432 | 430.216 | 457.158411 | 178.0 | … | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.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
終わり。