摘要:RDKit 是化学信息学领域最主流的开源工具库之一,其内置的分子描述符计算模块可一次性输出 200+ 个数值特征,覆盖拓扑、物化、片段等多个维度。这些特征广泛用于 AIDD(AI-driven Drug Discovery,人工智能药物研发)的分子属性预测、ADMET 建模、虚拟筛选等核心任务。本文整理了完整的 208 个属性,并给出分类解析与可直接运行的代码示例。


一、快速上手:一键计算 208 个描述符

在这里插入图片描述

环境安装

pip install rdkit pandas

核心代码:批量计算描述符

from rdkit import Chem
from rdkit.Chem import Descriptors
from rdkit.ML.Descriptors import MoleculeDescriptors
import pandas as pd

# 定义描述符计算器(208个)
descriptor_names = [name for name, _ in Descriptors.descList]
calculator = MoleculeDescriptors.MolecularDescriptorCalculator(descriptor_names)

def smiles_to_descriptors(smiles_list: list[str]) -> pd.DataFrame:
    """将 SMILES 列表转换为 208 维描述符 DataFrame"""
    records = []
    for smi in smiles_list:
        mol = Chem.MolFromSmiles(smi)
        if mol is None:
            records.append([None] * len(descriptor_names))
        else:
            records.append(list(calculator.CalcDescriptors(mol)))
    return pd.DataFrame(records, columns=descriptor_names)


# 示例:计算阿司匹林、咖啡因、布洛芬的描述符
smiles = [
    "CC(=O)Oc1ccccc1C(=O)O",   # 阿司匹林
    "Cn1cnc2c1c(=O)n(c(=O)n2C)C",  # 咖啡因
    "CC(C)Cc1ccc(cc1)C(C)C(=O)O",  # 布洛芬
]

df = smiles_to_descriptors(smiles)
print(df.shape)       # (3, 208)
print(df[["MolWt", "MolLogP", "TPSA", "NumHDonors", "NumHAcceptors"]].round(2))

输出示例:

     MolWt  MolLogP   TPSA  NumHDonors  NumHAcceptors
0   180.16     1.31  63.60           1              3   # 阿司匹林
1   194.19    -0.07  61.36           0              6   # 咖啡因
2   206.28     3.72  37.30           1              2   # 布洛芬

Lipinski 五规则快速筛选(Ro5)

def lipinski_filter(df: pd.DataFrame) -> pd.Series:
    """返回符合 Ro5 规则的布尔掩码"""
    return (
        (df["MolWt"] <= 500) &
        (df["MolLogP"] <= 5) &
        (df["NumHDonors"] <= 5) &
        (df["NumHAcceptors"] <= 10)
    )

mask = lipinski_filter(df)
print(df[mask][["MolWt", "MolLogP", "NumHDonors", "NumHAcceptors"]])

与机器学习结合:预测分子溶解度

from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
import numpy as np

# 假设 df 是描述符特征,y 是实验 LogS(水溶性)
# df, y = load_your_dataset()

# 数据预处理:填充 NaN、去除方差为零的列
X = df.fillna(0)
X = X.loc[:, X.std() > 0]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

model = RandomForestRegressor(n_estimators=200, random_state=42)
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
print(f"R² = {r2_score(y_test, y_pred):.3f}")

# 查看最重要的描述符
importances = pd.Series(model.feature_importances_, index=X.columns)
print(importances.nlargest(10))

二、与 AIDD 的关联:描述符在药物研发中的应用

人工智能药物研发的核心挑战之一,是将化学结构转化为机器可读的数值表示。RDKit 描述符提供了一种无需深度学习即可获取结构信息的经典方案,与图神经网络(GNN)、Transformer 等新方法互为补充。

应用场景 使用的核心描述符 典型任务
ADMET 预测 TPSA、MolLogP、NumRotatableBonds、MolWt 口服吸收(A)、BBB 穿透(D)、CYP 代谢(M)
毒性预测 fr_nitro、fr_nitro_arom、fr_aniline、fr_halogen hERG 抑制、肝毒性、致突变性
类药性评估 Lipinski Ro5 相关指标(MolWt、MolLogP、H 给受体) 先导化合物筛选
虚拟筛选 全部 208 维作为分子指纹替代 活性/非活性二分类
分子生成评估 qed(药物相似性综合评分) 生成模型的奖励函数
QSAR 建模 拓扑指数(Chi、Kappa、BalabanJ)+ 物化属性 定量构效/构毒关系

