使用 RDKit 计算分子描述符:208个属性全解析与 AIDD 应用指南
摘要: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 个)
包含:BalabanJ、BertzCT、Chi0/1/2/3/4(n/v)、Ipc、Kappa1/2/3、HallKierAlpha
这些指数从分子图结构(原子连接方式)出发,量化分子的形状、分支度和复杂性,在 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~11、VSA_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~14、SMR_VSA1~10、SlogP_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/2、fr_Ar_N、fr_Ar_NH、fr_ArN、fr_Imine、fr_amide、fr_amidine、fr_aniline、fr_azide、fr_azo、fr_guanido、fr_hdrzine、fr_imidazole、fr_imide、fr_nitrile、fr_nitro、fr_nitro_arom、fr_nitro_arom_nonortho、fr_nitroso、fr_quatN
含氧基团(13 个):fr_Al_OH、fr_Al_OH_noTert、fr_Ar_OH、fr_Ar_COO、fr_Al_COO、fr_COO、fr_COO2、fr_C_O、fr_C_O_noCOO、fr_ester、fr_ether、fr_lactone、fr_oxime
含硫/卤基团(8 个):fr_C_S、fr_SH、fr_sulfide、fr_sulfonamd、fr_sulfone、fr_thiazole、fr_thiocyan、fr_thiophene
杂环类(12 个):fr_benzene、fr_furan、fr_imidazole、fr_morpholine、fr_oxazole、fr_piperdine、fr_piperzine、fr_pyridine、fr_tetrazole、fr_thiazole、fr_thiophene、fr_dihydropyridine
脂肪链/环类(8 个):fr_alkyl_carbamate、fr_alkyl_halide、fr_allylic_oxid、fr_aryl_methyl、fr_bicyclic、fr_methoxy、fr_term_acetylene、fr_unbrch_alkane
毒性/代谢相关(7 个):fr_Ndealkylation1/2、fr_HOCCN、fr_barbitur、fr_benzodiazepine、fr_diazo、fr_epoxide
其他杂项(16 个):fr_aldehyde、fr_halogen、fr_hdrzone、fr_isocyan、fr_isothiocyan、fr_ketone、fr_ketone_Topliss、fr_lactam、fr_Nhpyrrole、fr_N_O、fr_para_hydroxylation、fr_phenol、fr_phenol_noOrthoHbond、fr_phos_acid、fr_phos_ester、fr_priamide、fr_prisulfonamd、fr_urea
这类描述符在毒性预测(如
fr_nitro_arom与致突变性相关)和代谢稳定性预测(如fr_ester、fr_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 |
五、实用建议
-
特征选择很重要:208 个描述符中存在大量共线性,建议用方差过滤 + 相关性筛选,实际入模特征通常在 50~100 个之间。
-
结合指纹使用:RDKit 描述符擅长捕捉全局物化属性,Morgan 指纹(ECFP4)擅长编码局部子结构,两者拼接往往比单独使用效果更好。
-
注意
qed的特殊性:qed(Quantitative Estimate of Drug-likeness)是一个综合评分(0~1),在分子生成和强化学习任务中常作为奖励信号,与其他描述符性质不同,通常单独处理。 -
关注
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个属性名称+说明)可在文章附件处下载。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)