- Biopython 教程
- Biopython - 首页
- Biopython - 简介
- Biopython - 安装
- 创建简单的应用程序
- Biopython - 序列
- 高级序列操作
- 序列 I/O 操作
- Biopython - 序列比对
- Biopython - BLAST 概述
- Biopython - Entrez 数据库
- Biopython - PDB 模块
- Biopython - 基序对象
- Biopython - BioSQL 模块
- Biopython - 群体遗传学
- Biopython - 基因组分析
- Biopython - 表型微阵列
- Biopython - 绘图
- Biopython - 聚类分析
- Biopython - 机器学习
- Biopython - 测试技术
- Biopython 资源
- Biopython - 快速指南
- Biopython - 有用资源
- Biopython - 讨论
Biopython - Entrez 数据库
Entrez 是 NCBI 提供的一个在线搜索系统。它提供对几乎所有已知的分子生物学数据库的访问,并具有集成的全局查询,支持布尔运算符和字段搜索。它返回来自所有数据库的结果,其中包含来自每个数据库的命中次数、带有指向原始数据库链接的记录等信息。
下面列出了一些可以通过 Entrez 访问的常用数据库:
- PubMed
- PubMed Central
- 核酸序列数据库 (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'
现在,调用 einfo 函数以查找每个数据库的索引项计数、上次更新和可用链接,如下所示:
>>> info = Entrez.einfo()
einfo 方法返回一个对象,该对象通过其 read 方法提供对信息的访问,如下所示:
>>> data = info.read() >>> print(data) <?xml version = "1.0" encoding = "UTF-8" ?> <!DOCTYPE eInfoResult PUBLIC "-//NLM//DTD einfo 20130322//EN" "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.einfo() 方法后立即使用 Entrez.read 方法:
>>> info = Entrez.einfo() >>> record = Entrez.read(info)
此处,record 是一个字典,它只有一个键 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'OutputMessage': ['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.esearch,只是只需指定关键字并跳过数据库参数即可。
>>>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
获取记录
Entrez 提供了一种特殊方法 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 = [])