提示:在实际 AIDD 项目中,RDKit 描述符常与 Morgan 指纹(ECFP)拼接使用,以同时捕获全局物化信息与局部子结构信息。


三、208 个描述符分类详解

按功能和计算原理,208 个属性可归为以下 8 大类:


类别 1:BCUT2D 描述符(8 个)

前缀BCUT2D_

基于 Burden 矩阵的 2D 特征值描述符,分别编码电荷、LogP、摩尔折射率(MR)和分子量的高/低特征值,反映原子属性的整体分布。

属性名 含义
BCUT2D_CHGHI / CHGLO 电荷相关特征值(高/低)
BCUT2D_LOGPHI / LOGPLOW LogP 相关特征值(高/低)
BCUT2D_MRHI / MRLOW 摩尔折射率特征值(高/低)
BCUT2D_MWHI / MWLOW 分子量特征值(高/低)

类别 2:拓扑与图论描述符(17 个)

包含BalabanJBertzCTChi0/1/2/3/4(n/v)IpcKappa1/2/3HallKierAlpha

这些指数从分子图结构(原子连接方式)出发,量化分子的形状、分支度和复杂性,在 QSAR 建模中是历史最悠久的一类描述符。

属性名 含义
BalabanJ Balaban 连接性指数,反映分子分支程度
BertzCT 分子拓扑复杂度指数
Chi0~Chi4(n/v) 路径/价键 Chi 连接性指数(0~4 阶)
Kappa1~Kappa3 Hall-Kier Kappa 形状指数
HallKierAlpha 修正 alpha 值,反映杂原子的影响
Ipc 图的信息内容(information content)

类别 3:电子状态(EState)相关描述符(22 个)

前缀EState_VSA1~11VSA_EState1~10

基于 Hall-Kier 电子拓扑状态(E-State)指数,结合分子表面积(VSA),将原子的电子效应分布映射到可数值化的区间段。

  • EState_VSA1~11:将原子按 EState 值分区间,统计各区间的表面积之和
  • VSA_EState1~10:将原子按 VSA 贡献分区间,统计各区间的 EState 均值

常用于描述分子极性表面的电子分布,与膜渗透性预测密切相关。


类别 4:物化属性描述符(22 个)

这是药物研发最直接使用的一类描述符,直接反映分子的物理化学性质:

属性名 含义 AIDD 用途
MolWt / ExactMolWt / HeavyAtomMolWt 分子量(含/不含 H) Lipinski Ro5
MolLogP 计算 LogP(亲脂性) 吸收、膜穿透、BBB
MolMR 摩尔折射率 极化率、体积代理
TPSA 拓扑极性表面积 口服吸收、BBB 穿透
FractionCSP3 sp3 碳比例 类药性、3D 复杂度
NumRotatableBonds 可旋转键数 口服生物利用度
NumHDonors / NumHAcceptors 氢键给体/受体数 Lipinski Ro5
NHOHCount / NOCount N-OH 基团数 / N、O 原子数 极性评估
HeavyAtomCount 重原子数 分子大小
NumHeteroatoms 杂原子数 极性、代谢位点
NumValenceElectrons / NumRadicalElectrons 价电子/自由基电子数 反应活性
RingCount 环数 分子刚性
qed 药物相似性综合评分(0~1) 生成模型评估
MaxAbsPartialCharge / MinAbsPartialCharge 等 最大/最小(绝对)偏电荷 电荷分布

类别 5:表面积(VSA)描述符(32 个)

前缀PEOE_VSA1~14SMR_VSA1~10SlogP_VSA1~12

这三族描述符均是将各原子的 VSA(范德华表面积贡献)按不同物化属性分区间后累加:

系列 分区依据 区间数
PEOE_VSA PEOE(Gasteiger)偏电荷 14 个区间
SMR_VSA 摩尔折射率贡献 10 个区间
SlogP_VSA LogP 贡献 12 个区间

这类描述符将全局物化量分解到不同区域,信息密度较高,在 ADMET 预测模型中表现突出。


类别 6:环系描述符(9 个)

描述分子中不同类型环的数量,对于片段类药物(FBDD)和骨架分析尤为重要。

属性名 含义
NumAliphaticCarbocycles 脂肪族碳环数
NumAliphaticHeterocycles 脂肪族杂环数
NumAliphaticRings 脂肪族环总数
NumAromaticCarbocycles 芳香碳环数
NumAromaticHeterocycles 芳香杂环数
NumAromaticRings 芳香环总数
NumSaturatedCarbocycles 饱和碳环数
NumSaturatedHeterocycles 饱和杂环数
NumSaturatedRings 饱和环总数

