SuperAPI AI 工具集

rdkit

数据与分析

查看项目

更新于 10-16 03:01

技能介绍

RDKit 是化学信息学领域的行业标准开源工具包,提供分子操作、描述符计算、指纹、子结构搜索和三维分子建模等综合工具,被制药公司广泛用于药物发现与虚拟筛选。

主要能力与适用用途 可用于读写化学文件格式(SMILES、SDF、MOL2、PDB);计算分子描述符与类药性质(Lipinski 五规则);生成分子指纹用于相似性搜索;进行子结构搜索与化学模式匹配(SMARTS);生成三维构象与分子对齐;对化合物库进行虚拟筛选;药效团建模与形状相似性;QSAR(定量构效关系)建模;反应枚举与逆合成;二维与三维化学结构可视化;构建用于分子性质预测的机器学习模型。

核心原理 RDKit 将分子表示为图,原子是节点、化学键是边,核心对象为 Mol,可由 SMILES、SDF 文件或程序化方式创建。SMILES(简化分子线性输入规范)是化学结构的文本表示,例如 CCO 表示乙醇,c1ccccc1 表示苯。分子指纹是编码结构特征的二进制向量,可实现大型化合物库的快速相似性搜索与聚类。许多 RDKit 操作采用惰性求值,属性仅在需要时计算,使其处理大型库时非常高效。

安装方式 通过 conda 安装(推荐):conda install -c conda-forge rdkit 通过 pip 安装:pip install rdkit 用于可视化:pip install rdkit pillow

标准导入 from rdkit import Chem from rdkit.Chem import AllChem, Descriptors, Draw, Lipinski from rdkit.Chem import rdFingerprintGenerator from rdkit import DataStructs import numpy as np import pandas as pd

基本用法模式 SMILES 转分子:使用 Chem.MolFromSmiles(smiles) 创建分子,并检查是否为 None 以捕获无效结构;使用 Chem.rdMolDescriptors.CalcMolFormula(mol) 得到分子式,用 Descriptors.MolWt(mol) 得到分子量。 计算性质:通过 Descriptors 与 Lipinski 模块获取分子量、LogP、氢键供体(NumHDonors)、氢键受体(NumHAcceptors),并据此检查 Lipinski 五规则(MW <= 500、LogP <= 5、HBD <= 5、HBA <= 10)。

关键规则 建议做法:解析 SMILES 或文件后始终校验 mol 不为 None;使用 Chem.MolToSmiles(mol) 获取规范 SMILES 用于比较;默认保持 RDKit 自动净化(价态检查、芳香性);三维操作(如对齐、对接)前先用 AllChem.EmbedMolecule() 生成坐标;大型库使用指纹进行相似性搜索;生成构象时设置随机种子以保证可复现;使用 Chem.AssignStereochemistry() 正确分配 R/S 与 E/Z 标记;处理海量分子时采用生成器或分块以避免内存问题。 避免做法:忽略无效分子;直接比较 SMILES 字符串(不同 SMILES 可表示同一分子);跳过 Kekulé 结构分配;用描述符做相似性(应用指纹);三维操作前忘记用 Chem.AddHs() 添加显式氢;过度使用三维能量最小化(较慢,仅对接或可视化时按需使用)。

反模式提醒 解析 SMILES 后未校验 mol 是否为 None 就调用 Descriptors.MolWt(mol) 会出错;直接比较两个 SMILES 字符串(如异丁烷的两种写法)会误判,应转换为规范 SMILES 后比较;在没有三维坐标的情况下调用 AllChem.AlignMol() 会失败,应先 EmbedMolecule()。

分子 I/O 与转换 SMILES 解析:Chem.MolFromSmiles("CCO"),可传 sanitize 参数;用 Chem.MolToSmiles(mol, isomericSmiles=True/False) 生成含或不含立体化学的 SMILES;对无效 SMILES 逐个判断并跳过。 SDF 读写:Chem.MolFromMolFile() 读取单分子;Chem.SDMolSupplier() 迭代读取多个分子,可用 removeHs=False 保留显式氢;通过 mol.HasProp("_Name") 与 mol.GetProp("_Name") 访问 SDF 属性。写入使用 Chem.SDWriter(),可写入单/多分子并设置 _Name、Activity 等属性。 InChI 与 InChIKey:Chem.MolToInchi() 生成唯一化学标识符,Chem.MolToInchiKey() 生成适合数据库查询的哈希键,Chem.MolFromInchi() 可反向解析。

分子描述符 常用描述符包括:Descriptors.MolWt(分子量)、分子原子数、Lipinski.HeavyAtomCount(重原子数)、Descriptors.MolLogP、NumHDonors、NumHAcceptors、NumRotatableBonds、Descriptors.TPSA、Lipinski.RingCount、NumAromaticRings、Descriptors.BertzCT(分子复杂度)。可用 Descriptors.descList 获取全部描述符名称并逐一计算。 类药性过滤:可自定义函数检查 Lipinski 五规则与 Veber 规则(可旋转键 <= 10、TPSA <= 140)。

分子指纹 Morgan 指纹(圆形,如 ECFP4):AllChem.GetMorganFingerprintAsBitVect(mol, radius=2, nBits=2048),可用 DataStructs.ConvertToNumpyArray 转为数组;也可生成计数型指纹或带 bitInfo 的特征信息。 相似性:DataStructs.TanimotoSimilarity、DiceSimilarity 计算两两相似度,BulkTanimotoSimilarity 批量比较。 其他指纹:Chem.RDKFingerprint(拓扑)、AllChem.GetHashedAtomPairFingerprintAsBitVect、AllChem.GetHashedTopologicalTorsionFingerprintAsBitVect、MACCSkeys.GenMACCSKeys(166 位结构键)。

子结构搜索 用 Chem.MolFromSmarts() 定义 SMARTS 模式,mol.HasSubstructMatch() 判断是否存在,mol.GetSubstructMatches() 获取匹配原子索引。常见模式包括羧酸 C(=O)O、酯、酰胺、醇、伯胺、芳香环等。可用多个模式做 AND 逻辑过滤,或用 AllChem.ReactionFromSmarts 与 RunReactants 替换子结构(如将羧酸转为酯)。

三维构象 生成坐标前先用 Chem.AddHs() 加氢,再用 AllChem.EmbedMolecule(mol, randomSeed=42)(返回 0 表示成功),并以 AllChem.MMFFOptimizeMolecule(mol) 优化几何;可用 mol.GetConformer().GetAtomPosition(i) 读取原子坐标。生成多构象可用 AllChem.EmbedMultipleConfs(mol, numConfs=10, randomSeed=42, pruneRmsThresh=0.5) 并逐个优化。

参考资料 官方文档:https://www.rdkit.org/docs/ RDKit Book:https://www.rdkit.org/docs/RDKit_Book.html GitHub:https://github.com/rdkit/rdkit 常用搜索模块:rdkit.Chem、rdkit.Chem.Descriptors、rdkit.Chem.AllChem、rdkit.DataStructs。

限制与注意事项 三维能量最小化较慢,仅在需要时使用;直接比较 SMILES 不可靠;处理百万级化合物时需注意内存,建议使用生成器或分块。资料未提供收费、价格及具体平台信息。