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的教程相关推荐

  1. appium python 抓包_Python学习教程:另辟蹊径,appium抓取app应用数据了解一下

    原标题:Python学习教程:另辟蹊径,appium抓取app应用数据了解一下 作为爬虫工程师,没有价格不知道selenium的. 什么是selenium? Selenium原本是一个用于Web应用程 ...

  2. python画图包-Python 绘图包 Matplotlib Pyplot 教程

    Pyplot 接口简介 Pyplot 入门 matplotlib.pyplot?是命令风格函数的集合,使 Matplotlib 像 MATLAB 一样工作.每个 Pyplot 函数对图形做一些修改,例 ...

  3. 在ArcGIS上使用python(arcpy包)的入门教程

    1.why arcpy? 如果简单将arcgis理解成绘图与分析两大功能的话(由于本人对arcgis使用十分局限,该分类仅为个人使用范畴内的一个总结),arcpy包在arcgis的分析功能上有很大的帮 ...

  4. RDkit一:利用RDkit筛选化学小分子结构特征

    最近在做关于小分子筛选的项目,涉及到一些处理方式,后面会逐篇总结遇到的一些问题及解决方法. 首先简单介绍一下RDkit,RDkit是一款用来处理化学小分子的python开源包,最早是由诺华公司开发的, ...

  5. RDkit二:利用RDkit筛选进行化学小分子2D药效团筛选

    首先介绍一下做药效团筛选的背景: 计算机辅助药物设计的主要方式包括两种: 1.基于受体的药物设计: 2.基于配体的药物设计: 由于大量蛋白质的晶体结构仍然是未知的,尤其是膜蛋白,膜蛋白及其疏水的特性使 ...

  6. RDKit:化学指纹(Chemical Fingerprinting)

    化学指纹识别是一种将绘制的分子转换为0和1位的流的方法.旧指纹类型是MACCS密钥,由前MDL开发,作为在分子数据库中进行子结构筛选的快速方法.公共版本包含166个键,即166 0和1,其中每个键对应 ...

  7. Python表情包处理教程:如何过滤和替换emoji表情?

    Python表情包处理教程:如何过滤和替换emoji表情? Python是一种高级编程语言,它也是一个非常流行的用于数据分析.机器学习和自然语言处理的工具.在这些领域中使用文字和符号非常重要,但是有时 ...

  8. 怎么安装python的包_『本地python包怎么通过pyenv安装』python包本地安装教程

    python怎么安装第三方类库 pip 大多数库都可以通pip安装,安装方法为,令行窗口输入 pip install libname libname名 某些库通过pip安装不了,可能是因为没有打包上传 ...

  9. pycharm安装python包_Pycharm使用教程(四)-安装python依赖包(非常详细,非常实用)...

    简介 在做python开发时,需要很多依赖包,如果已经安装pip,安装依赖包,可以通过命令行:没有安装的,也可以通过PyCharm安装. 具体安装步骤 1.在File->Setting,如图: ...

  10. python第三方包

    Chardet,字符编码探测器,可以自动检测文本.网页.xml的编码. colorama,主要用来给文本添加各种颜色,并且非常简单易用. Prettytable,主要用于在终端或浏览器端构建格式化的输 ...

最新文章

  1. iPhone读取plist文件
  2. beyond compare类似软件_Mac软件推荐 | 第 20 期
  3. java biginteger位数,Java之BigInteger(面试题12:打印1到最大的n位数)
  4. 洛谷 - P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并(树上差分+线段树合并)
  5. 水平集嵌入函数的曲率
  6. UIImage 压缩
  7. 在html中用表单插入servlet 怎么写servlet的地址,java web中servlet、jsp、html 互相访问的路径问题。...
  8. 哲学上的终极问题:你在追求什么?
  9. 畅销款黑莓应用是怎样构建的?
  10. java获取键盘输入
  11. Android 健康饮食软件详解
  12. 【C++】使用类来模拟string
  13. 税务信息化与计算机技术应用开发,税务信息化与计算机技术应用开发岗位辞职报告范文...
  14. PMP第二轮复习:整本书内容融会贯通
  15. 打印一年内任意月份的日历(C语言)
  16. webpack创建react项目
  17. c语言cad实验报告,1.电子线路CAD实验报告实验
  18. php怎么给超链接设置样式,HTML基础知识,关于超链接设置的样式的详细介绍
  19. ubuntu16.04 自定义fctix输入法
  20. 质因数的个数 - 九度教程第54题

热门文章

  1. AI芯片最重要的是什么?Arm中国:背后的软件生态
  2. 2019.11.27 阵列信号处理
  3. ios12完美深色模式插件_那些好玩的插件 iOS 12(十七)
  4. windows如何卸载服务
  5. python手动垃圾回收_Python3学习笔记,F,垃圾,回收
  6. 计算机键盘无法使用 怎么办,电脑键盘失灵怎么办?4个小技巧解决电脑键盘失灵问题...
  7. pdfjs 字体新增_JSPDF支持中文(思源黑体)采坑之旅,JSPDF中文字体乱码解决方案...
  8. Java毕业设计-企业员工考勤打卡管理系统
  9. 利用Netica训练简易贝叶斯网络模型【教程】
  10. INTEL经典芯片及主板回顾