Biopython Entrez数据库
Entrez 是一个由NCBI提供的在线搜索系统。它提供了对几乎所有已知的分子生物学数据库的访问,并支持布尔运算符和字段搜索的综合全球查询。它从所有的数据库中返回结果,包括每个数据库的命中率、带有原数据库链接的记录等信息。
可以通过Entrez访问的一些流行的数据库列举如下
- 医学杂志
- Pubmed Central
- 核苷酸(GenBank 序列数据库)
- 蛋白质(序列数据库)
- 基因组(全基因组数据库)
- 结构 (三维大分子结构)
- 分类学(GenBank中的生物体)
- SNP (单核苷酸多态性)
- UniGene (基因导向的转录物序列集群)
- CDD (保守蛋白域数据库)
- 3D域(来自Entrez结构的域)
除上述数据库外,Entrez还提供了更多的数据库来进行领域搜索。
Biopython提供了一个Entrez专用模块Bio.Entrez来访问Entrez数据库。让我们在本章中学习如何使用Biopython访问Entrez —
数据库连接步骤
为了增加Entrez的功能,请导入以下模块–Bio.Entrez。
接下来设置你的电子邮件,以确定谁与下面给出的代码连接 –
然后,设置Entrez工具参数,默认为Biopython。
Now, call einfo function to find index term counts, last update, and available links for each database as defined below −
einfo方法返回一个对象,该对象通过其读取方法提供对信息的访问,如下图所示
数据是XML格式的,要想以Python对象的形式获得数据,在调用 Entrez.info() 方法后,立即使用Ent rez. read 方法。
在这里,record是一个字典,它有一个键,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 = {})
>>>
如果你指定了不正确的数据库,那么它将返回
如果你想跨数据库搜索,那么你可以使用 Entrez.egquery 这与 Entrez.esearch 相似,只是只需指定关键词而跳过数据库参数。
获取记录
Enterz提供了一个特殊的方法,efetch,可以从Entrez搜索和下载记录的全部细节。请看下面这个简单的例子 –
现在,我们可以简单地使用SeqIO对象读取记录