其实将分子的SMILES转化为图是很简单的,也是很便捷的,主要有以下几步:

一、导入相关的包

import numpy as np
import torch
import dgl
from dgl import DGLGraph
from rdkit import Chem
from rdkit.Chem import rdMolDescriptors as rdDesc

二、将SMILES转化为RDKIT的mol对象,同时生成一个空的dgl图

molecule_smiles='[C@@H](Cl)(F)Br'
G = DGLGraph()
#加载smile生成mol对象
molecule = Chem.MolFromSmiles(molecule_smiles)

三、为DGL图添加节点

G.add_nodes(molecule.GetNumAtoms())

四、提取原子的特征和化学键特征

get_atom_features和get_bond_features分别为提取原子特征和化学键特征的函数,如下:

这里先插入一个辅助函数:

#辅助函数
def one_of_k_encoding_unk(x, allowable_set):'将x与allowable_set逐个比较,相同为True, 不同为False, 都不同则认为是最后一个相同'if x not in allowable_set:x = allowable_set[-1]return list(map(lambda s: x == s, allowable_set))

获取原子的特征,特征包括:元素种类、隐含价、价电子、成键、电荷、杂化类型

def get_atom_features(atom):possible_atom = ['C', 'N', 'O', 'F', 'P', 'Cl', 'Br', 'I', 'DU'] #DU代表其他原子atom_features = one_of_k_encoding_unk(atom.GetSymbol(), possible_atom)atom_features += one_of_k_encoding_unk(atom.GetImplicitValence(), [0, 1])atom_features += one_of_k_encoding_unk(atom.GetNumRadicalElectrons(), [0, 1])atom_features += one_of_k_encoding_unk(atom.GetDegree(), [0, 1, 2, 3, 4, 5, 6])atom_features += one_of_k_encoding_unk(atom.GetFormalCharge(), [-1, 1])atom_features += one_of_k_encoding_unk(atom.GetHybridization(), [Chem.rdchem.HybridizationType.SP, Chem.rdchem.HybridizationType.SP2,Chem.rdchem.HybridizationType.SP3, Chem.rdchem.HybridizationType.SP3D])       return np.array(atom_features)

获取边特征,包括:是否为单键、双键、三键、成环、芳香环、共轭

def get_bond_features(bond):bond_type = bond.GetBondType()bond_feats = [bond_type == Chem.rdchem.BondType.SINGLE, bond_type == Chem.rdchem.BondType.DOUBLE,bond_type == Chem.rdchem.BondType.TRIPLE, bond_type == Chem.rdchem.BondType.AROMATIC,bond.GetIsConjugated(),bond.IsInRing()]return np.array(bond_feats)

五、提取每一个原子的特征(节点特征和边特征)生成图

node_features = []
edge_features = []for i in range(molecule.GetNumAtoms()):atom_i = molecule.GetAtomWithIdx(i) atom_i_features = get_atom_features(atom_i) node_features.append(atom_i_features)for j in range(molecule.GetNumAtoms()):bond_ij = molecule.GetBondBetweenAtoms(i, j)if bond_ij is not None:G.add_edges(i,j) bond_features_ij = get_bond_features(bond_ij) edge_features.append(bond_features_ij)G.ndata['x'] = torch.from_numpy(np.array(node_features)) #dgl添加原子/节点特征
G.edata['w'] = torch.from_numpy(np.array(edge_features)) #dgl添加键/边特征
G

六、输出结果为:

