在化学信息学中,分子数据的获取与解析是最基础的部分。对于已知的化合物,我们可以从各种数据库中获取;对于未知的化合物,我们也可以构造该分子。在RDKit中,无论是从数据库中获取的分子文件还是自己构建的分子,在解析前通常将其转换成mol对象,并用mol对象进行分子绘制,获取原子、键、原子序号、原子名称各种信息以及获取分子描述符等一系列操作。本文大致分为三个部分:不同来源的分子数据转成mol对象方法、分子图像的绘制与分子结构信息的解析。

一:分子数据转换mol对象

(1)SMILE编码(MolFromSmiles)

'SMILE'是Structure,Meaning,Language,Effect的缩写,它是以字符串的形式表示分子结构。并且每个smiles编码与化学结构是一一对应的。在smiles编码字符串中,主要使用C,H,O,N,S等字母表示相应的原子(不包含H);相邻两个原子表示单键连接,原子间'='表示双键,'#'表示三键;若该原子含有支链,则用括号表示支链;若有环结构,首位相连的原子后用1,2等表示(通常芳香结构的原子用小写字母)。对于双键,“/”符号表示顺式,“\”表示反式;对于手性原子,“@”表示原子顺时针排列,“@@”为逆时针。

举例:

1:'CCC'丙烷,2:'C=C'乙烯,3:'C#C'乙炔,4:'C(=O)C'丙酮,5:'C1=CC=CC=C1'苯环,6:'C1(C=CC=C2)=C2C=CC=C1'萘。

from rdkit import Chem
s='NC(C)C(=O)O' #丙氨酸smiles编码
smile=Chem.MolFromSmiles(s) #从smiles编码中获取结构信息
Chem.Draw.ShowMol(smile) #画分子图

使用Chem.MolFromSmiles()函数,可以从smiles编码中获取分子结构信息,进而画分子图。

(2)PDB文件、FASTA文件(MolFromPDBFile、MolFromFSATA)

使用函数MolFromPDBFile获取蛋白质文件分子结构,PDB文件数据可以从NCBI、PDB等数据库获取。函数MolFromFASTA获取FASTA文件分子结构,文件可以为核酸序列或多肽序列,函数中参数flavor表示文件是哪类物质序列以及其它信息,详见(3)。

from rdkit import Chem
pdb=Chem.MolFromPDBFile('2rbg.pdb') #读取该文件夹下2rgb.pdb文件
Chem.Draw.ShowMol(pdb)

pdb文件可以与此py文件在同一文件下,此时使用相对路径;若不在同一文件,字符串为pdb文件的绝对路径。

(3)氨基酸、DNA、RNA序列(MolFromSeqence)

该函数可以利用氨基酸序列(单字符)、DNA序列、RNA序列来绘制分子结构。例如'ATTCGC'为一个DNA序列,'AUCCCGU'为一个RNA序列,'EGGYCCCDS'为氨基酸序列。

参数flavor表示该序列属于哪类物质的序列。0表示L-氨基酸组成的肽链;1表示D-氨基酸组成的肽链;2,3,4,5表示RNA,6,7,8,9表示DNA,其中区别在于核酸两端是否有cap:2,6 no cap;3,7 为5’ cap;4,8为3' cap;5,9 both cap。

from rdkit import Chem
peptide=Chem.MolFromSeqence('EGGYCCCDS',flavor=0)
Chem.Draw.ShowMol(peptide)

(4)MOL、MOL2文件(MolFromMolFile、MolFromMol2File)

这两个函数分别可以读取MOL、MOL2文件,进而画出分子结构。

除了以上方法,Chem中还有许多MolFrom系列函数,用于获取分子mol对象。

二:分子图绘制

(1)基础绘制

from rdkit import Chem
import matplotlib.pyplot as plt
s='C=CC(=O)'
mol=Chem.MolFromSmiles(s)
img=Chem.Draw.MolToImage(mol,size=(500,500))
plt.imshow(img)
plt.show()

绘制分子图时,虽然可以使用ShowMol()来展示,但是最好将其转换成图片的形式,这样有利于图片的保存与后续操作。其中的参数size控制图片大小(准确来说是像素),size越大,图片越清晰。

(2)多分子绘制

import matplotlib.pyplot as plt
from rdkit import Chem
s=['C=CC(=O)N1CCC(CC1)C2CCNC3=C(C(=NN23)C4=CC=C(C=C4)OC5=CC=CC=C5)C(=O)N','C=CC=CC=CN(C1=CC=CC=C1)C','NC(C)C(=O)O']
smiles=[]
for i in range(3):smiles.append(Chem.MolFromSmiles(s[i]))
img=Chem.Draw.MolsToGridImage(mols=smiles,molsPerRow=3,subImgSize=(200,200),legends=['molecule1','molecule2','molecule3'])
plt.imshow(img)
plt.show()

