RDKit:化合物相似性搜索(基于Python3)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012325865/article/details/82153557

基于Python3和RDKit的化合物结构相似性搜索

化合物相似性在化学信息学和药物发现中具有悠久的历史,许多计算方法采用相似度测定来鉴定研究的新化合物。

本实例通过计算分子的Morgan指纹进行相似性比对。

代码实例:

#导入依赖包
#!/usr/bin/env python3

from rdkit.Chem import AllChem as ch
from rdkit.Chem import Draw as d
from rdkit import DataStructs
#载入分子库
suppl = ch.SDMolSupplier('drugbank.sdf')
mols = [x for x in suppl if x is not None]
len(mols)    #计算分子库分子数目
#读入查询分子,计算指纹
nicotine = ch.MolFromSmiles('O=C(C)Oc1ccccc1C(=O)O')
nicotine_fingerprint = ch.GetMorganFingerprint(nicotine, 2)
#计算分子库每个分子指纹
mols_fps = [(m, ch.GetMorganFingerprint(m, 2)) for m in mols]
#计算相似度并排序,输出最相似的的前20个分子

mols_nicotinesim = [(m, DataStructs.TanimotoSimilarity(fp, nicotine_fingerprint))
                    for m, fp in mols_fps]
sorted_mols_nicotinesim = sorted(mols_nicotinesim, key=lambda x: x[1], reverse=True)
result = sorted_mols_nicotinesim[:20]
#输出最相似的前20个结构
map(ch.Compute2DCoords, (m for m, sim in result))
img = d.MolsToGridImage([m for m, sim in result], kekulize=False, subImgSize=(400,400),
                        legends=[mol.GetProp("GENERIC_NAME") + ': ' + str(sim)
                                 for mol, sim in result])
img


注:代码中用到的文件需要可以留言博主

猜你喜欢

转载自blog.csdn.net/u012325865/article/details/82153557