TCMSP数据库+R语言实战:从网页爬虫到中药-靶点网络图的全流程解析
TCMSP数据库R语言实战从网页爬虫到中药-靶点网络图的全流程解析在生物信息学和中医药现代化研究的交叉领域数据科学正扮演着越来越重要的角色。TCMSPTraditional 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?qrFolium%20Artemisiae%20Argyi, Dangshen https://tcmsp-e.com/tcmspsearch.php?qrCodonopsis%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) }