前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >可能是个生物信息学数据超市吧

可能是个生物信息学数据超市吧

作者头像
生信技能树
发布2018-03-05 16:06:09
1.8K0
发布2018-03-05 16:06:09
举报
文章被收录于专栏:生信技能树

biomaRt这个包很久以前我就给它写过教程(点击阅读),但是排版不好,可读性很差,所以我用R Markdown重新来一个。 当然了,它本身有官方的英文版教程(点击阅读),我在翻译的基础上面,加入了自己的理解, 下面是正文:

biomaRt是一个超级网络资源库,里面的信息非常之多,就是网页版的biomaRt的R语言接口。谷歌搜索 the biomart user’s guide filetype:pdf 这个关键词,就看到关于这个包的详细介绍以及例子,我这里简单总结一下它的用法。

包的安装

Bioconductor系列包的安装方法都一样

代码语言:javascript
复制
source("http://bioconductor.org/biocLite.R")
biocLite(“biomaRt”)
install.packages('DT')

选择数据库

然后我们就可以加载这个包来看看它的一些性质啦,大家也可以根据这个包的说明书里面的代码一行行代码敲进去看看效果,这样学习最快也最容易记住。

代码语言:javascript
复制
library("biomaRt")
library(DT)
listMarts() #看看有多少数据库资源
代码语言:javascript
复制
##                biomart               version
## 1 ENSEMBL_MART_ENSEMBL      Ensembl Genes 91
## 2   ENSEMBL_MART_MOUSE      Mouse strains 91
## 3     ENSEMBL_MART_SNP  Ensembl Variation 91
## 4 ENSEMBL_MART_FUNCGEN Ensembl Regulation 91
代码语言:javascript
复制
ensembl=useMart("ENSEMBL_MART_ENSEMBL")
all_datasets <- listDatasets(ensembl) #看看选择的数据库里面有多少数据表,这个跟物种相关
library(DT)
datatable(all_datasets, options = list(
  searching = FALSE,
  pageLength = 5,
  lengthMenu = c(5, 10, 15, 20)
))
代码语言:javascript
复制
ensembl = useDataset("hsapiens_gene_ensembl",mart=ensembl)
# 这是一步法选择人类的ensembl数据库代码.
ensembl = useMart("ENSEMBL_MART_ENSEMBL",dataset="hsapiens_gene_ensembl")

三个主要函数getBM,getSequence,getLDS

我们选择好了数据库就要开始干活啦,这个数据库的检索主要是三个函数getBM,getSequence,getLDS, 其中getBM这个函数可以部分用select语句替代。

首先我们讲讲getBM函数,它就四个参数。

  • filter来控制根据什么东西来过滤,可是不同数据库的ID,也可以是染色体定位系统坐标
  • Attributes来控制我们想获得什么,一般是不同数据库的ID
  • Values是我们用来检索的关键词向量
  • Mart是我们前面选择好的数据库,一般都是ensembl = useMart(“ensembl”,dataset=“hsapiens_gene_ensembl”)

getBM函数唯一的用处,就是做各种ID转换。

可以查看filter和attribute有哪些东西。

代码语言:javascript
复制
filters = listFilters(ensembl)
#filters[1:5,]
library(DT)
datatable(filters, options = list(
  searching = FALSE,
  pageLength = 5,
  lengthMenu = c(5, 10, 15, 20)
))
代码语言:javascript
复制
attributes = listAttributes(ensembl)
#attributes[1:5,]
datatable(attributes, options = list(
  searching = FALSE,
  pageLength = 5,
  lengthMenu = c(5, 10, 15, 20)
))

getSequence函数大同小异,建议大家活用help函数去查看每个函数的帮助文档。

简单讲几个例子咯: Ps:这些都是在线注释,所以都是要网络的,网速慢的会非常坑

几个实用的例子

一.对几个芯片探针的ID号,注释它所捕获的基因的entrezID

