Chapter 32

【4回目】RDKitでできること

poclabweb
poclabweb
2022.10.27に更新

ここでは、rdkitを使って化合物データを化学的な情報に変換していくやり方を学びます。
rdkitでは、smilesやInchiなどから分子を読み込み、様々な化学記述子に変換できたり、分子の配座情報や構造情報を取得できたり、部分構造で検索できたりします。

講義動画

https://vimeo.com/showcase/8857611

今回のアウトライン

0. rdkitのインストールと呼び出し及びversion確認

!pip install rdkit==2022.3.5
from rdkit import rdBase, Chem
print(rdBase.rdkitVersion)

1. 分子の読み込みと表示

1分子の読み込み

rdkit.Chem.MolFromSmiles(smiles)
rdkit.Chem.MolFromInchi(Inchi)
rdkit.Chem.MolFromMolBlock(mol_block)

複数分子の読み込み

rdkit.Chem.SDMolSupplier(SDF)
rdkit.Draw.MolsToGridImage(mols)
rdkit.Chem.PandasTools.LoadSDF(SDF)
df["smiles"] = df["ROMol"].map(Chem.MolToSmiles)
df.to_csv('output.csv')

分子の表示

from rdkit.Chem import Draw
Draw.MolsToGridImage(mols)

2. 分子のDescriptorを表示

from rdkit import Chem
from rdkit.Chem import Descriptors

複数分子を読み込んだデータフレームにDescriptorを追加

  • TPSAの追加
df["TPSA"] = df["ROMol"].map(Descriptors.TPSA)
  • MolLogPの追加
df["MolLogP"] = df["ROMol"].map(Descriptors.MolLogP)
  • qedの追加
df["qed"] = df["ROMol"].map(Descriptors.qed)

複数分子を読み込んだデータフレームにDescriptorを全て追加

for i, j in Descriptors.descList:
    df[i] = df["ROMol"].map(j)

morganfingerprint

AllChem.GetMorganFingerprintAsBitVect(compound, 2, bitInfo=bitI_morgan)

3. 分子情報の取得

環関係

ringinfo = mol.GetRingInfo()
ringinfo.NumRings()

結合関係

bonds_info = mol.GetBonds()
bond.GetBondType()
begin_atom = bond.GetBeginAtom()
begin_atom.GetSymbol()
end_atom = bond.GetEndAtom()
end_atom.GetSymbol()
atoms_info = mol.GetAtoms()

原子関係

atoms_info = mol.GetAtoms()
atom.GetIdx()
atom.GetSymbol()
atom.GetNumRadicalElectrons()
atom.GetFormalCharge()

4. 分子の構造変換

1番大きなフラグメントを残して他を除去

rdkit.Chem.MolStandardize.fragment.LargestFragmentChooser()

水素の付加

rdkit.Chem.AddHs(mol, addCoords=True)

配座生成と構造最適化

AllChem.EmbedMolecule(mol, AllChem.ETKDG())
rdkit.AllChem.MMFFOptimizeMolecule(mol)

5. Smartsによる部分構造検索

patt = Chem.MolFromSmarts('smarts')
matches = [mol for mol in mols if mol.HasSubstructMatch(patt)]
Draw.MolsToGridImage(matches)