类别 7:Morgan 指纹密度(3 个)

前缀FpDensityMorgan1/2/3

基于 Morgan 算法(半径 1/2/3)计算的指纹密度,即每个重原子平均贡献的 bit 数,反映分子的局部化学多样性。


类别 8:功能团计数描述符(85 个)

前缀fr_

这是数量最多的一类,共 85 个,每个属性统计分子中某类官能团或结构片段的出现次数,覆盖代谢、毒性和类药性相关的关键子结构。按化学类型细分如下:

含氮基团(21 个)fr_NH0/1/2fr_Ar_Nfr_Ar_NHfr_ArNfr_Iminefr_amidefr_amidinefr_anilinefr_azidefr_azofr_guanidofr_hdrzinefr_imidazolefr_imidefr_nitrilefr_nitrofr_nitro_aromfr_nitro_arom_nonorthofr_nitrosofr_quatN

含氧基团(13 个)fr_Al_OHfr_Al_OH_noTertfr_Ar_OHfr_Ar_COOfr_Al_COOfr_COOfr_COO2fr_C_Ofr_C_O_noCOOfr_esterfr_etherfr_lactonefr_oxime

含硫/卤基团(8 个)fr_C_Sfr_SHfr_sulfidefr_sulfonamdfr_sulfonefr_thiazolefr_thiocyanfr_thiophene

杂环类(12 个)fr_benzenefr_furanfr_imidazolefr_morpholinefr_oxazolefr_piperdinefr_piperzinefr_pyridinefr_tetrazolefr_thiazolefr_thiophenefr_dihydropyridine

脂肪链/环类(8 个)fr_alkyl_carbamatefr_alkyl_halidefr_allylic_oxidfr_aryl_methylfr_bicyclicfr_methoxyfr_term_acetylenefr_unbrch_alkane

毒性/代谢相关(7 个)fr_Ndealkylation1/2fr_HOCCNfr_barbiturfr_benzodiazepinefr_diazofr_epoxide

其他杂项(16 个)fr_aldehydefr_halogenfr_hdrzonefr_isocyanfr_isothiocyanfr_ketonefr_ketone_Toplissfr_lactamfr_Nhpyrrolefr_N_Ofr_para_hydroxylationfr_phenolfr_phenol_noOrthoHbondfr_phos_acidfr_phos_esterfr_priamidefr_prisulfonamdfr_urea

这类描述符在毒性预测(如 fr_nitro_arom 与致突变性相关)和代谢稳定性预测(如 fr_esterfr_amide 与水解代谢相关)中尤为重要。


四、各类描述符数量汇总

类别 数量 典型代表
BCUT2D 描述符 8 BCUT2D_CHGHI
拓扑/图论描述符 17 BalabanJ, Kappa1~3, Chi系列
EState 相关描述符 22 EState_VSA, VSA_EState
物化属性描述符 22 MolWt, MolLogP, TPSA, qed
VSA 系列描述符 32 PEOE_VSA, SMR_VSA, SlogP_VSA
环系描述符 9 NumAromaticRings
Morgan 指纹密度 3 FpDensityMorgan1~3
功能团计数(fr_) 85 fr_nitro, fr_ester, fr_halogen
合计 208

五、实用建议

  1. 特征选择很重要:208 个描述符中存在大量共线性,建议用方差过滤 + 相关性筛选,实际入模特征通常在 50~100 个之间。

  2. 结合指纹使用:RDKit 描述符擅长捕捉全局物化属性,Morgan 指纹(ECFP4)擅长编码局部子结构,两者拼接往往比单独使用效果更好。

  3. 注意 qed 的特殊性qed(Quantitative Estimate of Drug-likeness)是一个综合评分(0~1),在分子生成和强化学习任务中常作为奖励信号,与其他描述符性质不同,通常单独处理。

  4. 关注 fr_ 系列的稀疏性:功能团计数描述符在多数分子上为 0,构成稀疏矩阵,树模型(RandomForest、XGBoost)对此天然适配,神经网络则需要注意标准化处理。


参考资料

  • RDKit 官方文档:https://www.rdkit.org/docs/
  • RDKit 描述符列表:https://www.rdkit.org/docs/GettingStartedInPython.html#list-of-available-descriptors

*做科研经常查阅文献或使用PubMed的朋友可以试试科研AI Agent 【文献泡泡
*如有问题或补充,欢迎在评论区交流。数据集(208个属性名称+说明)可在文章附件处下载。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