当前位置: 首页 > news >正文

TCMSP数据库+R语言实战:从网页爬虫到中药-靶点网络图的全流程解析

TCMSP数据库+R语言实战:从网页爬虫到中药-靶点网络图的全流程解析

在生物信息学和中医药现代化研究的交叉领域,数据科学正扮演着越来越重要的角色。TCMSP(Traditional Chinese Medicine Systems Pharmacology Database)作为中药系统药理学分析的重要平台,蕴藏着海量的中药-成分-靶点关系数据。本文将带领读者使用R语言构建一个完整的数据分析流水线,从动态网页抓取、数据清洗到网络可视化,实现中药作用机制研究的自动化分析。

1. 环境准备与数据获取

1.1 必要的R包加载

构建完整分析流程需要以下核心R包支持:

library(rvest) # 网页抓取与解析 library(httr) # HTTP请求处理 library(jsonlite) # JSON数据解析 library(dplyr) # 数据清洗与转换 library(igraph) # 网络分析与可视化 library(ggraph) # 高级网络可视化 library(purrr) # 函数式编程工具

提示:建议使用RStudio的renv包管理项目依赖,确保分析环境可复现。

1.2 动态网页内容抓取策略

TCMSP网站采用JavaScript动态渲染数据,传统爬虫方法难以直接获取。我们需要模拟浏览器行为并解析隐藏的JSON数据:

get_tcmsp_data <- function(herb_url) { response <- GET(herb_url, config(ssl_verifypeer = FALSE)) html_content <- read_html(response) scripts <- html_content %>% html_elements("script") %>% html_text() data_script <- scripts[str_detect(scripts, "data:\\s\\[.*\\]")] list( molecules = str_extract(data_script, "data:\\s\\[.*?\\]") %>% str_replace("data:", "") %>% fromJSON(simplifyVector = TRUE), targets = str_extract(data_script, "data:\\s\\[.*?\\]", group = 2) %>% str_replace("data:", "") %>% fromJSON(simplifyVector = TRUE) ) }

2. 数据清洗与标准化

2.1 基于ADME参数的筛选

中药成分的成药性评估通常基于两个关键参数:

参数名称阈值生物学意义
OB口服生物利用度≥30%成分被吸收进入循环系统的比例
DL类药性≥0.18成分与已知药物结构的相似度

实现筛选的R代码:

filter_molecules <- function(molecules, ob_thresh = 30, dl_thresh = 0.18) { molecules %>% mutate(across(c(ob, dl), as.numeric)) %>% filter(ob >= ob_thresh & dl >= dl_thresh) }

2.2 数据关联与去重

建立中药-成分-靶点的完整关系网络需要多表关联:

build_herb_network <- function(herb_name, molecules, targets) { targets %>% semi_join(molecules, by = "MOL_ID") %>% mutate(Herb = herb_name) %>% select(Herb, MOL_ID, Molecule = molecule_name, Target = target_name) %>% distinct() }

3. 网络分析与可视化

3.1 网络图构建基础

使用igraph创建网络图对象:

create_network_graph <- function(network_data) { graph_from_data_frame( network_data %>% select(-MOL_ID), directed = FALSE ) %>% set_vertex_attributes( type = ifelse(V(.)$name %in% network_data$Herb, "Herb", ifelse(V(.)$name %in% network_data$Molecule, "Molecule", "Target")) ) }

3.2 高级网络可视化技巧

使用ggraph创建出版级网络图:

plot_herb_network <- function(network_graph) { ggraph(network_graph, layout = "kk") + geom_edge_link(alpha = 0.2, width = 0.3) + geom_node_point(aes(color = type, size = degree(network_graph)), alpha = 0.8) + geom_node_text(aes(label = ifelse(type == "Herb", name, NA)), repel = TRUE, size = 5) + scale_color_manual(values = c(Herb = "#e41a1c", Molecule = "#377eb8", Target = "#4daf4a")) + theme_graph(base_family = "sans") + labs(title = "Herb-Molecule-Target Network") }

4. 实战案例:艾叶活性成分分析

4.1 完整流程整合

将各模块组合成端到端分析流程:

analyze_herb_network <- function(herb_name, herb_url, ob_thresh = 30, dl_thresh = 0.18) { # 数据获取 tcmsp_data <- get_tcmsp_data(herb_url) # 数据清洗 filtered_mols <- filter_molecules(tcmsp_data$molecules, ob_thresh, dl_thresh) network_data <- build_herb_network(herb_name, filtered_mols, tcmsp_data$targets) # 网络分析 network_graph <- create_network_graph(network_data) # 可视化 network_plot <- plot_herb_network(network_graph) list( network_data = network_data, network_graph = network_graph, plot = network_plot ) }

4.2 多味中药联合分析

扩展为多味中药的批量处理:

herbs <- list( "Aiye" = "https://tcmsp-e.com/tcmspsearch.php?qr=Folium%20Artemisiae%20Argyi", "Dangshen" = "https://tcmsp-e.com/tcmspsearch.php?qr=Codonopsis%20Radix" ) multi_herb_analysis <- map2_df( names(herbs), herbs, ~ analyze_herb_network(.x, .y)$network_data ) combined_graph <- create_network_graph(multi_herb_analysis) plot_herb_network(combined_graph)

5. 高级应用与优化技巧

5.1 网络拓扑分析

计算关键网络指标:

calculate_network_metrics <- function(network_graph) { list( degree_dist = degree_distribution(network_graph), betweenness = betweenness(network_graph), closeness = closeness(network_graph), hub_score = hub_score(network_graph)$vector ) }

5.2 交互式可视化实现

使用visNetwork创建交互式网络图:

library(visNetwork) create_interactive_network <- function(network_graph) { visNetwork( nodes = data.frame( id = V(network_graph)$name, label = V(network_graph)$name, group = V(network_graph)$type, value = degree(network_graph) ), edges = get.data.frame(network_graph, what = "edges") ) %>% visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE) %>% visLayout(randomSeed = 123) }
http://www.gsyq.cn/news/1431449.html

相关文章:

  • RTX51 Tiny中os_wait函数详解与任务调度实践
  • 2026年成都新津成外关联招生机构实力排行一览:新津成外师资力量/新津成外怎么样/新津成外招生条件/新津成外招生电话/选择指南 - 优质品牌商家
  • 别再只盯着AUC了!用R语言实战NRI和IDI,给你的模型评估报告加点‘硬货’
  • 泉天下品牌怎么样? - mypinpai
  • WINNER II信道模型实战:手把手教你用CDL表配置14种典型无线传播场景
  • 避开这些坑!ZYNQ裸机双网口LWIP配置的5个常见问题与调试心得
  • Windows环境变量还能这么玩?深入Wscript.Shell的Environment属性,实现动态路径配置
  • 2026年华信恒创性价比高吗? - mypinpai
  • 仅限首批接入企业开放:Gemini调试错误黄金15分钟响应SOP(含Cloud Logging高级过滤语法+Error Reporting自定义告警配置)
  • 51单片机交通灯项目避坑指南:三极管驱动选型、按键消抖和中断优先级设置这些细节你注意了吗?
  • PotPlayer字幕翻译插件:3步实现外语视频无障碍观看的终极方案
  • 从BIOS时钟到系统时间:深入理解Win11/Ubuntu双系统时间错乱的底层机制
  • Ubuntu 18.04远程桌面搭建:从手动配置到脚本一键化,我的踩坑与安全实践
  • 别再只画散点了!用DESeq2的plotPCA函数快速检查RNA-seq数据质量
  • 深度解析Sapphire Sleet假Zoom SDK攻击:朝鲜APT如何突破macOS金融防线
  • Lindy效应如何重塑AI模型生命周期?揭秘训练自动化背后的3个反直觉数学定律
  • 2026年最新实测:天学网和E听说哪个对孩子英语听说提升更有用
  • 开发一个类似OpenClaw应用程序的AI Agent智能体,需要从哪些方面着手?
  • 告别杂乱桌面!MydockFinder 不只是美化,更是 Windows 效率工具(消息提示、窗口预览实战)
  • OAK-D Pro相机标定避坑指南:手把手教你搞定ORB-SLAM2的YAML参数文件
  • 别再只用准确率了!用Python的sklearn快速计算Kappa系数,搞定不平衡分类评估
  • 手把手教你用Python+classification_report搞定多分类模型评估(附不平衡数据集实战)
  • 2026最新实测:天学网和E听说哪个对孩子英语听说提升更有用
  • Unity游戏镜头设计进阶:用Cinemachine实现《空洞骑士》式的镜头延迟与区域锁定
  • 不止于备份:在国产麒麟系统上用mdadm做RAID1,顺便聊聊数据安全与系统性能那点事
  • 给新硬盘装系统,选MBR还是GPT?Windows 11/10安装时别再选错了
  • 第 23篇 k8s之Pod:多容器 Pod 与设计模式(Sidecar 等)
  • AI工程化最后1公里:MLOps整合的“不可见成本”拆解——含真实客户TCO对比表(仅限前500名技术负责人获取)
  • 别光调参了!聊聊猫狗分类CNN项目中,数据预处理那点事儿(PyTorch版)
  • 从‘能跑’到‘好玩’:手把手教你用Godot4的AnimationPlayer为角色注入灵魂