绘制多个分子可以使用MolFromSmiles等系列函数获取结构信息并放置在一个列表中,之后把这个列表当作整体,使用MolsToGridImage等函数绘制分子图片。

在MolsToGridImage()中,参数mols为保存mol的列表,molsPerRow表示每行的分子数,subImgSize为每个分子的图片大小,legends为分子标签,与mols列表中位置对应。

当然,使用MolsToImage()也是可以的,只是此时所有分子都在一行,与MolsToGridImage()相比没有参数molsPerRow。用这个函数绘制多行分子也是可行的,利用plt.subplot()绘制子图的方法即可。

三:分子结构信息解析

(1)mol.GetAtoms()

通过GetAtoms()可以获取该分子所有原子对象。

atoms=mol.GetAtoms()
for atom in atoms:print(atom)

1.atom.GetIdx():获取原子索引号

2.atom.GetSymbol():获取原子名。

3.atom.GetAtomicNum():获取该原子的原子序数。

其它:GetDegree():原子连接数;GetTotalDegree():原子总连接数;GetFormalCharge():原子形式电荷;GetHybirdization():原子杂化方式;GetExplicitValence()原子隐式化合价;GetTotalValence():原子总化合价。

(2)mol.GetBonds()

通过GetBonds()可以获取该分子所有化学键对象。

bonds=mol.GetBonds()
for bond in bonds:print(bond)

1.bond.GetIdx():获取化学键索引。

2.bond.GetBondType():获取化学键类型(键数),如‘SINGLE'、'DOUBLE'等。

3.bond.GetBondTypeAsDouble():与2相同,此时返回的是double浮点数,如1.0对应SINGLE,表示单键。

4.bond.GetBeginAtom()、bond.GetEndAtom():获取化学键两端原子对象。若进一步获取原子信息,参照(1)中方法即可。

其它:GetIsAromatic():是否为芳香键;GetIsConjugated()是否为共轭键;IsInRing()是否在环中;IsInRingSize(n):是否在n元环中;

(3)mol.GetNumAtoms()

该方法可获取分子中原子数。

n=mol.GetNumAtoms()
print(n)

(4)mol.GetNumBonds()

该方法用于获取分子中化学键个数。

n=mol.GetNumBonds()
print(n)

(5)Chem.FindMolChiralCenters(mol)

该方法用于获取分子中手性原子与其顺反构型。

s='N[C@@](Br)(Cl)OCC[C@@](O)(N)C'
mol=Chem.MolFromSmiles(s)
p=Chem.FindMolChiralCenters(mol)
print(p)
'''-----------------------------------'''
>>>[(1, 'S'), (7, 'R')]

(6)mol.GetConformer().GetAtomPosition()

该方法用于获取分子坐标对象(如果mol包含分子坐标信息)。GetAtomPositon()中参数为原子索引数,最终返回该原子坐标对象,使用list()进行转换可以得到一个包含该原子三维坐标的列表,故也可以用索引的方式分别获取x、y、z坐标。

mol=Chem.MolFromPDBFile('2rbg.pdb')
atoms=mol.GetAtoms()
conformer=mol.GetConformer()
for atom in atoms:p=conformer.GetAtomPosition(atom.GetIdx())print(list(p))

(7)其它

mol.GetAtomWithIdx(n):获取索引为n的原子对象;mol.GetBondWithIdx(n):获取索引为n的键对象;mol.GetAromaticAtoms():获取芳香环中的原子;mol.GetNumHeavyAtoms():获取除了氢原子的其它所有原子个数;mol.GetBondBetweenAtoms():获取两个原子之间的键。

总结:

RDKit作为化学信息学的分析工具,其功能的非常多的,具体用法可见于Python API Reference — The RDKit 2022.03.1 documentation。但实际上,从未来的发展趋势考虑,传统的机器学习方法、分子动力学模拟以及量子化学等方法很可能被深度学习所替代(如费米神经网络、AlphaFold等),并且更多的、更为准确的分子表示方法也会逐渐取代以往的各种分子描述方法(分子描述符)。这也意味着,RDKit中的很多模块可以不必深入学习,只需要掌握其基本的分子数据读取、结构解析等部分即可。因为这些处理后的数据,可以根据我们的想法进行进一步的构建处理,并用于神经网络模型的训练。

