初識Uniprot API

Uniprot,全名Universal Protein,其整合了Swissprot、TrEMBL和PRI-PSD三大數據庫,是目前使用很是普遍的蛋白質數據庫git

常規物種的蛋白質組學研究通常會使用Uniprot數據庫的蛋白序列做爲查庫序列,所以蛋白組學的結果常以uniprot ID做爲識別ID,並且Uniprot數據庫還與其餘公共庫進行了關聯,豐富了蛋白相關的信息github

這裏主要是對Uniprot的API進行一個小結。以前略微瞭解過KEGG的API,能很是方便的經過URL以及編程命令輕鬆訪問KEGG數據庫獲取所須要的信息,Uniprot API也有相同的功能數據庫

根據個人使用,我以爲Uniprot的API的使用能夠分爲三個部分:編程

  1. 獲取單個蛋白ID(uniprot accession id)所對應的全部信息
  2. ID mapping的API
  3. 查詢訪問性質的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-searchhttp://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我的以爲功能仍是蠻好使的,值得記錄下來

相關文章
相關標籤/搜索