Uniprot,全名Universal Protein,其整合了Swissprot、TrEMBL和PRI-PSD三大数据库,是目前使用非常广泛的蛋白质数据库

常规物种的蛋白质组学研究一般会使用Uniprot数据库的蛋白序列作为查库序列,因此蛋白组学的结果常以uniprot ID作为识别ID,而且Uniprot数据库还与其他公共库进行了关联,丰富了蛋白相关的信息

这里主要是对Uniprot的API进行一个小结。之前略微了解过KEGG的API,能非常方便的通过URL以及编程命令轻松访问KEGG数据库获取所需要的信息,Uniprot API也有相同的功能

根据我的使用,我觉得Uniprot的API的使用可以分为三个部分:

  1. 获取单个蛋白ID(uniprot accession id)所对应的所有信息
  2. ID mapping的API
  3. 查询访问性质的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个人觉得功能还是蛮好使的,值得记录下来

转载于:https://www.cnblogs.com/wangshicheng/p/11172276.html

初识Uniprot API相关推荐

  1. Redis开发与运维笔记_1 初识2 API

    目录 概述 第1章 初识Redis 1.1 盛赞Redis 1.2 Redis特性 1.3 配置.启动.操作.关闭Redis 第2章 API的理解和使用 2.1 预备 2.1.1 全局命令 2.1.2 ...

  2. 1、初识Server API for JavaScript

    先看看官方帮助上的英文: If you want to embed lightweight mapping functionality into a Web application, or if yo ...

  3. 初识 RESTful API规范

    简介 一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. rest是一种 ...

  4. 【ASP.NET Web API2】初识Web API

    Web Api 是什么? MSDN:ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务 百度百科:Web API是网络应用程序接口. ...

  5. 什么样的代码是好代码_什么使好代码3 7

    什么样的代码是好代码 原则守则(A code of principles) This is the third section of an article about code practices. ...

  6. Uniport数据库介绍与使用

      Uniprot (Universal Protein )是包含蛋白质序列,功能信息,研究论文索引的蛋白质数据库,整合了包括EBI( European Bioinformatics Institut ...

  7. 百度人工智能API的调用_微信小程序。

    微信小程序–智能接口 通过微信小程序开发调用百度人工智能接口,从而实现很多有趣的功能. 文章目录 微信小程序--智能接口 前言 一.百度智能云的认识 1-1 注册 1-2 页面说明 1-3 功能初识 ...

  8. react生命周期函数_如何优雅的消灭掉react生命周期函数

    开源不易,感谢你的支持,❤ star concent^_^ 序言 在react应用里,存在一个顶层组件,该组件的生命周期很长,除了人为的调用unmountComponentAtNode接口来卸载掉它和 ...

  9. python 病毒 基因_#Python#提取基因对应的蛋白质名

    提取基因对应的蛋白质官方名 最开始,是需要将基因跟其编码的蛋白质对应起来,找遍了各种数据库都没发现有相关的注释文件,Uniprot作为处理蛋白质的大佬,结果里都有,肯定有办法能够满足需求. 搜索TP5 ...

最新文章

  1. 半导体基础知识(1):材料和器件
  2. eax ax ah al
  3. 20180724 (面向对象:类的命名空间和查询顺序丶组合)
  4. java类验证和装载顺序_JVM类加载过程分析及验证
  5. Why product sales area is not replicated to CRM
  6. Day47 Django基础部分、路由配置、空间名称
  7. android震动服务能设置时长么,Android实现手机振动设置的方法
  8. 漫谈Servlet(一)
  9. pymysql安装_pymysql 模块简单使用
  10. linux 循环缓冲区 源码,Linux中的循环缓冲区
  11. git 中文文件名乱码
  12. 集训模拟赛改题及总结(7月part)
  13. chrome浏览器 Adobe Flash 版本太旧 无法播放视频解决办法
  14. [摘]广义企业级PDM系统下的PPM(工艺规划管理)
  15. DDSM 数据集格式转换 LJPEG to PNG
  16. graphpad图片怎么导出矢量图_Graphpad Prism 8如何绘制生存曲线
  17. 嘿,飞哥(F.R.E.C.O)!不一般的云联盟
  18. 四、字符编码:ascii、gbk、Unicode、utf-8
  19. 【总结,持续更新】java常见的线程不安全,你以为的线程安全
  20. 值得看三次的高干文_值得看三次的高干文12部

热门文章

  1. 3000元台式电脑组装配置单2022 3000元组装电脑配置推荐2022
  2. ESP8266 AP模式建立服务器
  3. cloudreve 开源私有网盘(带离线下载)
  4. STKMATLAB connect(四)卫星
  5. linux创建两块20G的磁盘,Linux 创建及扩展逻辑卷
  6. 学习笔记 C++ 动态数组类的声明
  7. java实现生成SVG格式的二维码
  8. 各个网站及搜索引擎收录地址大全
  9. 2021-03-22 什么是SFP端口
  10. 加拿大主教大学计算机世界排名,加拿大大学计算机专业排名