分子数据的获取、解析与结构绘制(RDKit)相关推荐

  1. 零基础学小程序006(后台数据的获取与解析)----请求服务器json数据展现到小程序上

    视频讲解地址:https://edu.csdn.net/course/play/9531/265552 小程序云开发讲解视频:https://edu.csdn.net/course/detail/96 ...

  2. mysql mongodb binlog_订阅MongoDB的数据变更比解析mysql的binlog更简单

    前言 我们开源了一个订阅分发mysql的binlog的项目,一直用的非常好,忽然有天开发说能不能支持MongoDB的数据订阅呢,MongoDB的使用度也挺广泛的.安排.经过简单的了解后发现MongoD ...

  3. 1-交通数据的获取系列学习

    什么是交通态势数据? 基本概念 数据的获取步骤 申请密钥 百度地图的识别 请求URL 调用参数格式 wgs坐标的识取 例子 解析JASON数据 基本概念 反映交通的拥堵和通畅状态的数据 API(App ...

  4. Python解析证书结构方法

    Python解析证书结构方法 示例代码 示例代码 推荐使用:Python库 pyasn1 和 pyasn1-modules,pip安装失败的话,用conda安装即可. from pyasn1_modu ...

  5. 新浪微博数据Json格式解析

    2019独角兽企业重金招聘Python工程师标准>>> Json格式解析 json结构的格式就是若干个 键/值(key, value) 对的集合,该集合可以理解为字典(Diction ...

  6. python 大智慧股票行情数据_Python获取股票历史数据和收盘数据的代码实现

    各种股票软件,例如通达信.同花顺.大智慧,都可以实时查看股票价格和走势,做一些简单的选股和定量分析,但是如果你想做更复杂的分析,例如回归分析.关联分析等就有点捉襟见肘,所以最好能够获取股票历史及实时数 ...

  7. ARP原理概述——基于WinPcap发送ARP请求数据包获取远程MAC地址

    ARP原理概述--基于WinPcap发送ARP请求数据包获取远程MAC地址 ARP协议 ARP概述 ARP工作原理 ARP数据包格式 编写程序发送ARP请求获取本机和远程IP的MAC 注意: ARP协 ...

  8. 单分子测序技术精准解析复杂结构变异

    单分子测序技术精准解析复杂结构变异 发表期刊:Nature Methods 2018年8月,来自美国的研究团队基于三代测序读长较长的特性,利用基因组比对工具NGMLR和结构变异识别工具Sniffles ...

  9. cjson 对象是json数组型结构体_cJSON创建并解析json结构体 | 学步园

    cJSON 对于cJSON的使用,我主要是用来模拟远程服务器端返回的一个json类型的目录结构,客户端进行获取并进行解析,把解析出来的目录按照原本的结构显示在本地. cJSON简介 cJSON是一个超 ...

最新文章

  1. c4d打开没反应_掌握这3种C4D技巧,线框渲染效果图也就几秒的事
  2. 这里有一份面筋请查收(七)
  3. 地址已在使用 java_java – UDP地址已经在使用?
  4. 我的装机软件清单-备忘
  5. 领英使用手册—管理,使用领英linkedin账号的技巧方法
  6. Visio2016安装
  7. python 移动平均法_移动平均法详解
  8. 超级高铁(Hyperloop)
  9. word文档转换为md文档
  10. 闪电侠第四季/全集The Flash迅雷下载
  11. 历时54年,完成了1574架飞机生产,“天空女王”波音747正式停产 | 美通社头条...
  12. PDF转PPT怎么转?一键完成格式转换,太方便了
  13. Android博通BCM libbt-vendor.so 分析蓝牙初始化流程
  14. 第一篇文章:网络分析仪Agilent E5061A连接电脑
  15. dio java_Flutter -------- dio网络请求
  16. RESTful API 简介(学习笔记)
  17. 搭建Ubuntu的51单片机开发环境(学习记录)
  18. Codis命令快速查询
  19. Chapter7 循环神经网络-2
  20. 计算机图形学(七):三维对象的表示(分形图形的基本性质、递归模型、L系统模型)

热门文章

  1. linux服务器下数学软件下载,八年级初中数学软件-八年级初中数学学习app下载v1.0.5-Linux公社...
  2. c语言精粹,C语言精粹.pdf
  3. 游戏编程精粹1---通用编程技术---数据驱动设计---1
  4. 每天一个linux命令(1):ls命令
  5. Oracle函数——数学函数
  6. 美团云人工智能峰会即将召开,与大咖面对面探寻AI前景,共商AI未来!
  7. 自如员工被控窃取公司信息七万条 涉侵犯公民信息罪
  8. 向虚拟机中传输文件的新解法——高效有用的邮箱传输
  9. 广义相对论-学习记录11-第五章-引力辐射1
  10. YSlow开发:自定义规则集