1、分子指纹生成

常见生成的方法:

a、smiles2fp simles转分子指纹,支持morgan: Morgan fingerprint.
* maccs: MACCS keys.
* rdkit: RDKit topological fingerprint.三种的函数

from tqdm import tqdm
import numpy as npfrom rdkit import Chem
from rdkit.Chem import AllChem, Draw
from rdkit.Chem import MACCSkeysdef smiles2fp(smiles, fp_type):r"""Convert smile strings to fingerprint.Molecular fingerprints are a way to represent molecules as mathematical objects.Note:To use this trick, you should install [rdkit](https://www.rdkit.org/) at first:```bashpip install rdkit```Args:smiles (list of str): The smile strings to convert.fp_type (list of str): The types of generated fingerprint. Can be the following values:* `morgan`: Morgan fingerprint.* `maccs`: MACCS keys.* `rdkit`: RDKit topological fingerprint.Returns:(np.array): The generated fingerprint features."""fps = {fpt: [] for fpt in fp_type}for i in tqdm(range(len(smiles))):rdkit_mol = Chem.MolFromSmiles(smiles[i])for fpt in fp_type:if fpt == 'morgan':fp = AllChem.GetMorganFingerprintAsBitVect(rdkit_mol, 2)elif fpt == 'maccs':fp = MACCSkeys.GenMACCSKeys(rdkit_mol)elif fpt == 'rdkit':fp = Chem.RDKFingerprint(rdkit_mol)fps[fpt].append(fp)return [np.array(fps[fpt], dtype=np.int64) for fpt in fp_type]smiles_printvec = smiles2fp(smis, ['morgan'])

b、

from rdkit.Chem import AllChemd1 =d["ROMol"][0]
d2 =d["ROMol"][1]
##指纹创建
c1 = rdkit.Chem.RDKFingerprint(d1,maxPath=7,fpSize=512)
c2 = rdkit.Chem.RDKFingerprint(d2,maxPath=7,fpSize=512)
c1.ToBitString()### 另一种指纹生成方法
c5 = AllChem.GetMorganFingerprintAsBitVect(d1,5,nBits=512)
c6 = AllChem.GetMorganFingerprintAsBitVect(d2,5,nBits=512)
c6.ToBitString()from rdkit import DataStructs
##相似度计算
DataStructs.DiceSimilarity(c1,c2),DataStructs.DiceSimilarity(c5,c6)DataStructs.CosineSimilarity(c1,c2)

2、相似性检索

计算相似度方法:


a、

pubchempy包可以下载pubchem网站上分子,但速度慢
数据源:1.txt是找的一些pubchem 分子id值

import pubchempy as pcpwith open("1.txt","r") as f:alls = f.read().splitlines()all_mols=[]
for i in alls:c = pcp.Compound.from_cid(i)print(i)all_mols.append(c.isomeric_smiles)

下面用这些下载的分子做相似性计算:


from rdkit.Chem import AllChem, Draw from rdkit import DataStructs,Chemmols = [Chem.MolFromSmiles(x) for x in all_mols if x is not None]#计算分子库每个分子指纹
mols_fps = [(m, AllChem.GetMorganFingerprint(m, 2)) for m in mols]#读入要查询的单个分子,同样计算指纹
nicotine = Chem.MolFromSmiles('O=C(C)Oc1ccccc1C(=O)O')
nicotine_fingerprint = AllChem.GetMorganFingerprint(nicotine, 2)#计算相似度并排序,输出最相似的的前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]# 画出
Draw.MolsToGridImage([m for m, sim in result], subImgSize=(200,200),molsPerRow=4, legends=['' for x in result])

单个要查询的输入分子:
查到的xiang相似前20:

b、另外方法,分子指纹onehot方式 Cosine similarity余弦相似度计算

这里读取1万个smi分子,文件下载可参考:https://github.com/zilliztech/MolSearch/edit/master/script/test_1w.smi

from rdkit import Chem
from rdkit.Chem import AllChem, Draw## 加载数据
mols2 = []
with open("1w.smi","r") as f:ss = f.readlines()for i in ss:mols2.append(i.strip().split()[0])
Draw.MolsToGridImage([ Chem.MolFromSmiles(mols2[i]) for i in range(10)],subImgSize=(300,300), molsPerRow=3)

这里Draw.MolsToGridImage函数第一个参数必须是mol格式的列表

另外每个图需要说明可以用legends 这参数,然后列表里的元素必须为字符串

from tqdm import tqdm
import numpy as np
from rdkit.Chem import MACCSkeysdef smiles2fp(smiles, fp_type):fps = {fpt: [] for fpt in fp_type}for i in tqdm(range(len(smiles))):for fpt in fp_type:if fpt == 'morgan':fp = AllChem.GetMorganFingerprintAsBitVect(smiles[i], 2,nBits=512)elif fpt == 'maccs':fp = MACCSkeys.GenMACCSKeys(rdkit_mol)elif fpt == 'rdkit':fp = Chem.RDKFingerprint(rdkit_mol)fps[fpt].append(fp)return [np.array(fps[fpt], dtype=np.int64) for fpt in fp_type]
## 计算1万个分子的指纹one hot
smiles_printvec = smiles2fp(mols2, ['morgan'])##带查询的阿司匹林分子指纹
aspirin= Chem.MolFromSmiles('CC(=O)OC1=CC=CC=C1C(O)=O')
aspirin_printvec = np.array(AllChem.GetMorganFingerprintAsBitVect(aspirin, 2,nBits=512))##数据处理归一,相似度计算nnn = np.linalg.norm(smiles_printvec )* np.linalg.norm(aspirin_printvec )
iii = np.dot(smiles_printvec , aspirin_printvec .T)
sims = iii/nnn
sims## 取最相似的前10个,用squeeze进行降维度,因为argsort必须作用于一维[ii for ii in np.squeeze(sims).argsort()[::-1][:10]]

