【RDKit】Python化学包RDkit的教程
Python化學包RDkit的教程
- 官方地址
- 教程
- 讀取文件
- 對分子進行操作
- 訪問單個原子
- 訪問化學鍵
- 化學特征提取
官方地址
http://www.rdkit.org/
本文不再給出安裝方法,讀者可自行網(wǎng)上搜索。
教程
說明:如果某一行有注釋,則該注釋表示該行的輸出
讀取文件
RDKit能讀取各種各樣的化學結(jié)構(gòu)文件,類和方法主要在rdkit.Chem.rdmolfiles這個模塊下,因此需要先導入包
from rdkit import Chem以sdf文件為例,官方給出了4種等價的讀取方法,這些方法返回一個或多個rdkit.Chem.rdchem.Mol對象(http://www.rdkit.org/docs/source/rdkit.Chem.rdmolfiles.html#rdkit.Chem.rdmolfiles.SDMolSupplier)
suppl = Chem.SDMolSupplier('in.sdf') mol = suppl[0] print(mol.GetNumAtoms()) # 9奇怪,原子數(shù)怎么只有9個?輸出所有原子之后發(fā)現(xiàn)氫原子被省略了,因此如果你不希望省略氫原子,按照以下方式讀取
suppl = Chem.SDMolSupplier('in.sdf', removeHs=False) mol = suppl[0] print(mol.GetNumAtoms()) # 23對分子進行操作
訪問單個原子
如果要訪問單個原子,可以通過GetAtomWithIndex()獲得原子對象rdkit.Chem.rdchem.Atom,以第一個原子碳原子為例,獲取它的標簽、價電子、原子元素周期編號
atom = mol.GetAtomWithIdx(0) print(atom.GetSymbol()) # C print(atom.GetExplicitValence()) # 4 print(atom.GetAtomicNum()) # 6如果要訪問所有原子,可以通過GetAtoms()方法遍歷
for atom in mol.GetAtoms():print(atom.GetSymbol())獲取所有原子坐標,該方法返回一個numpy數(shù)組
mol.GetConformers()[0].GetPositions() # return a numpy array其他可能用到的屬性
atom.GetHybridization() # 返回雜化類型 atom.GetIsAromatic () # 該原子是否在芳香烴內(nèi) atom.GetTotalNumHs() # 與該原子連接的氫原子個數(shù) atom.GetNeighbors() # 返回該原子的所有鄰居原子,以元祖的形式返回有關(guān)原子的請其他方法點擊這里
訪問化學鍵
通過GetBondBetweenAtoms()可以返回一個化學鍵的對象rdkit.Chem.rdchem.Bond,這個方法的輸入?yún)?shù)是兩個原子在數(shù)組中的編號,如果化學鍵不存在,則返回None
bond1 = mol.GetBondBetweenAtoms(0,1) bond2 = mol.GetBondBetweenAtoms(0,2) print(bond1) # <rdkit.Chem.rdchem.Bond object at 0x000000000084D850> print(bond2) # None獲得化學鍵的類型
print(bond1.GetBondType()) # rdkit.Chem.rdchem.BondType.SINGLE化學鍵的鍵長我暫時沒有找到相應(yīng)的方法,但是可以根據(jù)原子的坐標手動計算。
化學特征提取
重新打開一個Python文件進行操作。
對于有些原子的特征,其在原子層面上無法判斷化學特征,因此需要在分子層面上進行提取。例如化學中的donor和acceptor概念(具體是什么意思我也不知道,沒有化學背景,但知道有這些類別就行,并且這些類別是原子的特征)
首先導入包,然后設(shè)定特征的參考文件,并實例化一個特征工廠。
默認情況下對任何化合物都不需要改動上面的代碼。
利用MolFromSmiles方法讀取分子。Smiles(Simplified molecular-input line-entry system)是一種描述分子的字符串描述符,和高中學過的分子結(jié)構(gòu)式差不多。更多關(guān)于Smiles的信息可以參見百度百科或維基百科
這里分子為OCc1ccccc1CN,我們最終生成了8個特征,每個特征的提取方法如下所示
feats[0].GetFamily() # 'Donor' feats[0].GetType() # 'SingleAtomDonor' feats[0].GetAtomIds() # (0,) feats[4].GetFamily() # 'Aromatic' feats[4].GetAtomIds() # (2, 3, 4, 5, 6, 7)更多關(guān)于特征方法請參閱這里
總結(jié)
以上是生活随笔為你收集整理的【RDKit】Python化学包RDkit的教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 可执行文件结构与进程结构
- 下一篇: 【增速】人工智能之计算机视觉工业领域落地