最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

玩转 ENSEMBL 数据库 (一)

网站源码admin2浏览0评论

玩转 ENSEMBL 数据库 (一)

生物信息学离不开数据库的使用,一般情况下,我们似乎能难使用一个数据库的全部功能,但不可否认的是,一个数据库往往隐藏着我们不知道的使用技巧,也可能我们使用过这些功能,但不够完整。所以这里我们一起探索一下数据库的使用奥秘及深度解读信息。

Ensembl数据库是一个广泛使用的生物信息学资源,主要用于提供多种物种的基因组注释和比较基因组学数据。以下是Ensembl数据库的一些关键特点:

  1. 基因组注释:Ensembl提供了多种物种的详细基因组注释,包括基因、转录本、蛋白质序列及其功能描述。
  2. 比较基因组学:Ensembl支持跨物种的基因组比较分析,帮助研究人员研究基因进化和功能保守性。
  3. 多样性和变异数据:数据库包含丰富的人类和其他物种的遗传多样性和变异信息,如SNPs(单核苷酸多态性)和结构变异。
  4. 浏览和访问工具:Ensembl提供了直观的浏览器界面和API,方便用户访问和分析数据。
  5. 整合数据:Ensembl整合了来自多个公共项目的数据,如GENCODE、UniProt和NCBI,提供全面的基因组信息。
  6. 定期更新:数据库定期更新,以确保提供最新的基因组和注释数据。

今天我们先不聊ENSEMBL官网界面,先聊一下怎么在R中访问ENSEMBL资源,这是一个R包:BiomaRt, Bioconductor R package。BiomaRt是一个用于访问生物信息学数据库的R包,特别是 Ensembl 数据库。它提供了一个方便的接口来查询和检索基因组数据。这个 R 包可以在 Rstudio 中直接在线调用 Ensembl 数据库信息。

下载 R

代码语言:javascript代码运行次数:0运行复制
if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install("biomaRt")

先解释一个词(后边会频繁用) mart 指的是一个数据库连接对象,它代表你要查询的特定 BioMart 数据库。BioMart 是一个生物信息学数据库系统,提供了访问各种生物数据的接口。

我们先举例再逐一解读参数。

示例1

获取位于人类 1 号染色体上的所有 Ensembl 基因、转录本 ID、HGNC 符号及染色体位置信息。

这里使用两个函数,useEnsembl 函数用来在线连接数据库和基因集,getBM函数用于从数据库中检索数据

代码语言:javascript代码运行次数:0运行复制
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
                    )
  1. 加载biomaRt库:*library(biomaRt)*用于加载biomaRt包,确保可以使用其功能来访问生物数据库。
  2. 连接到Ensembl数据库:*useEnsembl(biomart="ensembl", dataset="hsapiens_gene_ensembl")函数用于连接到Ensembl数据库,指定了使用人类基因数据集hsapiens_gene_ensembl*。
  3. 检索数据
    • *'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*。
  4. 存储结果:检索到的数据被存储在*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
  1. **"genes"**:用于访问 Ensembl Genes 数据库,提供基因组注释信息。
  2. **"snps"**:用于访问 Ensembl Variation 数据库,提供关于遗传变异的信息。
  3. **"regulation"**:用于访问 Ensembl Regulation 数据库,提供基因调控相关的信息。
  4. **"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 删除对象函数连接数据数据库

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论