结果:阿司匹林

最相似的前10个
Draw.MolsToGridImage([ Chem.MolFromSmiles(mols2[i]) for i in [4786, 5047, 4231, 8489, 3417, 9829, 2685, 3063, 9201, 3326]],subImgSize=(300,300), molsPerRow=5)

rdkit分子指纹生成;相似性检索相关推荐

  1. RDKit|分子指纹提取、相似性比较及应用

    文章目录 一.分子指纹提取 1.Topological Fingerprints 2.MACCS 3.Atom Pairs and Topological Torsions 4.Morgan Fing ...

  2. RDKit | 基于分子指纹的相似性图

    Similarity Maps 相似性图是一种可视化原子对分子和参考分子之间相似性的贡献的方法.相似性图可用于可视化和确认相似区域. 导入库 from rdkit import Chem from r ...

  3. rdkit 化学指纹(fingerprint)和相似性

    文章目录 一.引入所需库 二.化学指纹 2.1 拓扑指纹 Chem.RDKFingerprint(mol) 2.2 MACCS 指纹MACCSkeys.GenMACCSKeys(mol) 2.3 原子 ...

  4. 谷本系数/相似度的计算和分子指纹

    查阅起点来自<A Deep Learning Approach to Antibiotic Discovery> Tanimoto coefficient 即谷本系数的计算公式是: T s ...

  5. RDKit|摩根分子指纹计算、提取与可视化

    文章目录 一.摩根分子指纹计算 1.简介 2.SparseIntVects 3.ExplicitBitVects 4.FCFPs 5.更多泛化 二.摩根分子指纹提取 1.提取方法一 2.提取方法二 三 ...

  6. RDKit | 基于分子指纹可视化化学空间

    根据化学结构可视化化合物空间 方法 计算分子指纹 为每种化合物生成一个指纹并减小其尺寸,以便可以将其绘制在平面上.根据相似性原理,"相似的化合物具有相似的性质",具有相似结构和性质 ...

  7. RDKit | 比较分子之间的相似性

    比较分子之间的相似性 获取结构和数据,将SMILES转换为RDKit分子对象,然后比较相似性. 1.导入python模块 import numpy as np import pandas as pd ...

  8. RDKit入门教程(2)——利用RDKit获取分子指纹

    基于RDKit 获取分子指纹 分子指纹(化学指纹,Chemical Fingerprinting): 将化学分子的特征利用二进制表示,如MDL公司开发的MACCSkeys指纹. MACCSkeys共有 ...

  9. JCIM | 用于自动生成类药分子的生成网络复合体(GNC)

    作者/编辑 | 王建民 导读 目前的药物发现工作既昂贵又耗时.如何创造出种类繁多的新型化合物,使其不仅具有理想的药理特性,而且低收入人群也能廉价获得,仍然是一项具有挑战性的任务.这项工作中,研究人员开 ...

最新文章

  1. 不能用了 重装系统git_重装新版gitlab时遇到gitlab-rails database初始化失败
  2. 【Crash Course Psychology】1. Intro to psychology笔记
  3. OpenGL pipeline (very important)
  4. c语言作业模拟虚拟内存,如何用c语言实现虚拟内存
  5. html5播放视频自动循环播放,HTML5 通过Vedio标签实现视频循环播放的示例代码
  6. 数组占位符_Java基础 方法和数组
  7. Spring Cloud(二):服务注册与发现 Eureka【Finchley 版】
  8. Linux内核调试 - 一般人儿我都不告诉他(一)
  9. JS des加密解密
  10. HTML网页设计基础——二维码名片
  11. J-Octa 使用MD和MO/DFT计算相对介电常数
  12. FPGA——三段式状态机(1)
  13. MySQL的需求分析怎么写_MySQL 数据库设计 笔记与总结(1)需求分析
  14. ubuntu22.04美化、办公、开发工具安装
  15. BI工具调研之——帆软
  16. vb.net获取汉字串拼音首字母
  17. 益聚星荣:网易有道、沪江小D等词典错误频现 莫让词典类APP误人子弟
  18. 【JVM调优工具】JVM调优工具
  19. 模仿是一种最好的学习方法
  20. Stata学习笔记|导入数据

热门文章

  1. 牛啊,又一份牛逼笔记面世了
  2. 前端入职第一天都在做什么
  3. 微信小程序开发(二)图片上传
  4. 倒计时2天:中国工程院院士谭建荣等嘉宾确认出席,“警务+”时代来临...
  5. vscode 插件--汉化、主题、字体
  6. java 阿贾克斯怎么写_阿贾克斯
  7. 公司应该以怎样的姿态接受员工的建议?
  8. 我们应当怎样做需求分析[转]
  9. 谭浩强版 c语言程序设计,c语言程序设计
  10. 前端项目实战33-配置相对路径