代码语言:javascript
复制
# ensembl = useMart("ensembl",dataset="hsapiens_gene_ensembl")
affyids=c("202763_at","209310_s_at","207500_at")
getBM(attributes=c('affy_hg_u133_plus_2', 'entrezgene'), 
      filters = 'affy_hg_u133_plus_2', 
      values = affyids, 
      mart = ensembl
)

可以看到结果里面已经成功的把affymetrix的芯片探针ID,转为了对应的基因的entrez ID

二.对刚才的那三个探针ID号进行多个内容注释,每个探针都对应着基因名已经染色体及起始终止坐标。

代码语言:javascript
复制
affyids=c("202763_at","209310_s_at","207500_at")
getBM(attributes=c('affy_hg_u133_plus_2', 'hgnc_symbol',  
      'chromosome_name','start_position','end_position', 'band'),
      filters = 'affy_hg_u133_plus_2', 
      values = affyids, 
      mart = ensembl
)

三.对给定的基因ID号进行GO注释

代码语言:javascript
复制
# library("biomaRt")
# ensembl = useMart("ensembl",dataset="hsapiens_gene_ensembl")
entrez=c("673","837")
goids = getBM(attributes = c('entrezgene', 'go_id'), 
              filters = 'entrezgene', 
              values = entrez, 
              mart = ensembl)
head(goids)

四.通过染色体及起始终止坐标来挑选基因

代码语言:javascript
复制
getBM(c('affy_hg_u133_plus_2','ensembl_gene_id'), 
       filters = c('chromosome_name','start','end'),
       values=list(16,1100000,1250000), 
       mart=ensembl
)

五.对特定的GO ID号来查询该go通路上面的基因是哪些。

代码语言:javascript
复制
getBM(c('entrezgene','hgnc_symbol'), filters='go', values='GO:0004707', mart=ensembl)

六.根据refseq数据库的NM系列ID号来获取信息

代码语言:javascript
复制
refseqids = c("NM_005359","NM_000546")
ipro = getBM(attributes=c("refseq_dna","interpro","interpro_description"), filters="refseq_dna",values=refseqids, mart=ensembl)

