当前位置: 首页 > 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.jsqmd.com/news/920126/

相关文章:

  • 如何快速解决经典游戏兼容性问题:魔兽争霸3终极优化工具指南
  • 终极VRM4U完全指南:在Unreal Engine 5中实现VRM模型的魔法级导入与运行时加载
  • RTX51 Tiny中os_wait函数详解与任务调度实践
  • 别再只打印classification_report了!用Python+Sklearn把模型评估报告玩出花(附实战代码)
  • 2026年成都新津成外关联招生机构实力排行一览:新津成外师资力量/新津成外怎么样/新津成外招生条件/新津成外招生电话/选择指南 - 优质品牌商家
  • WPF-LabelImg_过滤器
  • 遗传编程调参避坑指南:手把手优化gplearn的SymbolicRegressor,找到‘隐藏公式’
  • 从VMware到Zsh:我的Ubuntu 22.04 Pwn环境搭建与美化全记录(附避坑指南)
  • 别再只盯着AUC了!用R语言实战NRI和IDI,给你的模型评估报告加点‘硬货’
  • 避开ADS Momentum里的‘坑’:Via简化、Heal Layout与Mesh设置实战指南
  • 用STC10F04单片机做个智能交通灯,从画PCB到代码调试保姆级教程
  • 2026正规MVR蒸发器优质品牌推荐 - 优质品牌商家
  • Python3 AI 编程助手
  • 新型海上风电机组及压缩空气储能系统的建模与控制(Matlab代码实现)
  • AI获客企业哪家好 - mypinpai
  • 告别黑白路径图:手把手教你用ggsci调色板为LASSO结果一键换上SCI期刊配色
  • 城通网盘解析器:如何3分钟告别下载等待,实现文件秒传体验?
  • AI工具接入智能收藏品的最后1公里:3类合规红线、4种钱包级安全加固及实时风控响应机制
  • 2026年至今四川评价高的钢格栅公司选哪家?专业推荐四川臣功通达 - 2026年企业资讯
  • 告别卡顿!保姆级教程:为你的Unity安卓游戏适配多档刷新率(60/90/120Hz)
  • 2026年广州工期延误与索赔纠纷律师咨询指南:为何选择王云辉律师团队? - 2026年企业资讯
  • WPF-LabelImg_主内容区域_右侧栏
  • 泉天下品牌怎么样? - mypinpai
  • 保姆级教程:用Python脚本把TT100K交通标志数据集转成YOLOv8能用的格式(附完整源码)
  • 四川称重模块技术解析:四川汽车衡地磅、四川物联网称重系统、四川电子地磅、四川称重模块、四川车牌识别称重系统、物联网称重系统选择指南 - 优质品牌商家
  • 科研工作流搭建:用PyLith+ParaView在Ubuntu上跑通第一个断层模拟(从安装到出图)
  • Node.js 路由
  • WINNER II信道模型实战:手把手教你用CDL表配置14种典型无线传播场景
  • 避开这些坑!ZYNQ裸机双网口LWIP配置的5个常见问题与调试心得
  • BetterNCM终极指南:3分钟打造个性化网易云音乐播放器