玩转 ENSEMBL 数据库 (一)
生物信息学离不开数据库的使用,一般情况下,我们似乎能难使用一个数据库的全部功能,但不可否认的是,一个数据库往往隐藏着我们不知道的使用技巧,也可能我们使用过这些功能,但不够完整。所以这里我们一起探索一下数据库的使用奥秘及深度解读信息。
Ensembl数据库是一个广泛使用的生物信息学资源,主要用于提供多种物种的基因组注释和比较基因组学数据。以下是Ensembl数据库的一些关键特点:
- 基因组注释:Ensembl提供了多种物种的详细基因组注释,包括基因、转录本、蛋白质序列及其功能描述。
- 比较基因组学:Ensembl支持跨物种的基因组比较分析,帮助研究人员研究基因进化和功能保守性。
- 多样性和变异数据:数据库包含丰富的人类和其他物种的遗传多样性和变异信息,如SNPs(单核苷酸多态性)和结构变异。
- 浏览和访问工具:Ensembl提供了直观的浏览器界面和API,方便用户访问和分析数据。
- 整合数据:Ensembl整合了来自多个公共项目的数据,如GENCODE、UniProt和NCBI,提供全面的基因组信息。
- 定期更新:数据库定期更新,以确保提供最新的基因组和注释数据。
今天我们先不聊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
获取位于人类 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
)
- 加载biomaRt库:*
library(biomaRt)
*用于加载biomaRt包,确保可以使用其功能来访问生物数据库。 - 连接到Ensembl数据库:*
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上的基因信息。
函数 1 : useEnsembl
"useEnsembl"函数允许通过指定 BioMart 和数据集参数连接到 Ensembl 网站的 mart。例如,要连接到 Ensembl 实时基因 mart 的人类数据集。
代码语言:javascript代码运行次数:0运行复制ensembl = useEnsembl(biomart="ensembl", dataset="hsapiens_gene_ensembl")
参数:biomart
其中biomart
是想要连接的 BioMart 数据库名称。可以使用 listEnsembl
函数检索可能的数据库名称。
也可以直接网页进入数据库 ,这个网页版使用可以以后再聊。
运行"listEnsembl"函数
代码语言:javascript代码运行次数:0运行复制> 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
- **"genes"**:用于访问 Ensembl Genes 数据库,提供基因组注释信息。
- **"snps"**:用于访问 Ensembl Variation 数据库,提供关于遗传变异的信息。
- **"regulation"**:用于访问 Ensembl Regulation 数据库,提供基因调控相关的信息。
- **"mouse_strains"**:用于访问小鼠品系的基因组信息。
可以看到有四个数据库,但是我们一般使用 biomart="ensembl"
, 这个一种快捷方式,等价于 biomart="genes"
参数:dataset
通过dataset="hsapiens_gene_ensembl"
可以连接自己关注的物种。
"listDatasets"函数提供给定 mart 下所有可用物种(mart 数据集)的列表
代码语言:javascript代码运行次数:0运行复制> 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条信息。
函数 2 :getBM
"getBM"函数允许您通过一组 mart 过滤器和属性列表构建 BioMart 查询。说人话就是要根据什么信息(filters, values),然后提取 (attributes) 出什么信息
代码语言:javascript代码运行次数:0运行复制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
)
参数:fillters
"listFilters"函数将为您提供给定 mart 和物种的可用过滤器列表
代码语言:javascript代码运行次数:0运行复制> 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
代码语言:javascript代码运行次数:0运行复制# 也可以表格形式直接查看
View(ensembl@filters)
这个例子中我们使用的filters
信息就是染色体号chromosome_name
, 提取染色体1,就是`values ="1"
参数:attributes
"listAttributes"函数将提供给定 mart 和物种的可用属性列表
代码语言:javascript代码运行次数:0运行复制> 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
代码语言:javascript代码运行次数:0运行复制# 也可以表格形式直接查看
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
***:基因在染色体上的结束位置,也以碱基对为单位表示。
等等等等········
示例 2
获取映射到人类 Ensembl 基因 ID "ENSG00000139618" 的 Ensembl 基因、转录本 ID、HGNC 符号及 Uniprot Swissprot 登录号
代码语言:javascript代码运行次数:0运行复制> 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
上面解释很清楚了
拓展 1 : 网页版
ensembl
也提供了网页工具,使用原理和 R 包大概一致。
步骤 1:选择数据库
和 R 包中选择 mart 对象一样
步骤2: 选择查询信息
比如我们想知道获取映射到人类 Ensembl 基因 ID "ENSG00000139618" 的 Ensembl 基因、转录本 ID、HGNC 符号及 Uniprot Swissprot 登录号
步骤 3 :选择输出信息
这里和 R 包中attributes 参数功能一致,但名字可能不同。
步骤4: 输出结果
拓展 2 :转换基因 ID
在 R 中,我们可能需要将 ENSEMBL GENE ID (例:ENSG00000139618)转换为 SYMBOL ID
(例:BRCA2)或者ENTREZ ID。那我们是不是可以生成一个的对照表,一列是 ENSEMBL ID,一列是 SYMBOL ID,一列是ENTREZ ID,或者其他。可以根据上述attributes参数
看能提取哪些信息。然后我们再去查询转换。
这里举例是替换一个counts 数据的 ENSEMBL ID 信息,列明为“name”,具体替换根据需求具体使用。
代码语言:javascript代码运行次数:0运行复制# 获得数据库中关注的 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())
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-21,如有侵权请联系 cloudcommunity@tencent 删除对象函数连接数据数据库