这个例子的代码有错误,因为refseq的信息没有 refseq_dna Error in getBM(attributes = c(“refseq_dna”, “interpro”, “interpro_description”), : Invalid attribute(s): refseq_dna Please use the function ‘listAttributes’ to get valid attribute names 我简单检查了一下,发现需要更正为 refseq_mrna

代码语言:javascript
复制
tmp=listAttributes(ensembl)
grep("refseq",tmp[,1])
代码语言:javascript
复制
## [1] 82 83 84 85 86 87
代码语言:javascript
复制
# [1] 81 82 83 84 85 86
tmp[grep("refseq",tmp[,1]),]
代码语言:javascript
复制
##                        name                 description         page
## 82              refseq_mrna              RefSeq mRNA ID feature_page
## 83    refseq_mrna_predicted    RefSeq mRNA predicted ID feature_page
## 84             refseq_ncrna             RefSeq ncRNA ID feature_page
## 85   refseq_ncrna_predicted   RefSeq ncRNA predicted ID feature_page
## 86           refseq_peptide           RefSeq peptide ID feature_page
## 87 refseq_peptide_predicted RefSeq peptide predicted ID feature_page

很明显,是没有 refseq_dna 的,只有 refseq_mrna

然后我用了新的代码

代码语言:javascript
复制
refseqids = c("NM_005359","NM_000546")
ipro = getBM(attributes=c("refseq_mrna","interpro","interpro_description"), filters="refseq_mrna",values=refseqids, mart=ensembl)
ipro
代码语言:javascript
复制
##    refseq_mrna  interpro
## 1    NM_000546 IPR002117
## 2    NM_000546 IPR008967
## 3    NM_000546 IPR010991
## 4    NM_000546 IPR011615
## 5    NM_000546 IPR012346
## 6    NM_000546 IPR013872
## 7    NM_005359 IPR001132
## 8    NM_005359 IPR003619
## 9    NM_005359 IPR008984
## 10   NM_005359 IPR013019
## 11   NM_005359 IPR013790
## 12   NM_005359 IPR017855
##                                      interpro_description
## 1                            p53 tumour suppressor family
## 2              p53-like transcription factor, DNA-binding
## 3                             p53, tetramerisation domain
## 4                                 p53, DNA-binding domain
## 5  p53/RUNT-type transcription factor, DNA-binding domain
## 6                              p53 transactivation domain
## 7                               SMAD domain, Dwarfin-type
## 8                            MAD homology 1, Dwarfin-type
## 9                                         SMAD/FHA domain
## 10                                      MAD homology, MH1
## 11                                                Dwarfin
## 12                                       SMAD domain-like

就成功的完成了转换

七.根据基因的entrez ID号来挑选该基因的指定上下游区域信息或者蛋白序列

代码语言:javascript
复制
entrez=c("673","7157","837")
getSequence(id = entrez, type="entrezgene",seqType="coding_gene_flank",upstream=100, mart=ensembl)
代码语言:javascript
复制
##                                                                                      coding_gene_flank
## 1 CCTCCGCCTCCGCCTCCGCCTCCGCCTCCCCCAGCTCTCCGCCTCCCTTCCCCCTCCCCGCCCGACAGCGGCCGCTCGGGCCCCGGCTCTCGGTTATAAG
## 2 CACGTTTCCGCCCTTTGCAATAAGGAAATACATAGTTTACTTTCATTTTTGACTCTGAGGCTCTTTCCAACGCTGTAAAAAAGGACAGAGGCTGTTCCCT
## 3 TCCTTCTCTGCAGGCCCAGGTGACCCAGGGTTGGAAGTGTCTCATGCTGGATCCCCACTTTTCCTCTTGCAGCAGCCAGACTGCCTTCCGGGTCACTGCC
##   entrezgene
## 1        673
## 2        837
## 3       7157

这样就得到了三条序列,是给定基因的上游100bp序列 coding_gene_flank entrezgene

其实这个getSequence函数还有非常多的用法,当然主要的变化在其readme上面可以看到,主要是seqType可以有多个选择。

代码语言:javascript
复制
utr5 = getSequence(chromosome=3, start=185514033, end=185535839,
  type="entrezgene",seqType="5utr", mart=ensembl)
utr5
代码语言:javascript
复制
##                                                                                                                                             5utr
## 1                                                                                                                           Sequence unavailable
## 2 AGTCCCTAGGGAACTTCCTGTTGTCACCACACCTCTGAGTCGTCTGAGCTCACTGTGAGCAAAATCCCACAGTGGAAACTCTTAAGCCTCTGCGAAGTAAATCATTCTTGTGAATGTGACACACGATCTCTCCAGTTTCCAT
## 3                                                        TGAGCAAAATCCCACAGTGGAAACTCTTAAGCCTCTGCGAAGTAAATCATTCTTGTGAATGTGACACACGATCTCTCCAGTTTCCAT
## 4                                                                                                        ATTCTTGTGAATGTGACACACGATCTCTCCAGTTTCCAT
##   entrezgene
## 1     200879
## 2     200879
## 3     200879
## 4     200879
代码语言:javascript
复制
#这样就查询到了 chromosome=3, start=185514033, end=185535839,这个定位里面的所有utr5信息。
# 返回的urt5这个对象是一个data.frame,可以用exportFASTA()函数导出成fasta文件。
protein = getSequence(id=c(100, 5728),type="entrezgene",
  seqType="peptide", mart=ensembl)
protein
代码语言:javascript
复制
##                                                                                                                                                                                                                                                                                                                                                                                                                peptide
## 1                                                                                                                                                                                                                                                                                                                                         MAQTPAFDKPKVELHVHLDGSIKPETILYYGRRRGIALPANTAEGLLNVIGMDKPLTLPDFLAKFDYYMPAIARL*
## 2                                                                                                                                                                                                                                                                                                                                                                                                 Sequence unavailable
## 3                                                                                                                                                                                                                                                           ALLFHKMMFETIPMFSGGTCNPQFVVCQLKVKIYSSNSGPTRREDKFMYFEFPQPLPVCGDIKVEFFHKQNKMLKKDKMFHFWVNTFFIPGPEETSEKVENGSLCDQEIDSICSIERADNDKEYLVLTLTKNDLDKANKDKANRYFSPNFKVS*
## 4                                                                 MAQTPAFDKPKVELHVHLDGSIKPETILYYGRRRGIALPANTAEGLLNVIGMDKPLTLPDFLAKFDYYMPAIAGCREAIKRIAYEFVEMKAKEGVVYVEVRYSPHLLANSKVEPIPWNQAEGDLTPDEVVALVGQGLQEGERDFGVKARSILCCMRHQPNWSPKVVELCKKYQQQTVVAIDLAGDETIPGSSLLPGHVQAYQAVDILKTERLGHGYHTLEDQALYNRLRQENMHFEICPWSSYLTGAWKPDTEHAVIRLKNDQANYSLNTDDPLIFKSTLDTDYQMTKRDMGFTEEEFKRLNINAAKSSFLPEDEKRELLDLLYKAYGMPPSASAGQNL*
## 5                                                                                                                                             MAQTPAFDKPKVELHVHLDGSIKPETILYYGRRRGIALPANTAEGLLNVIGMDKPLTLPDFLAKFDYYMPAIAGCREAIKRIAYEFVEMKAKEGVVYVEVRYSPHLLANSKVEPIPWNQAEGDLTPDEVVALVGQGLQEGERDFGVKARSILCCMRHQPNWSPKVVELCKKYQQQTVVAIDLAGDETIPGSSLLPGHVQAYQEAVKSGIHRTVHAGEVGSAEVVKEAVDILKTERLGHGYHTLEDQALYNRLRQENMHFEAQK*
## 6                                                                                                                                                                                                                                                                                                                                                                                                 Sequence unavailable
## 7                                         MAQTPAFDKPKVELHVHLDGSIKPETILYYGRRRGIALPANTAEGLLNVIGMDKPLTLPDFLAKFDYYMPAIAGCREAIKRIAYEFVEMKAKEGVVYVEVRYSPHLLANSKVEPIPWNQAEGDLTPDEVVALVGQGLQEGERDFGVKARSILCCMRHQPNWSPKVVELCKKYQQQTVVAIDLAGDETIPGSSLLPGHVQAYQEAVKSGIHRTVHAGEVGSAEVVKEAVDILKTERLGHGYHTLEDQALYNRLRQENMHFEICPWSSYLTGAWKPDTEHAVIRLKNDQANYSLNTDDPLIFKSTLDTDYQMTKRDMGFTEEEFKRLNINAAKSSFLPEDEKRELLDLLYKAYGMPPSASAGQNL*
## 8 MTAIIKEIVSRNKRRYQEDGFDLDLTYIYPNIIAMGFPAERLEGVYRNNIDDVVRFLDSKHKNHYKIYNLCAERHYDTAKFNCRVAQYPFEDHNPPQLELIKPFCEDLDQWLSEDDNHVAAIHCKAGKGRTGVMICAYLLHRGKFLKAQEALDFYGEVRTRDKKGVTIPSQRRYVYYYSYLLKNHLDYRPVALLFHKMMFETIPMFSGGTCNPQFVVCQLKVKIYSSNSGPTRREDKFMYFEFPQPLPVCGDIKVEFFHKQNKMLKKDKMFHFWVNTFFIPGPEETSEKVENGSLCDQEIDSICSIERADNDKEYLVLTLTKNDLDKANKDKANRYFSPNFKVKLYFTKTVEEPSNPEASSSTSVTPDVSDNEPDHYRYSDTTDSDPENEPFDEDQHTQITKV*
##   entrezgene
## 1        100
## 2        100
## 3       5728
## 4        100
## 5        100
## 6       5728
## 7        100
## 8       5728
代码语言:javascript
复制
#这样就查到了这两个基因转录本的所有蛋白序列,100这个基因有5条序列,5728这个基因有四条序列。

getSequence函数返回的对象是一个data.frame,可以用exportFASTA()函数导出成fasta文件。

八,选择其它数据库来进行查询,比如snp数据库

当然还有一些数据库的小技巧,第一个是参数 archive = TRUE,设置只用能获取的数据库

然后是设置特定选取hg19对应的信息。

代码语言:javascript
复制
ensembl = useMart("ensembl_mart_46", dataset="hsapiens_gene_ensembl", archive = TRUE)
代码语言:javascript
复制
listMarts(host='may2009.archive.ensembl.org')
ensembl54=useMart(host='may2009.archive.ensembl.org', biomart='ENSEMBL_MART_ENSEMBL')
ensembl54=useMart(host='may2009.archive.ensembl.org', biomart='ENSEMBL_MART_ENSEMBL', dataset='hsapiens_gene_ensembl')

还可以选取其它物种,比如秀丽隐杆线虫

下面这个代码是过时了的,你们需要自己去看说明书找到现在最新的代码

代码语言:javascript
复制
wormbase=useMart("WS220",dataset="wormbase_gene")
listFilters(wormbase)
listAttributes(wormbase)
getBM(attributes = c("public_name","rnai","rnai_phenotype_phenotype_label"),
filters="gene_name", values=c("unc-26","his-33"),
mart=wormbase)

写在最后

最后我简单提一下select函数是如何部分替代getBM函数的,因为biomaRt是在线数据库,本来只能用它自己的getBM系列函数,但是为了对接其它bioconductor系列包,也可以用select函数来操作这个在线数据库。

代码语言:javascript
复制
mart<-useMart("ENSEMBL_MART_ENSEMBL",dataset="hsapiens_gene_ensembl")
head(keytypes(mart), n=3) 
代码语言:javascript
复制
## [1] "affy_hc_g110"        "affy_hg_focus"       "affy_hg_u133_plus_2"
代码语言:javascript
复制
length(keytypes(mart))
代码语言:javascript
复制
## [1] 334
代码语言:javascript
复制
length(columns(mart))
代码语言:javascript
复制
## [1] 1918
代码语言:javascript
复制
head(columns(mart), n=3) 
代码语言:javascript
复制
## [1] "3_utr_end"   "3_utr_end"   "3_utr_start"
代码语言:javascript
复制
k = keys(mart, keytype="chromosome_name") 
head(k, n=3) 
代码语言:javascript
复制
## [1] "1" "2" "3"
代码语言:javascript
复制
k = keys(mart, keytype="chromosome_name", pattern="LRG") 
head(k, n=3) 
代码语言:javascript
复制
## character(0)
代码语言:javascript
复制
affy=c("202763_at","209310_s_at","207500_at") 
select(mart, keys=affy, columns=c('affy_hg_u133_plus_2','entrezgene'), keytype='affy_hg_u133_plus_2')
代码语言:javascript
复制
##   affy_hg_u133_plus_2 entrezgene
## 1           202763_at        836
## 2         209310_s_at        837
## 3           207500_at        838

而且这个包更新也比较频繁,所以大家如果看到比较老旧的教程,可能无法模仿,或者多年以后,你看到我这个教程,也会发现,重复不出来咯。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 包的安装
  • 选择数据库
  • 三个主要函数getBM,getSequence,getLDS
  • 几个实用的例子
    • 一.对几个芯片探针的ID号,注释它所捕获的基因的entrezID
      • 二.对刚才的那三个探针ID号进行多个内容注释,每个探针都对应着基因名已经染色体及起始终止坐标。
        • 三.对给定的基因ID号进行GO注释
          • 四.通过染色体及起始终止坐标来挑选基因
            • 五.对特定的GO ID号来查询该go通路上面的基因是哪些。
              • 六.根据refseq数据库的NM系列ID号来获取信息
                • 七.根据基因的entrez ID号来挑选该基因的指定上下游区域信息或者蛋白序列
                  • 八,选择其它数据库来进行查询,比如snp数据库
                    • 下面这个代码是过时了的,你们需要自己去看说明书找到现在最新的代码
                    • 写在最后
                    相关产品与服务
                    数据库
                    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档