第3章:描述符计算工具上手
做ADMET分析,第一步永远是算描述符。没有描述符,后面PCA、建模全是空中楼阁。
这一章,我带你搞定四个主流工具:RDKit、OpenBabel、Mordred、PaDEL-Descriptor。这几个工具,我一个一个用过很多年,有顺手的地方,也有踩过的坑。咱们不整那些花里胡哨的,直接说怎么装、怎么用。
重点关注:安装避坑、命令行用法、Python接口调取、输出格式统一。
3.1 RDKit —— 我第一个信任的描述符引擎
RDKit,C++底层,Python接口,工业级稳定。我个人习惯把所有分子标准化操作都丢给它做。
3.1.1 安装
推荐用conda安装,省心。pip版本依赖太乱,我曾经卡在Boost版本冲突上卡了一下午。
conda create -n rdkit-env python=3.9
conda activate rdkit-env
conda install -c conda-forge rdkit
安装完验证一下:
python -c "from rdkit import Chem; print(Chem.MolFromSmiles('CCO').GetNumAtoms())"
能输出3就没问题。
3.1.2 基本使用
读分子、写分子、算描述符。三步走。
from rdkit import Chem
from rdkit.Chem import Descriptors
mol = Chem.MolFromSmiles('c1ccccc1')
# 算logP
logp = Descriptors.MolLogP(mol)
# 算分子量
mw = Descriptors.MolWt(mol)
print(logp, mw)
Descriptors.descList可以列出全部。我用它批量建过一万个分子的特征矩阵,速度很快。
3.2 OpenBabel —— 处理格式转换的老兵
OpenBabel不是专门算描述符的,它是格式转换神器。但我做ADMET管线时,经常用它做中间环节。
3.2.1 安装
Linux下直接apt或者conda:
conda install -c conda-forge openbabel
或者从源码编译:
git clone https://github.com/openbabel/openbabel.git
cd openbabel
cmake -B build -DCMAKE_INSTALL_PREFIX=/usr/local
cmake --build build -j4
sudo cmake --install build
-DPYTHON_BINDINGS=ON,又重编了一次。
3.2.2 基本使用
命令行转格式是最常见的:
obabel input.sdf -O output.smi
obabel input.smi -O output.mol2 --gen3d
Python接口算个简单描述符:
import openbabel
from openbabel import OBDescriptor, OBMol
mol = OBMol()
mol.ParseSmiles('CCO')
desc = OBDescriptor.FindType('logP')
print(desc.Predict(mol))
嗯,OpenBabel的描述符数量不如RDKit多,但胜在格式兼容性好。SDF、MOL2、PDB,它都能吃。
3.3 Mordred —— 一个极快的Python描述符库
Mordred,纯Python实现,但速度不慢。它继承了RDKit的分子对象,但算描述符时更快。为什么?因为它用了向量化计算。
3.3.1 安装
pip install mordred
就这么简单。但注意它依赖RDKit,所以RDKit要先装好。
3.3.2 基本使用
from rdkit import Chem
from mordred import Calculator, descriptors
calc = Calculator(descriptors)
mol = Chem.MolFromSmiles('c1ccccc1')
result = calc(mol)
# 转成pandas DataFrame
df = result.as_dataframe()
print(df.head())
Mordred能算1800多个描述符,输出直接就是DataFrame格式,做PCA前几乎不用再处理。
3.4 PaDEL-Descriptor —— 历史悠久的Java工具
PaDEL-Descriptor是新加坡国立大学开发的,Java写的,图形界面和命令行都有。它支持1875个描述符,包含1D、2D、3D。
3.4.1 下载与运行
需要Java Runtime Environment 8以上。
# 从官网下载PaDEL-Descriptor.jar
java -jar PaDEL-Descriptor.jar
你会看到一个GUI界面。
命令行模式适合批量处理:
java -jar PaDEL-Descriptor.jar -dir ./input_sdf -file ./output.csv
-descriptortypes ./descriptor_list.xml -retainorder -removesalt
-standardizenitro -detectaromaticity
-descriptortypes参数指定描述符子集,可以控制输出列数,避免生成太大的CSV。
3.4.2 描述符类型选择
PaDEL支持按类别筛选。我通常只选“全部2D描述符”,因为3D描述符需要构象搜索,太慢。
它的输出CSV长这样:
Name,MW,ALogP,AMR,nAcid,nBase,...
mol1,180.16,2.56,54.32,1,2,...
mol2,160.21,1.98,48.76,0,1,...
第一列是分子名,之后全是描述符。这个格式跟RDKit的DataFrame可以直接合并。
3.5 四个工具该怎么选?
| 工具 | 语言 | 安装难度 | 描述符数量 | 输出能力 | 计算效率 |
|---|---|---|---|---|---|
| RDKit | C++/Python | 低(conda) | ~200 | Python对象/CSV | ★★★★ |
| OpenBabel | C++/Python/CLI | 中(需编译) | ~50 | SDF/SMILES/MOL2 | ★★★ |
| Mordred | Python | 低(pip) | ~1800 | DataFrame | ★★★★★ |
| PaDEL | Java | 低(JRE) | ~1875 | CSV/SDF | ★★★ |
说白了,看场景:
- 快速脚本实验:RDKit。200个描述符够用了。
- 格式转换为主:OpenBabel。尤其是处理供应商提供的SDF。
- 大规模二维描述符:Mordred。1800维,速度还快。
- 需要标准化描述符:PaDEL。它的输出在文献中被广泛引用。
3.6 整体工具选型逻辑
这一章的内容,说白了就一句话:选对工具,少踩坑。
我画了个图,帮你理清思路。
你可以把这个图当作参考。说实话,我现在的日常工作流程里,这四个工具都用得到。
3.7 工具联合使用的实战建议
我自己有一个用了两年的脚本,把这四个工具串在了一起。核心逻辑是这样的:
- 用OpenBabel把异源格式(MOL2、PDB)转成规范的SDF。
- 用RDKit做分子标准化(去盐、加氢、芳香化)。
- 用Mordred批量算1800维描述符,输出DataFrame。
- 用PaDEL算一些Mordred没有的指纹描述符,最后合并。
为什么要合并?因为不同工具的描述符家族不一样,互补性强。
RDKit_LogP、Mordred_LogP、PaDEL_ALogP。不然PCA时你会发现同一个描述符被重复计算了。
好了,这一章的核心就是这四个工具的安装和使用。先别急着跑PCA,先把描述符算利索了。下一阶段我们开始聊数据清洗和标准化,那是PCA之前的关键一步。