初识Uniprot API
Uniprot,全名Universal Protein,其整合了Swissprot、TrEMBL和PRI-PSD三大数据库,是目前使用非常广泛的蛋白质数据库
常规物种的蛋白质组学研究一般会使用Uniprot数据库的蛋白序列作为查库序列,因此蛋白组学的结果常以uniprot ID作为识别ID,而且Uniprot数据库还与其他公共库进行了关联,丰富了蛋白相关的信息
这里主要是对Uniprot的API进行一个小结。之前略微了解过KEGG的API,能非常方便的通过URL以及编程命令轻松访问KEGG数据库获取所需要的信息,Uniprot API也有相同的功能
根据我的使用,我觉得Uniprot的API的使用可以分为三个部分:
- 获取单个蛋白ID(uniprot accession id)所对应的所有信息
- ID mapping的API
- 查询访问性质的API
第一部分
可以理解为访问Uniprot数据的一个小技巧,虽然不是很实用,但是有时还是可以凑合用用的,可以粗略认为是通过编辑URL来访问数据库
如:我想获取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个人觉得功能还是蛮好使的,值得记录下来
初识Uniprot API的更多相关文章
- 初识restful api接口
一.restful api接口举例 实现功能 传统方式 restful方式 url HTTP方法 url HTTP方法 查询 /user/query?name=knyel GET /user?name ...
- 【ASP.NET Web API2】初识Web API
Web Api 是什么? MSDN:ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务 百度百科:Web API是网络应用程序接口. ...
- ASP.NET Web API 2系列(一):初识Web API及手动搭建基本框架
1.导言 随着Web技术的发展,现在各种框架,前端的,后端的,数不胜数.全栈工程师的压力越来越大. PC端,pad端,移动端App(安卓/IOS)的发展,使得前后端一体的开发模式十分笨重.因此,前后端 ...
- 初识web API接口及Restful接口规范
一.web API接口 什么是web API接口?: 明确了请求方式,提供对应后台所需参数,请求url链接可以得到后台的响应数据 url : 返回数据的url https://api.map.baid ...
- 初识 RESTful API规范
简介 一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. rest是一种 ...
- 初识Stream API + Lambda表达式
使用新特性简化代码,增强可读性 package com.gg.java8; import java.util.*; import org.junit.Test; public class TestLa ...
- [整理]ASP.NET WEB API 2学习
目录 1 快速入门 1.1实例 1.1.1初识WEB API 2 1.1.2 Action Results 的改变 1.1.3 路由的新增特性 1.1.4 消息管道的变化 1.1.4.1 HttpMe ...
- ASP.NET Web API 2系列(三):查看WebAPI接口的详细说明及测试接口
引言 前边两篇博客介绍了Web API的基本框架以及路由配置,这篇博客主要解决在前后端分离项目中,为前端人员提供详细接口说明的问题,主要是通过修改WebApi HelpPage相关代码和添加WebAp ...
- DBA面对新mysql环境
来源:http://blog.csdn.net/wyzxg/article/details/8491152 author:skatetime:2013/01/10 DBA面对新MySQL环境感悟 1. ...
随机推荐
- 170817关于AJAX的知识点
1.AJAX [1] AJAX简介 全称: Asynchronous JavaScript And XML ...
- xiugai2
<div class="myLoading"> <div class="svg-wrap"> <svg width="8 ...
- Jsoup获取DOM元素
(1)doc.getElementsByTag(String tagName); (2)doc.getElementById(String id); (3)doc.getElementsByClass ...
- vue键盘修饰符
keyup事件 <input type='input' @keyup="keyEvent"> keyup.enter事件 <input type='input' ...
- Docker 官网文档翻译汇总
官方文档地址 Guide Docker 入门 Docker 入门教程 方向和设置 容器 服务 swarm 集群 stack 部署应用 概述 用 Docker 进行开发 在 Docker 上开发应用 应 ...
- 为什么有mac地址还学要有IP地址??
历史原因:早期的以太网只有集线器 ,没有交换机,所以发出去的包能被以太网内的所有机器监听到,因此要附带上MAC地址,每个机器只需要接受与自己MAC地址相匹配的包. 个人感觉上面的说法并不是太准确.找明 ...
- JS对象—字符串总结(创建、属性、方法)
1.创建字符串 1.1 new String(s) String和new一起使用,创建的是一个字符串对象,存放的是字符串s的表示. 1.2 String(s) ...
- cts-verifier测试流程
测试目的: cts的补充测试,可以理解为没法自动化的cts测试,这个是人工测试. 测试前提: 1.发货user版本 2.selinux:Enable 5.外网环境 设备需求: 2个待测设备:1个手机或 ...
- 【ABAP系列】SAP 后台JOB如何DEBUG
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 后台JOB如何DEBUG ...
- 【报错】An error happened during template parsing (template: "class path resource [templates/adminManageCourse.html]")
页面显示: Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing t ...