基因注释难?网页爬虫与Bioconductor!
前言
利用Bioconductor包进行注释
不同的芯片平台在Bioconductor中可对应不同的注释包,此处以鼻咽癌芯片数据GSE13597为例,芯片平台是GPL96,对应的Bioconductor包是hgu133a.db。
#安装R包
source("http://bioconductor.org/biocLite.R")
biocLite("AnnotationDbi")
biocLite("hgu133a.db")
#加载R包
library(AnnotationDbi)
library(hgu133a.db)
#读入前言中的结果
genes<-read.csv("D:/tongjizixun_1.csv",stringsAsFactors=F)
#根据基因探针,查找SYMBOL(基因名)、GENENAME(基因名全称)以及常用的ENTREZID(Entrezgene数据库编号)、ENSEMBL(ENSEMBL数据库编号),并存入数据框anno
anno<-select(hgu133a.db,keys=genes$PROBEID, columns=c("SYMBOL", "ENTREZID", "GENENAME","ENSEMBL"), keytype="PROBEID")
#查看结果
head(anno)
利用网页爬虫进行抓取注释信息
利用上述Bioconductor包我们发现可提取的信息较为限定,假设我们要提取更多的信息如GeneType,甚至summary(具体描述)等,可利用rvest包进行爬虫抓取。此方法适用于已知“SYMBOL”信息的情况,以下简介之。
打开GEO数据库检索“SYMBOL”如SOX4(ENTRZID=6659,即上述结果中的第3行),我们可以发现NCBI对于基因页面的索引方式都是:https://www.ncbi.nlm.nih.gov/gene/加ENTRZID 的格式
页面中Official Symbol、OfficialFull Name等信息即是我们想抓取的内容,首先我们需要知道这些信息在网页中的节点,点击F12打开网页开发者工具(本文为Chrome浏览器),将位置依次定位到Official Full Name等信息,我们发现这些信息节点在*#summaryDl>dd中,于是可整体抓取*#summaryDl>dd再进行选取。
同样以鼻咽癌芯片数据GSE13597(芯片平台是GPL96)为例,此前经差异基因挖掘,选取其中10个在鼻咽癌组织中表达下调的基因。
#首先加载需要用到的包
library(clusterProfiler)
library(rvest)
library(stringr)
#读取数据
genes<-read.csv("D:/tongjizixun_2.csv", stringsAsFactors=F)
#利用clusterProfiler包bitr函数将SYMBOL转换为ENTREZID
genes<- bitr(genes$SYMBOL, fromType="SYMBOL", toType="ENTREZID", OrgDb="org.Hs.eg.db")
#生成各个基因对应的网页
genes$NCBI_url<- paste("https://www.ncbi.nlm.nih.gov/gene/", genes$ENTREZID, sep="")
#首先尝试单个基因的信息抓取,以第1个基因为例尝试抓取
web_1<-read_html(genes[1,"NCBI_url"])
anno=web_1 %>%html_nodes("*#summaryDl>dd") %>% html_text() %>%str_replace_all( "\n", "")
#查看anno的内容
anno
#for循环抓取所有基因信息(假设需提取基因名、GeneType、HGNC_ID)
for(i in 1:nrow(genes)){
web<-read_html(genes[i,"NCBI_url"])
cat("获得网页\t")
anno_all=web %>% html_nodes("*#summaryDl>dd") %>% html_text() %>% str_replace_all( "\n", "")
genes[i,"FullName"]<-str_replace(anno_all[2], "provided by HGNC", "")
cat("写入FullName\t")
genes[i,"GeneType"]<-anno_all[5]
cat("写入GeneType\t")
genes[i,"HGNC_ID"]<-str_replace(anno_all[3], "HGNC:HGNC:", "")
cat("写入HGNC_ID\t")
print(paste("完成第", i, "个"))
}
#运行结果如下
最终输出结果如下:
▼扫码赞赏▼