このチャプターの目次
ここでは、rdkitを使って化合物データを化学的な情報に変換していくやり方を学びます。
rdkitでは、smilesやInchiなどから分子を読み込み、様々な化学記述子に変換できたり、分子の配座情報や構造情報を取得できたり、部分構造で検索できたりします。
講義動画
今回のアウトライン
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)