资讯动态

除风清脾汤治疗血吸虫病:网络药理学到分子动力学的机制研究链路

发布时间:2026/10/22 2:31:38 来源:尧图企业网站定制
简介这份PDF资料围绕除风清脾汤CQD治疗血吸虫病的机制研究整合网络药理学、机器学习、分子对接与分子动力学模拟等多学科分析手段面向具备生物信息学和机器学习基础的中医药科研人员重点服务中药复方机制探索和现代化研究场景。资源为单个PDF压缩包共1个文件、808KB内含论文复现所需的完整可运行代码与逐段解释覆盖TCMSP/UniProt数据获取、草药-靶点网络构建、Venn交集分析、PPI网络分析、GO/KEGG富集以及LASSO、随机森林、SVM-RFE等特征筛选方法和分子对接/动力学模拟验证流程闭环、可直接迁移到类似课题。其中山奈酚与TP53稳定结合等关键结论从分子层面印证了多成分-多靶点-多通路的作用机制可作为中药复方系统分析的参考模板目前已有90人浏览学习尤其适合希望掌握网络药理学与机器学习结合技术路线的研究者。1. 除风清脾汤治疗血吸虫病从多组学证据到计算验证的研究链路“网络药理学 机器学习 分子对接 分子动力学模拟”这串名词放在一起很多人第一反应是“追热点”的套路。但真正做过中药复方机制研究的人会明白除风清脾汤Chufeng Qingpi decoction, CQD这类复方治病的难点不在“有没有效”而在“说不清为什么有效”——几十个化合物、几百个预测靶点、一堆通路如果不做降维和动态验证结论永远停在“可能相关”的层面。这篇文章不是复述某篇论文而是把这条链路拆成五个可落地的阶段先通过网络药理学拿到候选靶点再用机器学习筛选核心基因随后用分子对接验证结合倾向最后用分子动力学模拟确认复合物的动态稳定性。适合正在做中药复方机制研究、需要从“成分—靶点—通路”走向“靶点—结构—能量”的从业者也适合想用计算手段给实验结论补证据链的研究生。整个流程每步都有可运行的代码和数据说明照着跑能复现照着改能迁移到别的复方上。2. 网络药理学与机器学习从混杂信号里锁核心靶点网络药理学解决的是“复方有哪些成分、成分可能作用于哪些靶点、这些靶点与疾病基因的重合度”这三件事。机器学习解决的是“这些靶点里哪些才是真正贡献疾病特征的基因”。两段合在一起才算把除风清脾汤的机制从“泛泛的靶点列表”压缩成“可验证的核心基因”。2.1 成分与疾病靶点获取最小可运行方案中药复方靶点获取的常规做法是“成分结构 → 公共数据库反向找靶”。常见做法是先通过中药系统药理学数据库或文献收集除风清脾汤的主要活性成分再用结构相似性搜索预测靶点。这里直接给出一个可运行的数据准备脚本它有两部分功能一是生成成分—靶点关系矩阵二是获取血吸虫病相关基因。为了让你不卡在数据库下载环节脚本中内置了模拟数据生成逻辑真实使用时只需替换成对应数据库的导出文件即可。import pandas as pd import numpy as np # 模拟除风清脾汤中5个候选活性成分的靶点预测结果 # 实际场景从数据库导出后每行代表一个成分与一个靶点的关联 compounds [CQD_comp1, CQD_comp2, CQD_comp3, CQD_comp4, CQD_comp5] targets [fGENE_{i:03d} for i in range(1, 101)] # 模拟100个候选靶点 np.random.seed(42) # 生成成分-靶点关联矩阵1代表该成分可能作用于该靶点 interaction_matrix np.random.binomial(1, 0.08, size(len(compounds), len(targets))) df_herb_target pd.DataFrame(interaction_matrix, indexcompounds, columnstargets) # 模拟血吸虫病相关基因列表真实研究常从GeneCards/DisGeNET获取 schisto_genes [fGENE_{i:03d} for i in np.random.choice(range(1, 101), 25, replaceFalse)] # 取交集既是复方靶点又与疾病相关的基因 common_genes [g for g in targets if g in schisto_genes and df_herb_target[g].sum() 0] print(f复方候选靶点: {df_herb_target.shape[1]}) print(f疾病相关基因: {len(schisto_genes)}) print(f交集靶点数: {len(common_genes)})代码逻辑很直接用二项分布模拟成分—靶点关系再与疾病基因取交集。这里需要注意两个参数0.08是关联稀疏度真实数据里成分—靶点关系往往更稀疏低于 0.05 也很正常np.random.seed(42)保证结果可复现换数据后记得删掉或修改随机种子。2.2 用 LASSO 加随机森林下钻核心靶点交集靶点通常还有几十个仍不足以支撑后续分子对接——每个靶点都做对接计算量大且假阳性高。此时引入机器学习来筛选特征基因。常见做法是构造“疾病组 / 对照组”表达矩阵用 LASSO 的 L1 正则化做稀疏化选择再用随机森林的特征重要性做交叉验证。两条路径取交集得到的基因更稳健。from sklearn.linear_model import LassoCV from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import cross_val_score import numpy as np # 构造表达矩阵行是样本列是基因仅用交集靶点 np.random.seed(7) n_samples, n_genes 60, len(common_genes) X np.random.normal(0, 1, size(n_samples, n_genes)) # 模拟前8个基因在疾病组显著差异表达 X[:30, :8] np.random.normal(1.5, 0.5, size(30, 8)) y np.array([1]*30 [0]*30) # 1疾病组0对照组 # 第一步LASSO 筛选特征 lasso LassoCV(cv5, random_state0).fit(X, y) lasso_selected np.where(np.abs(lasso.coef_) 1e-4)[0] print(fLASSO 保留特征数: {len(lasso_selected)}) # 第二步随机森林特征重要性 交叉验证 rf RandomForestClassifier(n_estimators500, random_state0) rf.fit(X, y) importance rf.feature_importances_ # 取重要性排名前30%的基因 top_k max(5, int(n_genes * 0.3)) rf_selected np.argsort(importance)[-top_k:] # 第三步取交集作为核心靶点候选 core_genes_idx sorted(set(lasso_selected) set(rf_selected)) core_genes [common_genes[i] for i in core_genes_idx] print(f核心靶点数双方法交集: {len(core_genes)}) # 第四步十折交叉验证评估稳定性 cv_scores cross_val_score(rf, X[:, core_genes_idx], y, cv10, scoringroc_auc) print(f十折AUC均值: {cv_scores.mean():.3f} (±{cv_scores.std():.3f}))这段代码里最值得调整的两个参数是CLASSO 的正则化强度和n_estimators随机森林的树数。LassoCV会自动用交叉验证搜索最佳alpha不必手动调n_estimators设置 500 是为了让特征重要性收敛如果样本量小、基因数少200 也够用。top_k取了 30% 的上限实际研究里通常先看累计重要性曲线再定阈值避免截得太狠丢掉弱信号基因。2.3 PPI 网络与功能富集确认核心靶点的通路归属拿到核心靶点后还需要做两件事一是蛋白互作网络PPI里看这些基因是否聚集在同一功能模块二是 GO 和 KEGG 富集分析看它们集中在哪些通路。PPI 网络推荐从公开的蛋白互作数据库导出高置信度互作关系阈值一般设 score 0.9再用 Cytoscape 做可视化。富集分析这里提供 Python 代码import gseapy as gp # 核心靶点基因列表前一步生成的 core_genes gene_list core_genes # GO 生物过程富集 go_enrich gp.enrichr(gene_listgene_list, gene_setsGO_Biological_Process_2021, organismhuman, outdirenrich_go) # KEGG 通路富集 kegg_enrich gp.enrichr(gene_listgene_list, gene_setsKEGG_2021_Human, organismhuman, outdirenrich_kegg) # 输出显著富集条目调整后p值 0.05 sig_go go_enrich.results[go_enrich.results[Adjusted P-value] 0.05] sig_kegg kegg_enrich.results[kegg_enrich.results[Adjusted P-value] 0.05] print(f显著GO条目数: {len(sig_go)}) print(f显著KEGG通路数: {len(sig_kegg)}) print(sig_kegg[[Term, Adjusted P-value]].head(10))gseapy的enrichr会调用在线富集数据库需要联网。如果所在的网络环境访问不稳定可以用本地下载的 GMT 文件代替代码里把gene_sets参数换成.gmt文件路径即可。实际项目里建议 KEGG 富集和 GO 富集各跑一遍重点关注“免疫应答”“炎症反应调节”“细胞凋亡”这类条目——血吸虫病机制研究里Th1/Th2 平衡和肉芽肿形成相关通路出现频率最高。3. 分子对接用打分函数验证化合物与靶点的结合倾向机器学习筛出的核心靶点只是在统计层面和疾病相关。真正回答“除风清脾汤里的成分能不能结合这个靶点”需要分子对接。这一步把化合物结构放进靶蛋白的结合口袋通过搜索构象空间并打分得到结合亲和力的估计值。3.1 受体与配体预处理PDB 清洗和加氢对接成败一半取决于预处理。受体结构从 PDB 数据库下载后通常包含水分子、配体、金属离子这些先要处理掉。常见做法是删除水分子和非必要时共晶配体补全缺失残基加氢再转成 AutoDock 的 pdbqt 格式。配体这边从 PubChem 下载 SMILES 后用 Open Babel 转成 3D 结构。# 受体预处理以某蛋白晶体结构为例 # 1. 去除水分子和原配体 grep -v ^HOH receptor.pdb receptor_clean.pdb # 2. 用 Open Babel 加氢并转为 pdbqt obabel receptor_clean.pdb -O receptor.pdbqt -xr # 3. 配体从 SMILES 转 3D 结构再转 pdbqt obabel -:CC1C(C(O)C2C(O1)C3C(CC(CC3OC2O)OC)OC)OC -O ligand.pdbqt --gen3d-xr参数表示删除所有水分子后再输出--gen3d会先生成三维构象。如果配体含有可旋转键Open Babel 会自动识别并写入ROOT和BRANCH信息。这一步常见的错误是配体原子类型缺失导致后续 Vina 读入时报错解决办法是在--gen3d后加--partialcharge gasteiger显式计算电荷。3.2 Vina 对接搜索盒子与打分参数对接的核心是定义搜索空间。盒子中心应落在蛋白的功能活性位点而不是几何中心。通常用已知活性残基坐标的平均值作为中心盒子边长 2025 Å。exhaustiveness 参数控制全局搜索的彻底程度值越大结果越可重复耗时也越高。# 分子对接主命令 vina --receptor receptor.pdbqt \ --ligand ligand.pdbqt \ --center_x 12.5 --center_y -3.2 --center_z 8.7 \ --size_x 22 --size_y 22 --size_z 22 \ --exhaustiveness 16 --num_modes 9 \ --out docking_result.pdbqt参数含义--center_x/y/z是盒子中心坐标--size_x/y/z是盒子边长单位 Å--exhaustiveness 16表示搜索深度一般 8 够筛查用16 用于最终结果--num_modes 9输出前 9 个结合构象。完成后查看打分# 查看结合亲和力评分单位 kcal/mol grep REMARK VINA RESULT docking_result.pdbqtVina 打分通常为负值越负表示结合越强。这个分数的参考阈值如下表打分范围 (kcal/mol)结合强度判断建议 -9.0强结合优先进入分子动力学模拟-7.0 ~ -9.0中等结合可进入 MD 做进一步确认-5.0 ~ -7.0弱结合谨慎对待结合位点需复核 -5.0几乎无结合建议换候选成分或靶点3.3 批量化对接与结果筛选复方有多个成分核心靶点也不止一个逐对手动跑不现实。建议写一个批量脚本import subprocess import os # 定义配体列表和目标蛋白质 ligands [ligand1.pdbqt, ligand2.pdbqt, ligand3.pdbqt] receptors [receptor_A.pdbqt, receptor_B.pdbqt] # 每个受体的活性位点中心 centers { receptor_A.pdbqt: {x: 12.5, y: -3.2, z: 8.7}, receptor_B.pdbqt: {x: -5.1, y: 20.3, z: 14.6}, } results [] for rec in receptors: for lig in ligands: out_name f{rec.replace(.pdbqt,)}_{lig.replace(.pdbqt,)}_out.pdbqt cmd [ vina, --receptor, rec, --ligand, lig, --center_x, str(centers[rec][x]), --center_y, str(centers[rec][y]), --center_z, str(centers[rec][z]), --size_x, 22, --size_y, 22, --size_z, 22, --exhaustiveness, 8, --num_modes, 5, --out, out_name ] subprocess.run(cmd, checkTrue) # 提取打分 with open(out_name) as f: for line in f: if line.startswith(REMARK VINA RESULT): score float(line.split()[3]) results.append((rec, lig, score)) break # 按打分排序输出 results.sort(keylambda x: x[2]) for rec, lig, score in results: print(f{rec} {lig}: {score:.2f} kcal/mol)批量脚本最大的坑是盒子中心坐标写错——所有受体共用一个中心导致结果虚高。每个蛋白的活性位点残基不同中心坐标必须单独设定。可以用之前 PPI 网络里核心靶点的已知活性残基来定位或者用蛋白结构里的已注释功能域坐标。4. 分子动力学模拟验证复合物在动态条件下的稳定性分子对接给出的是静态结合快照结合自由能高不代表复合物在生理条件下稳定。分子动力学模拟把受体—配体复合物放入水盒子用牛顿力学积分模拟原子运动观察复合物是否在一段模拟时间内保持稳定。这一步是除风清脾汤机制研究中区分“计算结果”和“可信结论”的分水岭。4.1 GROMACS 前处理拓扑构建与水盒子设定以 GROMACS 为例流程包含加力场、定义盒子、填水、加离子四步。力场常用 AMBER99SB-ILD水模型用 TIP3P。# 1. 生成拓扑指定 AMBER99SB-ILD 力场和 TIP3P 水模型 gmx pdb2gmx -f complex.pdb -o complex_processed.gro -ff amber99sb-ildn -water tip3 # 2. 定义盒子立方体或十二面体边界距离设为 1.2 nm gmx editconf -f complex_processed.gro -o complex_box.gro -c -d 1.2 -bt dodecahedron # 3. 填充水分子 gmx solvate -cp complex_box.gro -cs spc216.gro -o complex_solv.gro -p topol.top # 4. 添加离子中和电荷 gmx grompp -f ions.mdp -c complex_solv.gro -p topol.top -o ions.tpr gmx genion -s ions.tpr -o complex_ion.gro -p topol.top -pname NA -nname CL -neutral-d 1.2表示溶质距盒子边缘至少 1.2 nm小于这个值会导致周期性边界下的镜像原子相互作用体系能跑爆。-bt dodecahedron选用十二面体盒子同样体积下比立方体节省约 20% 的溶剂原子模拟速度更快。加离子后一定要检查topol.top末尾的[ atoms ]总数里是否多了钠离子或氯离子电荷总和应为 0。4.2 能量最小化与平衡模拟温度、压力、约束能量最小化分两步做先最陡下降法消除刚性碰撞再用共轭梯度法微调。之后是 NVT 和 NPT 两步平衡温度耦合到 300 K压力耦合到 1 bar。# 能量最小化最陡下降 gmx grompp -f minim.mdp -c complex_ion.gro -r complex_ion.gro -p topol.top -o em.tpr gmx mdrun -deffnm em # NVT 平衡300 K100 ps对重原子施加位置约束 gmx grompp -f nvt.mdp -c em.gro -r em.gro -p topol.top -o nvt.tpr gmx mdrun -deffnm nvt # NPT 平衡300 K1 bar100 ps gmx grompp -f npt.mdp -c nvt.gro -t nvt.cpt -p topol.top -o npt.tpr gmx mdrun -deffnm npt # 正式产出模拟50~100 ns步长 2 fs gmx grompp -f md.mdp -c npt.gro -t npt.cpt -p topol.top -o md.tpr gmx mdrun -deffnm md -v三个 mdp 文件里最关键的参数如下表参数能量最小化NVT 平衡NPT 平衡integratorsteepmdmdnsteps500005000050000dt (ps)0.0010.0020.002tcouplnov-rescalev-rescalepcouplnonoParrinello-Rahmanconstraintsnoneh-bondsh-bonds如果 NPT 阶段压力波动极大多半是水盒子太小或加了不合适的离子浓度。出现这种情况时先检查npt.gro里体系边缘的原子是不是还贴着盒子壁必要时把-d 1.2加到 1.5 重新建盒。4.3 结果判读RMSD、RMSF 与氢键跑完 50 ns 之后判断复合物是否稳定看三个指标。RMSD 收敛到 0.2 nm 以下且趋势平稳说明蛋白骨架没有大的构象漂移RMSF 反映各残基的灵活性活性位点残基如果波动过大说明对接模式可能不可靠氢键数量需要在整个模拟过程维持一个平台值。# RMSD 计算选择骨架原子 gmx rms -s md.tpr -f md.xtc -o rmsd.xvg -n index.ndr # RMSF 计算选择每个残基的 CA 原子 gmx rmsf -s md.tpr -f md.xtc -o rmsf.xvg -res # 氢键数量随时间变化 gmx hbond -s md.tpr -f md.xtc -num hbond_num.xvg # 绘制图表用 xmgrace 或 matplotlib用 matplotlib 画图时注意把横坐标换成时间ns纵坐标 RMSD 用 nm。做 RMSD 图和 RMSF 图时分别看整体和局部整体 RMSD 收敛但 RMSF 显示结合位点附近的残基波动很大说明这个对接模式可能是热力学允许但不占主导的构象稳妥的做法是回过去换一个对接构象比如 Vina 输出的第 2、第 3 模式再跑一轮 MD做对比验证。5. 常见问题排查数据源污染、过拟合与资源陷阱整个流程走下来踩坑点集中在前置数据处理和计算资源配置两头。这里列出实际项目中频繁出现的五类问题按“现象 → 原因 → 解决”的方式逐一拆解。5.1 靶点列表“什么都相关”现象网络药理学跑完PPI 网络图拉到上千个节点KEGG 富集结果列出几十条通路几乎涵盖了炎症、免疫、凋亡、代谢等一切常见通路根本看不出除风清脾汤的特异性。原因数据库合并过程中没有做去重和置信度过滤。多个来源的靶点简单取并集score 阈值设得太低比如 0.4把大量低质量预测关系带进了下游。解决在两个层面收紧。第一靶点合并时要求至少在两个数据库中同时出现才保留第二PPI 互作分数取 0.9 以上再做网络分析。交集靶点数量可以控制在 2050 个之间。如果数量仍然偏多回到第 2.2 节用 LASSO 的稀疏化特性强制收缩。5.2 机器学习模型交叉验证崩盘现象随机森林在训练集上 AUC 达到 0.98做了十折交叉验证后均值掉到 0.65标准差超过 0.1特征重要性排名每次跑都不一样。原因样本量太小比如一组只有 8 个样本而特征数上百模型把噪声当成信号学进去了换一批样本就露馅。解决先做特征收缩再训练。把 LASSO 的alpha上限调高强制保留的特征数降到样本数的 1/5 以下。此外交叉验证策略改为“分层十折”保证疾病组和对照组在每个折里比例一致。5.3 对接盒子位置偏移导致分数虚高现象Vina 打分非常漂亮-11 kcal/mol 以下但把对接构象叠回原蛋白后发现配体结合在一个完全无关的疏水表面上远离已知功能域。原因盒子中心直接用了蛋白结构的几何中心而不是活性位点残基的坐标。解决做对接前先查蛋白的注释信息找到功能活性残基的编号然后从 PDB 文件里提取这些残基的 CA 原子坐标取平均值作为盒子中心。注意活性位点可能在蛋白内部几何中心却往往落在表面两者差异可达 20 Å 以上足以完全改变结合模式。5.4 动力学模拟体系崩溃现象能量最小化阶段就出现坐标溢出或者 NVT 平衡时温度飙升到 500 K随后体系直接爆炸。原因常见原因有三个——pdb2gmx时没有正确指定组氨酸的质子化状态导致侧链原子碰撞水盒子太小溶质跟周期镜像直接接触或者是力场和蛋白残基不匹配比如用 AMBER 力场加载了包含非标准残基的 PDB。解决第一步跑gmx pdb2gmx时检查输出日志里有没有“unknown residue”的警告第二步确认盒子的最小厚度满足 1.0 nm 以上第三步如果加了非标准残基要么用pdb2gmx -ignh重新加氢要么手动修改残基名。最小化阶段可以先用 20000 步最陡下降看势能是否降到负值再继续。5.5 计算时长失控现象一个小体系计划跑 100 ns结果用单卡 GPU 跑了六天只跑完三分之一项目排期全线推迟。原因盒子建得太大、步长没有充分利用氢键约束、模拟时长设置偏长。解决先用 5 ns 的测试跑验证体系稳定性和计算速度预估每 ns 耗时再定正式时长。确认体系稳定后正式模拟把 LINCS 约束打开步长直接用 2 fs盒子用十二面体而非立方体另外检查是否匹配到 GPU 加速的编译版本GROMACS 的 CUDA 加速通常能带来 510 倍提速。做结合自由能评价时50 ns 的稳定轨迹已经足够不必盲目跑到 200 ns。6. 结合自由能计算MM-PBSA 让机制研究更接近实验结论分子动力学模拟确认了复合物“稳不稳”但“结合强度”是多少需要用结合自由能计算来量化。MM-PBSA 是目前中药复方研究里最常用的方法它把结合自由能分解为气相分子力学能、极性溶剂化能和非极性溶剂化能三部分。以 GROMACS 轨迹为基础运行步骤分两步提取复合物轨迹和两个单独组分的轨迹再合并计算。# 从轨迹中提取受体、配体分别的构象以体系索引文件为准 gmx trjconv -s md.tpr -f md.xtc -o receptor.xtc -n index.ndx -fit rottrans gmx trjconv -s md.tpr -f md.xtc -o ligand.xtc -n index.ndx # 生成 MM-PBSA 所需的拓扑文件 gmx gmxdump -s md.tpr topol_dump.txt # 运行 MM-PBSA以 gmx_MMPBSA 为例 gmx_MMPBSA -O -i mmpbsa.in \ -sp md.tpr \ -cp complex_topol.top \ -rp receptor_topol.top \ -lp ligand_topol.top \ -nc complex.xtc -nr receptor.xtc -nl ligand.xtc输出结果里重点看DELTA TOTAL这个值。一般小于 -20 kcal/mol 属于强结合与 Vina 打分结合来看如果 Vina 分数好但 MM-PBSA 为正值说明对接构象在动态环境下不稳定结合是虚假的。计算中一个常见的坑是配体带电状态不一致——对接时用了中性形式MD 里却用了带电荷形式导致溶剂化能项出现巨大偏差。配对时务必保持同一套电荷参数。我个人做这步的习惯是先用 10 ns 的轨迹试算一遍 MM-PBSA看三项能量分解是否在合理范围气相分子力学能通常为负几百 kcal/mol极性溶剂化能为正几百 kcal/mol确认没有异常后再使用正式模拟的 50 ns 轨迹。原因在于 MM-PBSA 的极性项对轨迹抽样密度很敏感轨迹太短或抽样不均匀时溶剂化能会东倒西歪把最终的自由能值带偏。希望这个环节的说明能帮你少走一次弯路让除风清脾汤的机制研究从“计算推测”稳稳走向“可展示的证据链”。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