【RDKit】Python化学包RDkit的教程
Python化学包RDkit的教程
- 官方地址
- 教程
- 读取文件
- 对分子进行操作
- 访问单个原子
- 访问化学键
- 化学特征提取
官方地址
http://www.rdkit.org/
本文不再给出安装方法,读者可自行网上搜索。
教程
说明:如果某一行有注释,则该注释表示该行的输出
读取文件
RDKit能读取各种各样的化学结构文件,类和方法主要在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
奇怪,原子数怎么只有9个?输出所有原子之后发现氢原子被省略了,因此如果你不希望省略氢原子,按照以下方式读取
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
数组
mol.GetConformers()[0].GetPositions() # return a numpy array
其他可能用到的属性
atom.GetHybridization() # 返回杂化类型
atom.GetIsAromatic () # 该原子是否在芳香烃内
atom.GetTotalNumHs() # 与该原子连接的氢原子个数
atom.GetNeighbors() # 返回该原子的所有邻居原子,以元祖的形式返回
有关原子的请其他方法点击这里
访问化学键
通过GetBondBetweenAtoms()
可以返回一个化学键的对象rdkit.Chem.rdchem.Bond
,这个方法的输入参数是两个原子在数组中的编号,如果化学键不存在,则返回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
化学键的键长我暂时没有找到相应的方法,但是可以根据原子的坐标手动计算。
化学特征提取
重新打开一个Python文件进行操作。
对于有些原子的特征,其在原子层面上无法判断化学特征,因此需要在分子层面上进行提取。例如化学中的donor和acceptor概念(具体是什么意思我也不知道,没有化学背景,但知道有这些类别就行,并且这些类别是原子的特征)
首先导入包,然后设定特征的参考文件,并实例化一个特征工厂。
from rdkit import Chem
from rdkit.Chem import ChemicalFeatures
from rdkit import RDConfig
import os
fdefName = os.path.join(RDConfig.RDDataDir,'BaseFeatures.fdef')
factory = ChemicalFeatures.BuildFeatureFactory(fdefName)
默认情况下对任何化合物都不需要改动上面的代码。
利用MolFromSmiles
方法读取分子。Smiles(Simplified molecular-input line-entry system)
是一种描述分子的字符串描述符,和高中学过的分子结构式差不多。更多关于Smiles
的信息可以参见百度百科或维基百科
m = Chem.MolFromSmiles('OCc1ccccc1CN')
feats = factory.GetFeaturesForMol(m)
len(feats) # 8
这里分子为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)
更多关于特征方法请参阅这里
【RDKit】Python化学包RDkit的教程相关推荐
- appium python 抓包_Python学习教程:另辟蹊径,appium抓取app应用数据了解一下
原标题:Python学习教程:另辟蹊径,appium抓取app应用数据了解一下 作为爬虫工程师,没有价格不知道selenium的. 什么是selenium? Selenium原本是一个用于Web应用程 ...
- python画图包-Python 绘图包 Matplotlib Pyplot 教程
Pyplot 接口简介 Pyplot 入门 matplotlib.pyplot?是命令风格函数的集合,使 Matplotlib 像 MATLAB 一样工作.每个 Pyplot 函数对图形做一些修改,例 ...
- 在ArcGIS上使用python(arcpy包)的入门教程
1.why arcpy? 如果简单将arcgis理解成绘图与分析两大功能的话(由于本人对arcgis使用十分局限,该分类仅为个人使用范畴内的一个总结),arcpy包在arcgis的分析功能上有很大的帮 ...
- RDkit一:利用RDkit筛选化学小分子结构特征
最近在做关于小分子筛选的项目,涉及到一些处理方式,后面会逐篇总结遇到的一些问题及解决方法. 首先简单介绍一下RDkit,RDkit是一款用来处理化学小分子的python开源包,最早是由诺华公司开发的, ...
- RDkit二:利用RDkit筛选进行化学小分子2D药效团筛选
首先介绍一下做药效团筛选的背景: 计算机辅助药物设计的主要方式包括两种: 1.基于受体的药物设计: 2.基于配体的药物设计: 由于大量蛋白质的晶体结构仍然是未知的,尤其是膜蛋白,膜蛋白及其疏水的特性使 ...
- RDKit:化学指纹(Chemical Fingerprinting)
化学指纹识别是一种将绘制的分子转换为0和1位的流的方法.旧指纹类型是MACCS密钥,由前MDL开发,作为在分子数据库中进行子结构筛选的快速方法.公共版本包含166个键,即166 0和1,其中每个键对应 ...
- Python表情包处理教程:如何过滤和替换emoji表情?
Python表情包处理教程:如何过滤和替换emoji表情? Python是一种高级编程语言,它也是一个非常流行的用于数据分析.机器学习和自然语言处理的工具.在这些领域中使用文字和符号非常重要,但是有时 ...
- 怎么安装python的包_『本地python包怎么通过pyenv安装』python包本地安装教程
python怎么安装第三方类库 pip 大多数库都可以通pip安装,安装方法为,令行窗口输入 pip install libname libname名 某些库通过pip安装不了,可能是因为没有打包上传 ...
- pycharm安装python包_Pycharm使用教程(四)-安装python依赖包(非常详细,非常实用)...
简介 在做python开发时,需要很多依赖包,如果已经安装pip,安装依赖包,可以通过命令行:没有安装的,也可以通过PyCharm安装. 具体安装步骤 1.在File->Setting,如图: ...
- python第三方包
Chardet,字符编码探测器,可以自动检测文本.网页.xml的编码. colorama,主要用来给文本添加各种颜色,并且非常简单易用. Prettytable,主要用于在终端或浏览器端构建格式化的输 ...
最新文章
- iPhone读取plist文件
- beyond compare类似软件_Mac软件推荐 | 第 20 期
- java biginteger位数,Java之BigInteger(面试题12:打印1到最大的n位数)
- 洛谷 - P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并(树上差分+线段树合并)
- 水平集嵌入函数的曲率
- UIImage 压缩
- 在html中用表单插入servlet 怎么写servlet的地址,java web中servlet、jsp、html 互相访问的路径问题。...
- 哲学上的终极问题:你在追求什么?
- 畅销款黑莓应用是怎样构建的?
- java获取键盘输入
- Android 健康饮食软件详解
- 【C++】使用类来模拟string
- 税务信息化与计算机技术应用开发,税务信息化与计算机技术应用开发岗位辞职报告范文...
- PMP第二轮复习:整本书内容融会贯通
- 打印一年内任意月份的日历(C语言)
- webpack创建react项目
- c语言cad实验报告,1.电子线路CAD实验报告实验
- php怎么给超链接设置样式,HTML基础知识,关于超链接设置的样式的详细介绍
- ubuntu16.04 自定义fctix输入法
- 质因数的个数 - 九度教程第54题
热门文章
- AI芯片最重要的是什么?Arm中国:背后的软件生态
- 2019.11.27 阵列信号处理
- ios12完美深色模式插件_那些好玩的插件 iOS 12(十七)
- windows如何卸载服务
- python手动垃圾回收_Python3学习笔记,F,垃圾,回收
- 计算机键盘无法使用 怎么办,电脑键盘失灵怎么办?4个小技巧解决电脑键盘失灵问题...
- pdfjs 字体新增_JSPDF支持中文(思源黑体)采坑之旅,JSPDF中文字体乱码解决方案...
- Java毕业设计-企业员工考勤打卡管理系统
- 利用Netica训练简易贝叶斯网络模型【教程】
- INTEL经典芯片及主板回顾