Uniprot,全名Universal Protein,其整合了Swissprot、TrEMBL和PRI-PSD三大数据库,是目前使用很是普遍的蛋白质数据库git
常规物种的蛋白质组学研究通常会使用Uniprot数据库的蛋白序列做为查库序列,所以蛋白组学的结果常以uniprot ID做为识别ID,并且Uniprot数据库还与其余公共库进行了关联,丰富了蛋白相关的信息github
这里主要是对Uniprot的API进行一个小结。以前略微了解过KEGG的API,能很是方便的经过URL以及编程命令轻松访问KEGG数据库获取所须要的信息,Uniprot API也有相同的功能数据库
根据个人使用,我以为Uniprot的API的使用能够分为三个部分:编程
- 获取单个蛋白ID(uniprot accession id)所对应的全部信息
- ID mapping的API
- 查询访问性质的API
第一部分api
能够理解为访问Uniprot数据的一个小技巧,虽然不是很实用,可是有时仍是能够凑合用用的,能够粗略认为是经过编辑URL来访问数据库app
如:我想获取Q9UM73这个蛋白的fasta序列,那么用下面这个URL便可编程语言
http://www.uniprot.org/uniprot/Q9UM73.fasta
若是想获取Q9UM73这个蛋白的全面信息,能够有如下形式展现:txt,xml以及GFF函数
http://www.uniprot.org/uniprot/Q9UM73.txt http://www.uniprot.org/uniprot/Q9UM73.xml http://www.uniprot.org/uniprot/Q9UM73.GFF
至于这个URL怎么用呢,能够经过perl/R(我如今只会这两个。。。)以访问网页的形式将上述URL的内容抓下来,perl的话用内置的get()
函数便可,R的话用RCurl
包;经过这个方法咱们能够批量下载蛋白信息,避免手动去Uniprot网页上下载这一过程(虽然其网页操做作的很人性化,简单易操做)学习
第二部分大数据
则是Uniprot的idmapping功能对应的API,这是我以为在Uniprot中最好用的功能之一,对于这个API,Uniprot特别还对其用法进行的实例讲解,如http://www.uniprot.org/help/api_idmapping
从网页上咱们就能看到Uniprot对于这个API的使用给了4种编程语言的例子,有Perl,Python,Ruby和Java,很惋惜我只会第一种;点击便可查看例子,以Perl代码来讲,其主要经过LWP::UserAgent模块对Uniprot这个API发送访问请求,基本原来就是爬虫,而后返回信息;只要按照其代码,模仿的写一下就能使用的,这里再也不详细说明了
可是我更想了解如何用R来实用上述功能,虽然Uniprot没有给出R语言的例子,可是只要是基于爬虫的,R也是能实现的;惋惜至今为止,我还未学习用R爬虫来抓取信息,因此只好求助于Github上的有无大神分享过相关代码,结果还真让我找到一个:https://github.com/sehanson/Uniprot_API_R/blob/master/Uniprot_API,代码简洁易懂,很是棒!
library(httr) e_mail <- '' #Enter your email address here to help hosts troubleshoot issues us_er <- paste0('R ', e_mail) acc1 <- '' #Enter the starting accession id (e.g. 'ACC' for Uniprot accession) acc2 <- '' #Enter the target accession id (e.g. 'HPA_ID' for Human Protein Atlas accession) fmt <- '' #Enter format (e.g. 'tab' for TSV) qry <- '' #Enter query term user_agent(us_er) r <- POST('http://www.uniprot.org/uploadlists/', body = list(from= acc1, to = acc2, format = fmt, query = qry), encode = "form") print(r)
从上述代码中能够看到是使用httr
包按照必定格式发送访问请求,而后返回数据;其返回的r变量是response格式,没法直接解读的,我也粗略找了下,先使用httr
包的content()
函数范围r变量中的内容,而后再使用readr
包中的read_tsv()
函数便可对上述数据解读为数据库形式
a <- content(r, type = "text") b <- read_tsv(a)
不只会使用代码,并且还需了解Uniprot这个API提供了哪些功能,全部ID mapping的功能可见网站http://www.uniprot.org/help/api_idmapping下面的表格,其展现了全部能进行的ID转化(其实也就是这个网址http://www.uniprot.org/uploadlists/下所对应的全部功能)
通常来讲咱们是但愿找出accession id所对应的其余数据库的ID,如:想将找出P31946和P62258这个两个蛋白对应的KEGG数据的K号,那么代码以下所示
e_mail <- 'gukai1212@163.com' #Enter your email address here to help hosts troubleshoot issues us_er <- paste0('R ', e_mail) acc1 <- 'ACC' #Enter the starting accession id (e.g. 'ACC' for Uniprot accession) acc2 <- 'KO_ID' #Enter the target accession id (e.g. 'HPA_ID' for Human Protein Atlas accession) fmt <- 'tab' #Enter format (e.g. 'tab' for TSV) qry <- "P31946,P62258" #Enter query term user_agent(us_er) r <- POST('http://www.uniprot.org/uploadlists/', body = list(from= acc1, to = acc2, format = fmt, query = qry), encode = "form") a <- content(r, type = "text") b <- read_tsv(a)
结果以下:
# A tibble: 2 x 2 From To <chr> <chr> 1 P31946 K16197 2 P62258 K06630
其余ID的转化也是相似的,可是每次只支持一类ID转化为另外一类ID,不支持一类转化为多类;但整体上仍是蛮实用的,可以批量的进行ID转化,并且能写入其余程序和脚本中,只要能爬虫的编程语言都能实现其功能
第三部分
我的以为其功能很是强大,能够先看几个Uniprot给的例子http://www.uniprot.org/help/api_queries
从其例子上可看出,这个API覆盖了Unirpot查询的全部功能,只要你懂得起URL的规则,就能够定制出你所想要的结果对应的URL
上述网站给出了URL书写的格式,最主要的就是query,format和columns,对于query可包含的内容,又能够分出好多个fields,如http://www.uniprot.org/help/text-search和http://www.uniprot.org/help/query-fields
对于columns可包含的内容,能够查看http://www.uniprot.org/help/uniprotkb_column_names
若是你须要查询的信息来自外部数据库,Uniprot也是支持的,具体数据库信息能够查看http://www.uniprot.org/database/
我也是花了很多时间才搞清楚了点,信息量仍是蛮大的。好比我一个比较简单的需求,想列出全部Uniprot数据库中全部人类swissprot蛋白对应的KEGG的K号和GOid,那么URL则能够这样写:
http://www.uniprot.org/uniprot/?query=organism:9606&format=tab&columns=id,reviewed,database(KO),go-id
获取URL后,咱们就能够用脚本将内容从网页上抓下来,好比R的话,仍是用RCurl
包(由于我暂时只会这个。。。)
library(RCurl) library(readr) url.exists(http://www.uniprot.org/uniprot/?query=organism:9606&format=tab&columns=id,reviewed,database(KO),go-id) d <- debugGatherer() tmp <- getURL(url="http://www.uniprot.org/uniprot/?query=organism:9606&format=tab&columns=id,reviewed,database(KO),go-id", debugfunction = d$update, verbose = TRUE) tmp2 <- read_tsv(tmp)
查看下结果(GOID数目有点多,这里没显示出来。。。)
> head(tmp2) # A tibble: 6 x 4 Entry Status `Cross-reference (KO)` <chr> <chr> <chr> 1 P62258 reviewed K06630; 2 Q04917 reviewed K16198; 3 P27348 reviewed K16197; 4 P30443 reviewed K06751; 5 P04439 reviewed <NA> 6 P01889 reviewed K06751; # ... with 1 more variables: `Gene ontology IDs` <chr>
总之,Uniprot的API我的以为功能仍是蛮好使的,值得记录下来