生物信息学离不开数据库的使用,一般情况下,我们似乎能难使用一个数据库的全部功能,但不可否认的是,一个数据库往往隐藏着我们不知道的使用技巧,也可能我们使用过这些功能,但不够完整。所以这里我们一起探索一下数据库的使用奥秘及深度解读信息。
Ensembl数据库是一个广泛使用的生物信息学资源,主要用于提供多种物种的基因组注释和比较基因组学数据。以下是Ensembl数据库的一些关键特点:
今天我们先不聊ENSEMBL官网界面,先聊一下怎么在R中访问ENSEMBL资源,这是一个R包:BiomaRt, Bioconductor R package。BiomaRt是一个用于访问生物信息学数据库的R包,特别是 Ensembl 数据库。它提供了一个方便的接口来查询和检索基因组数据。这个 R 包可以在 Rstudio 中直接在线调用 Ensembl 数据库信息。
下载 R 包
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("biomaRt")
先解释一个词(后边会频繁用)
mart指的是一个数据库连接对象,它代表你要查询的特定 BioMart 数据库。BioMart 是一个生物信息学数据库系统,提供了访问各种生物数据的接口。
我们先举例再逐一解读参数。
获取位于人类 1 号染色体上的所有 Ensembl 基因、转录本 ID、HGNC 符号及染色体位置信息。
这里使用两个函数,useEnsembl 函数用来在线连接数据库和基因集,getBM函数用于从数据库中检索数据
library(biomaRt)
ensembl = useEnsembl(biomart="ensembl", dataset="hsapiens_gene_ensembl")
chr1_genes <- getBM(attributes=c('ensembl_gene_id',
'ensembl_transcript_id',
'hgnc_symbol','chromosome_name',
'start_position',
'end_position'),
filters = 'chromosome_name',
values ="1",
mart = ensembl
)
library(biomaRt)*用于加载biomaRt包,确保可以使用其功能来访问生物数据库。useEnsembl(biomart="ensembl", dataset="hsapiens_gene_ensembl")函数用于连接到Ensembl数据库,指定了使用人类基因数据集hsapiens_gene_ensembl*。'ensembl_gene_id'*:Ensembl基因ID。'ensembl_transcript_id'*:Ensembl转录本ID。'hgnc_symbol'*:HGNC基因符号。'chromosome_name'*:染色体名称。'start_position'*:基因起始位置。'end_position'*:基因结束位置。getBM()*函数用于从Ensembl数据库检索数据。attributes
参数指定了要检索的字段,包括:filters*参数用于指定过滤条件,这里是按染色体名称过滤。values*参数指定过滤值,这里是染色体1。mart参数指定使用的数据库连接对象,即之前创建的ensembl*。chr1_genes*变量中,包含染色体1上的基因信息。"useEnsembl"函数允许通过指定 BioMart 和数据集参数连接到 Ensembl 网站的 mart。例如,要连接到 Ensembl 实时基因 mart 的人类数据集。
ensembl = useEnsembl(biomart="ensembl", dataset="hsapiens_gene_ensembl")
其中biomart是想要连接的 BioMart 数据库名称。可以使用 listEnsembl 函数检索可能的数据库名称。
也可以直接网页进入数据库 https://www.ensembl.org/biomart/martview ,这个网页版使用可以以后再聊。
运行"listEnsembl"函数
> library(biomaRt)
> listEnsembl()
biomart version
1 genes Ensembl Genes 113
2 mouse_strains Mouse strains 113
3 snps Ensembl Variation 113
4 regulation Ensembl Regulation 113
可以看到有四个数据库,但是我们一般使用 biomart="ensembl", 这个一种快捷方式,等价于 biomart="genes"
通过dataset="hsapiens_gene_ensembl"可以连接自己关注的物种。
"listDatasets"函数提供给定 mart 下所有可用物种(mart 数据集)的列表
> ensembl = useEnsembl(biomart="ensembl")
> head(listDatasets(ensembl))
dataset description version
1 abrachyrhynchus_gene_ensembl Pink-footed goose genes (ASM259213v1) ASM259213v1
2 acalliptera_gene_ensembl Eastern happy genes (fAstCal1.3) fAstCal1.3
3 acarolinensis_gene_ensembl Green anole genes (AnoCar2.0v2) AnoCar2.0v2
4 acchrysaetos_gene_ensembl Golden eagle genes (bAquChr1.2) bAquChr1.2
5 acitrinellus_gene_ensembl Midas cichlid genes (Midas_v5) Midas_v5
6 amelanoleuca_gene_ensembl Giant panda genes (ASM200744v2) ASM200744v2
`````
`````
`````
77 hcomes_gene_ensembl Tiger tail seahorse genes (H_comes_QL1_v1) H_comes_QL1_v1
78 hgfemale_gene_ensembl Naked mole-rat female genes (Naked_mole-rat_maternal) Naked_mole-rat_maternal
79 hhucho_gene_ensembl Huchen genes (ASM331708v1) ASM331708v1
80 hsapiens_gene_ensembl Human genes (GRCh38.p14) GRCh38.p14
81 ipunctatus_gene_ensembl Channel catfish genes (ASM400665v3) ASM400665v3
82 itridecemlineatus_gene_ensembl Squirrel genes (SpeTri2.0) SpeTri2.0
83 jjaculus_gene_ensembl Lesser Egyptian jerboa genes (JacJac1.0) JacJac1.0
`````
`````
`````
210 vursinus_gene_ensembl Common wombat genes (bare-nosed_wombat_genome_assembly) bare-nosed_wombat_genome_assembly
211 vvulpes_gene_ensembl Red fox genes (VulVul2.2) VulVul2.2
212 xcouchianus_gene_ensembl Monterrey platyfish genes (Xiphophorus_couchianus-4.0.1) Xiphophorus_couchianus-4.0.1
213 xmaculatus_gene_ensembl Platyfish genes (X_maculatus-5.0-male) X_maculatus-5.0-male
214 xtropicalis_gene_ensembl Tropical clawed frog genes (UCB_Xtro_10.0) UCB_Xtro_10.0
可以看到截至目前 genes数据库中有214条信息。
"getBM"函数允许您通过一组 mart 过滤器和属性列表构建 BioMart 查询。说人话就是要根据什么信息(filters, values),然后提取 (attributes) 出什么信息
chr1_genes <- getBM(attributes=c('ensembl_gene_id',
'ensembl_transcript_id',
'hgnc_symbol','chromosome_name',
'start_position',
'end_position'),
filters = 'chromosome_name',
values ="1",
mart = ensembl
)
"listFilters"函数将为您提供给定 mart 和物种的可用过滤器列表
> ensembl = useEnsembl(biomart="ensembl", dataset="hsapiens_gene_ensembl")
> head(listFilters(ensembl))
name description
1 chromosome_name Chromosome/scaffold name
2 start Start
3 end End
4 band_start Band Start
5 band_end Band End
6 marker_start Marker Start
# 也可以表格形式直接查看
View(ensembl@filters)
这个例子中我们使用的filters信息就是染色体号chromosome_name, 提取染色体1,就是`values ="1"
"listAttributes"函数将提供给定 mart 和物种的可用属性列表
> ensembl = useEnsembl(biomart="ensembl", dataset="hsapiens_gene_ensembl")
> head(listAttributes(ensembl))
name description page
1 ensembl_gene_id Gene stable ID feature_page
2 ensembl_gene_id_version Gene stable ID version feature_page
3 ensembl_transcript_id Transcript stable ID feature_page
4 ensembl_transcript_id_version Transcript stable ID version feature_page
5 ensembl_peptide_id Protein stable ID feature_page
6 ensembl_peptide_id_version Protein stable ID version feature_page
# 也可以表格形式直接查看
View(ensembl@attributes)
如果上面制定了染色体1,这个就是我们需要知道染色体上基因的哪些信息:
ensembl_gene_id***:Ensembl 基因 ID,是 Ensembl 数据库中用于唯一标识每个基因的标识符。ensembl_transcript_id***:Ensembl 转录本 ID,用于唯一标识每个转录本。一个基因可以有多个转录本,这些转录本可能代表不同的剪接变体。hgnc_symbol***:HGNC 基因符号,是由人类基因命名委员会(HGNC)指定的标准化基因符号。它通常是一个简短且易于记忆的名称,用于识别已知基因。chromosome_name***:染色体名称,表示基因所在的染色体编号或字母(例如,"1" 表示染色体 1,"X" 表示 X 染色体)。start_position***:基因在染色体上的起始位置,通常以碱基对(bp)为单位表示。end_position***:基因在染色体上的结束位置,也以碱基对为单位表示。等等等等········
获取映射到人类 Ensembl 基因 ID "ENSG00000139618" 的 Ensembl 基因、转录本 ID、HGNC 符号及 Uniprot Swissprot 登录号
> library(biomaRt)
> ensembl = useEnsembl(biomart="ensembl", dataset="hsapiens_gene_ensembl")
> hgnc_swissprot <- getBM(attributes=c('ensembl_gene_id',
+ 'ensembl_transcript_id',
+ 'hgnc_symbol',
+ 'uniprotswissprot'),
+ filters = 'ensembl_gene_id',
+ values = 'ENSG00000139618',
+ mart = ensembl)
> hgnc_swissprot
ensembl_gene_id ensembl_transcript_id hgnc_symbol uniprotswissprot
1 ENSG00000139618 ENST00000544455 BRCA2 P51587
2 ENSG00000139618 ENST00000713677 BRCA2
3 ENSG00000139618 ENST00000713678 BRCA2
4 ENSG00000139618 ENST00000530893 BRCA2
5 ENSG00000139618 ENST00000666593 BRCA2
6 ENSG00000139618 ENST00000528762 BRCA2
上面解释很清楚了
ensembl也提供了网页工具https://www.ensembl.org/biomart/martview,使用原理和 R 包大概一致。
和 R 包中选择 mart 对象一样


比如我们想知道获取映射到人类 Ensembl 基因 ID "ENSG00000139618" 的 Ensembl 基因、转录本 ID、HGNC 符号及 Uniprot Swissprot 登录号

这里和 R 包中attributes 参数功能一致,但名字可能不同。


在 R 中,我们可能需要将 ENSEMBL GENE ID (例:ENSG00000139618)转换为 SYMBOL ID
(例:BRCA2)或者ENTREZ ID。那我们是不是可以生成一个的对照表,一列是 ENSEMBL ID,一列是 SYMBOL ID,一列是ENTREZ ID,或者其他。可以根据上述attributes参数 看能提取哪些信息。然后我们再去查询转换。
这里举例是替换一个counts 数据的 ENSEMBL ID 信息,列明为“name”,具体替换根据需求具体使用。
# 获得数据库中关注的 ID 信息
ensembl <- useMart("ensembl", dataset = "hsapiens_gene_ensembl")
ids <- getBM(attributes = c("ensembl_gene_id",
"hgnc_symbol",
"entrezgene_id"),
mart = ensembl)
# 修改列名
colnames(ids) <- c("ENSEMBL", "SYMBOL", "ENTREZ")
# 去除重复 ID
ids=ids[!duplicated(ids$ENSEMBL),]
# 连接基因 counts 矩阵和 ID 信息 (根据需求使用我们构建的 ids 基因信息查询表)
All_gene_counts <- merge(ensembl_matrix, ids, by.x = "name", by.y = "ENSEMBL", all.x = TRUE) %>%
dplyr::select(name, SYMBOL, ENTREZ, everything())