将分子SMILES生成DGLGraph相关推荐

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

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

  2. rdkit分子指纹生成;相似性检索

    1.分子指纹生成 常见生成的方法: a.smiles2fp simles转分子指纹,支持morgan: Morgan fingerprint. * maccs: MACCS keys. * rdkit ...

  3. Briefings in Bioinformatics2021 | 药物挖掘分子设计--生成模型综述

     原文标题:Molecular design in drug discovery: a comprehensive review of deep generative models 论文地址:Mole ...

  4. J. Cheminform. | 基于SMILES的利用骨架的分子生成模型

    今天给大家介绍的是瑞典制药公司阿斯利康,伯尔尼大学和广州再生医学与健康中心广东省实验室于2020年2月4日联合发表在Journal of Cheminformatics的一篇论文,这篇文章提出了一种新 ...

  5. JCIM| 基于双向RNN的分子生成模型

    今天给大家介绍的是被誉为"欧陆第一名校"苏黎世联邦理工学院(ETH Zurich)化学与应用生物科学系博士生Francesca Grisoni和制药行业顾问Gisbert Schn ...

  6. Nat. Mach. Intell. | 利用条件循环神经网络生成特定性质分子

    作者 | 陆丰庆 今天给大家介绍瑞士知名药企阿斯利康和伯尔尼大学的 Esben Jannik Bjerrum团队在Nature Machine Intelligence上的一篇论文.该研究提出基于分子 ...

  7. 将图卷积神经网络用于解码分子生成

    ©PaperWeekly 原创 · 作者|张玮玮 学校|东北大学硕士 研究方向|脑电情绪识别 论文标题: A Two-Step Graph Convolutional Decoder for Mole ...

  8. JCIM2021 | MolGPT : 基于Transformer-Decoder的分子生成

    原文标题:Molecular Generation Using a Transformer-Decoder Model 地址:https://pubs.acs.org/doi/pdf/10.1021/ ...

  9. 分子生成中常见分子描述符介绍及代码实现

    一.背景介绍 本文针对计算机辅助药物设计 (CADD)中的分子生成方向进行一下总结,主要内容是根据模型生成的分子理化性质检验,包括多种性质的定义.计算公式.评价指标及实现代码. 计算机辅助药物设计 ( ...

  10. 【语言模型生成分子更好】Language models can learn complex molecular distributions

    Language models can learn complex molecular distributions[Nature Communications] 语言模型可以学习复杂的分子分布 pap ...

最新文章

  1. DIV+CSS 命名规范
  2. Oracle按照时间统计总结
  3. 线程函数的设计以及MsgWaitForMultipleObjects函数的使用要点
  4. 华为笔记本matebook13_华为MateBook 13_HUAWEI MateBook 13(i5 8265U/8GB/256GB/独显)_笔记本导购-中关村在线...
  5. PHP日期、时间戳相关的小程序
  6. java注册中心nacos_spring-cloud整合nacos做注册中心
  7. 基于modelsim的十个Verilog入门试验程序(5)(数字秒表+自助售票机)—程序+测试代码+波形+结果分析
  8. [10月4日的脚本] 获取Office365邮箱文件夹的权限
  9. python - 求约数 质数法
  10. YDUI Touch InfiniteScroll无限加载数据测试
  11. 下载新版火狐后无法同步书签_firefox无法同步书签,恢复备份文件失败的解决办法...
  12. 计算机休眠唤醒原理,电脑休眠和睡眠区别以及怎么唤醒
  13. 学习-工具-tox自动化工具
  14. 实现页面的图文混排布局(Web作业)
  15. 数据中心远程集中解决方案有哪些?
  16. Unity3D 绑定机械传动 插件包
  17. android语音输入文字,盘点好用的语音输入APP,懒得打字的时候就说话吧!
  18. selenium如何执行网页脚本
  19. Windows 下常用盗版软件的替代免费软件列表
  20. Xcode_修改默认名称和公司

热门文章

  1. 汽车车身修复技术【2】
  2. Typescript基础知识--学习笔记
  3. 叶俊:让能量爆棚的秘诀
  4. Error:Apostrophe not preceded by \ (
  5. 360P 480P 720P 1080P 1080i 说明
  6. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作
  7. 【可穿戴技术】相关资料
  8. 8255A并行 I/O 接口芯片
  9. 赵丽颖冯绍峰官宣 | 微博服务器瘫痪!运维:该拿什么拯救我?
  10. Consolidation Mappings