Biopython Entrez 数据库


Entrez 是NCBI提供的在线搜索系统。它提供对几乎所有已知分子生物学数据库的访问,并具有支持布尔运算符和字段搜索的集成全局查询。它返回来自所有数据库的结果,其中包含每个数据库的命中次数、带有指向原始数据库的链接的记录等信息。

下面列出了一些可以通过Entrez访问的流行数据库:

  • Pubmed
  • 考研中心
  • 核苷酸(GenBank 序列数据库)
  • 蛋白质(序列数据库)
  • 基因组(全基因组数据库)
  • 结构(三维高分子结构)
  • 分类学(GenBank 中的有机体)
  • SNP(单核苷酸多态性)
  • UniGene(面向基因的转录序列簇)
  • CDD(保守蛋白域数据库)
  • 3D 域(来自 Entrez 结构的域)

除了上述数​​据库之外,Entrez 还提供了更多数据库来执行字段搜索。

Biopython 提供了一个 Entrez 特定模块 Bio.Entrez 来访问 Entrez 数据库。本章让我们学习如何使用 Biopython 访问 Entrez:

数据库连接步骤


要添加 Entrez 的功能,请导入以下模块:

>>> from Bio import Entrez

接下来设置你的电子邮件以识别与下面给出的代码连接的人:

>>> Entrez.email = '<youremail>'

然后,设置 Entrez 工具参数,默认为 Biopython。

>>> Entrez.tool = 'Demoscript'

Now, 调用 einfo 函数来查找每个数据库的索引词计数、上次更新和可用链接 定义如下:

>>> info = Entrez.einfo()

einfo 方法返回一个对象,该对象通过其 read 方法提供对信息的访问,如下所示:

>>> data = info.read() 
>>> print(data) 
<?xml version = "1.0" encoding = "UTF-8" ?>
<!DOCTYPE eInfoResult PUBLIC "-// NLM
    "https:// eutils.ncbi.nlm.nih.gov/eutils/dtd/20130322/einfo.dtd">
<eInfoResult>
    <DbList>
        <DbName>pubmed</DbName>
        <DbName>protein</DbName>
        <DbName>nuccore</DbName>
        <DbName>ipg</DbName>
        <DbName>nucleotide</DbName>
        <DbName>nucgss</DbName>
        <DbName>nucest</DbName>
        <DbName>structure</DbName>
        <DbName>sparcle</DbName>
        <DbName>genome</DbName>
        <DbName>annotinfo</DbName>
        <DbName>assembly</DbName>
        <DbName>bioproject</DbName>
        <DbName>biosample</DbName>
        <DbName>blastdbinfo</DbName>
        <DbName>books</DbName>
        <DbName>cdd</DbName>
        <DbName>clinvar</DbName>
        <DbName>clone</DbName>
        <DbName>gap</DbName>
        <DbName>gapplus</DbName>
        <DbName>grasp</DbName>
        <DbName>dbvar</DbName>
        <DbName>gene</DbName>
        <DbName>gds</DbName>
        <DbName>geoprofiles</DbName>
        <DbName>homologene</DbName>
        <DbName>medgen</DbName>
        <DbName>mesh</DbName>
        <DbName>ncbisearch</DbName>
        <DbName>nlmcatalog</DbName>
        <DbName>omim</DbName>
        <DbName>orgtrack</DbName>
        <DbName>pmc</DbName>
        <DbName>popset</DbName>
        <DbName>probe</DbName>
        <DbName>proteinclusters</DbName>
        <DbName>pcassay</DbName>
        <DbName>biosystems</DbName>
        <DbName>pccompound</DbName>
        <DbName>pcsubstance</DbName>
        <DbName>pubmedhealth</DbName>
        <DbName>seqannot</DbName>
        <DbName>snp</DbName>
        <DbName>sra</DbName>
        <DbName>taxonomy</DbName>
        <DbName>biocollections</DbName>
        <DbName>unigene</DbName>
        <DbName>gencoll</DbName>
        <DbName>gtr</DbName>
    </DbList>
</eInfoResult>

数据是 XML 格式,并且要以 python 对象的形式获取数据,请使用 Entrez.read 尽快的方法 Entrez.einfo() 方法被调用:

>>> info = Entrez.einfo() 
>>> record = Entrez.read(info)

这里的record是一个有一个key的字典,DbList如下图:

>>> record.keys() 
[u'DbList']

访问 DbList 键返回如下所示的数据库名称列表:

>>> record[u'DbList'] 
['pubmed', 'protein', 'nuccore', 'ipg', 'nucleotide', 'nucgss', 
    'nucest', 'structure', 'sparcle', 'genome', 'annotinfo', 'assembly',
    'bioproject', 'biosample', 'blastdbinfo', 'books', 'cdd', 'clinvar',
    'clone', 'gap', 'gapplus', 'grasp', 'dbvar', 'gene', 'gds', 'geoprofiles',
    'homologene', 'medgen', 'mesh', 'ncbisearch', 'nlmcatalog', 'omim',
    'orgtrack', 'pmc', 'popset', 'probe', 'proteinclusters', 'pcassay',
    'biosystems', 'pccompound', 'pcsubstance', 'pubmedhealth', 'seqannot',
    'snp', 'sra', 'taxonomy', 'biocollections', 'unigene', 'gencoll', 'gtr']
>>>

基本上,Entrez 模块解析 Entrez 搜索系统返回的 XML,并将其作为 python 字典和列表提供。

搜索数据库


要搜索任何一个 Entrez 数据库,我们可以使用 Bio.Entrez.esearch() 模块。定义如下:

>>> info = Entrez.einfo() 
>>> info = Entrez.esearch(db = "pubmed",term = "genome") 
>>> record = Entrez.read(info) 
>>>print(record) 
DictElement({u'Count': '1146113', u'RetMax': '20', u'IdList':
['30347444', '30347404', '30347317', '30347292', 
'30347286', '30347249', '30347194', '30347187', 
'30347172', '30347088', '30347075', '30346992', 
'30346990', '30346982', '30346980', '30346969', 
'30346962', '30346954', '30346941', '30346939'], 
u'TranslationStack': [DictElement({u'Count': 
'927819', u'Field': 'MeSH Terms', u'Term': '"genome"[MeSH Terms]', 
u'Explode': 'Y'}, attributes = {})
, DictElement({u'Count': '422712', u'Field': 
'All Fields', u'Term': '"genome"[All Fields]', u'Explode': 'N'}, attributes = {}), 
'OR', 'GROUP'], u'TranslationSet': [DictElement({u'To': '"genome"[MeSH Terms] 
OR "genome"[All Fields]', u'From': 'genome'}, attributes = {})], u'RetStart': '0', 
u'QueryTranslation': '"genome"[MeSH Terms] OR "genome"[All Fields]'}, 
attributes = {})
>>>

如果你分配不正确的数据库,那么它会返回

>>> info = Entrez.esearch(db = "blastdbinfo",term = "books")
>>> record = Entrez.read(info) 
>>> print(record) 
DictElement({u'Count': '0', u'RetMax': '0', u'IdList': [], 
u'WarningList': DictElement({u'输出Message': ['No items found.'], 
    u'PhraseIgnored': [], u'QuotedPhraseNotFound': []}, attributes = {}),
    u'ErrorList': DictElement({u'FieldNotFound': [], u'PhraseNotFound':
        ['books']}, attributes = {}), u'TranslationSet': [], u'RetStart': '0',
        u'QueryTranslation': '(books[All Fields])'}, attributes = {})

如果要跨数据库搜索,则可以使用 Entrez.egquery .这类似于 Entrez.研究 除了指定关键字并跳过数据库参数就足够了。

>>>info = Entrez.egquery(term = "entrez") 
>>> record = Entrez.read(info) 
>>> for row in record["eGQueryResult"]: 
... print(row["DbName"], row["Count"]) 
... 
pubmed 458 
pmc 12779 mesh 1 
... 
... 
... 
biosample 7 
biocollections 0

获取记录


Enterz 提供了一种特殊的方法 efetch 来搜索和下载来自 Entrez 的记录的全部详细信息。考虑以下简单示例:

>>> handle = Entrez.efetch(
    db = "nucleotide", id = "EU490707", rettype = "fasta")

现在,我们可以使用 SeqIO 对象简单地读取记录

>>> record = SeqIO.read( handle, "fasta" ) 
>>> record 
SeqRecord(seq = Seq('ATTTTTTACGAACCTGTGGAAATTTTTGGTTATGACAATAAATCTAGTTTAGTA...GAA', 
SingleLetterAlphabet()), id = 'EU490707.1', name = 'EU490707.1', 
description = 'EU490707.1 
Selenipedium aequinoctiale maturase K (matK) gene, partial cds; chloroplast', 
dbxrefs = [])