前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用biopython查询NCBI数据库

使用biopython查询NCBI数据库

作者头像
生信修炼手册
发布2021-01-11 15:39:21
1.2K0
发布2021-01-11 15:39:21
举报
文章被收录于专栏:生信修炼手册生信修炼手册

NCBI网站是最常用的生物信息数据库之一,集成了pubmed,genebank等子数据库。最简便的用法当然是直接在网站上检索,为了方便检索,NCBI提供了自己的检索系统,称之为Entrez。

对于想要在命令行访问NCBI的人而言,NCBI也提供了Eutils工具,可以通过对应的API在命令行操作。biopython将Eutils工具进行了封装,通过Bio.Entrez子模块,可以在python环境中与NCBI进行交互。

E-utilities是由8个小程序组成的工具集,能够将符合语法规则的URL转换为对应数据库的检索条件,并返回检索结果,是Entrez检索系统和NCBI数据库的接口,biopython也提供了对应的功能

1. EInfo

该方法用于查看数据库的基本信息,用法如下

代码语言:javascript
复制
>>> Entrez.email = "577198016@qq.com"
>>> handle = Entrez.einfo()
>>> record = Entrez.read(handle)
>>> record
{'DbList': ['pubmed', 'protein', 'nuccore', 'ipg', 'nucleotide', 'structure', 'sparcle', 'protfam', 'genome', 'annotinfo', 'assembly', 'bioproject', 'biosample', 'blastdbinfo', 'books', 'cdd', 'clinvar', 'gap', 'gapplus', 'grasp', 'dbvar', 'gene', 'gds', 'geoprofiles', 'homologene', 'medgen', 'mesh', 'ncbisearch', 'nlmcatalog', 'omim', 'orgtrack', 'pmc', 'popset', 'proteinclusters', 'pcassay', 'biosystems', 'pccompound', 'pcsubstance', 'seqannot', 'snp', 'sra', 'taxonomy', 'biocollections', 'gtr']}
>>> record.keys()
dict_keys(['DbList'])
>>> record['DbList']
['pubmed', 'protein', 'nuccore', 'ipg', 'nucleotide', 'structure', 'sparcle', 'protfam', 'genome', 'annotinfo', 'assembly', 'bioproject', 'biosample', 'blastdbinfo', 'books', 'cdd', 'clinvar', 'gap', 'gapplus', 'grasp', 'dbvar', 'gene', 'gds', 'geoprofiles', 'homologene', 'medgen', 'mesh', 'ncbisearch', 'nlmcatalog', 'omim', 'orgtrack', 'pmc', 'popset', 'proteinclusters', 'pcassay', 'biosystems', 'pccompound', 'pcsubstance', 'seqannot', 'snp', 'sra', 'taxonomy', 'biocollections', 'gtr']

在使用这个系统时,我们必须提供一个邮箱地址,当你访问频繁或者违反了Eutils的使用规范时,会通过邮件与你沟通。Entrez.read方法将结果读取为一个dict对象,这样方便在python中查看和处理信息。

EInfo也可以查询某个特定的数据库的信息,用法如下

代码语言:javascript
复制
>>> handle = Entrez.einfo(db='pubmed')
>>> record = Entrez.read(handle)
>>> record.keys()
dict_keys(['DbInfo'])
>>> record['DbInfo'].keys()
dict_keys(['DbName', 'MenuName', 'Description', 'DbBuild', 'Count', 'LastUpdate', 'FieldList', 'LinkList'])
>>> record['DbInfo']['DbName']
'pubmed'
>>> record['DbInfo']['MenuName']
'PubMed'
>>> record['DbInfo']['Description']
'PubMed bibliographic record'

2. ESearch

该方法用于检索特定的数据库,提供数据库名称和检索的关键词即可,用法如下

代码语言:javascript
复制
>>> handle = Entrez.esearch(db="pubmed", term="cnv-seq")
>>> record = Entrez.read(handle)
>>> record.keys()
dict_keys(['Count', 'RetMax', 'RetStart', 'IdList', 'TranslationSet', 'TranslationStack', 'QueryTranslation'])
>>> record["IdList"]
['33255631', '33179236', '33135740', '32924127', '32924122', '32858251', '32820524', '32820506', '32820498', '32761601', '32761594', '32643293', '32625247', '32619246', '32597569', '32591622', '32536972', '32489010', '32342531', '32335885']

在查询结果中,会返回数据库中的ID,可以结合后续的其他命令来下载。

3. EPost

该方法用于上传待查询的ID到NCBI服务器,一次可以上传多个ID, 用法如下

代码语言:javascript
复制
>>> id_list = ["19304878", "18606172", "16403221", "16377612", "14871861", "14630660"]
>>> search_results = Entrez.read(Entrez.epost("pubmed", id=",".join(id_list)))
>>> webenv = search_results["WebEnv"]
>>> query_key = search_results["QueryKey"]
>>> webenv
'MCID_5fd9615755b20b529b7599d1'
>>> query_key
'1'

上传之后可以获取webenv, query_key变量的值,这些值可以通过efetch等命令来获取并下载对应的记录。

4. ESummary

该方法用于下载对应的摘要信息,用法如下

代码语言:javascript
复制
>>> handle = Entrez.esummary(db="pubmed", id="33255631")
>>> record = Entrez.read(handle)
>>> record
[{'Item': [], 'Id': '33255631', 'PubDate': '2020 Nov 25', 'EPubDate': '2020 Nov 25', 'Source': 'Genes (Basel)', 'AuthorList': ['Qi Q', 'Jiang Y', 'Zhou X', 'Meng H', 'Hao N', 'Chang J', 'Bai J', 'Wang C', 'Wang M', 'Guo J', 'Ouyang Y', 'Xu Z', 'Xiao M', 'Zhang VW', 'Liu J'], 'LastAuthor': 'Liu J', 'Title': 'Simultaneous Detection of CNVs and SNVs Improves the Diagnostic Yield of Fetuses with Ultrasound Anomalies and Normal Karyotypes.', 'Volume': '11', 'Issue': '12', 'Pages': '', 'LangList': ['English'], 'NlmUniqueID': '101551097', 'ISSN': '', 'ESSN': '2073-4425', 'PubTypeList': ['Journal Article'], 'RecordStatus': 'PubMed - in process', 'PubStatus': 'epublish', 'ArticleIds': {'pubmed': ['33255631'], 'medline': [], 'pii': 'genes11121397', 'doi': '10.3390/genes11121397', 'rid': '33255631', 'eid': '33255631'}, 'DOI': '10.3390/genes11121397', 'History': {'pubmed': ['2020/12/02 06:00'], 'medline': ['2020/12/02 06:00'], 'received': '2020/09/06 00:00', 'revised': '2020/11/09 00:00', 'accepted': '2020/11/16 00:00', 'entrez': '2020/12/01 01:09'}, 'References': [], 'HasAbstract': IntegerElement(1, attributes={}), 'PmcRefCount': IntegerElement(0, attributes={}), 'FullJournalName': 'Genes', 'ELocationID': 'pii: E1397. doi: 10.3390/genes11121397', 'SO': '2020 Nov 25;11(12)'}]
>>> record[0].keys()
dict_keys(['Item', 'Id', 'PubDate', 'EPubDate', 'Source', 'AuthorList', 'LastAuthor', 'Title', 'Volume', 'Issue', 'Pages', 'LangList', 'NlmUniqueID', 'ISSN', 'ESSN', 'PubTypeList', 'RecordStatus', 'PubStatus', 'ArticleIds', 'DOI', 'History', 'References', 'HasAbstract', 'PmcRefCount', 'FullJournalName', 'ELocationID', 'SO'])
>>> record[0]['Item']
[]
>>> record[0]['Title']
'Simultaneous Detection of CNVs and SNVs Improves the Diagnostic Yield of Fetuses with Ultrasound Anomalies and Normal Karyotypes.'

5. EFetch

该方法用于下载数据库中的内容,用法如下

代码语言:javascript
复制
>>> handle = Entrez.efetch(db="nucleotide", id="186972394", rettype="gb", retmode="text")
>>> context = handle.read()
>>> with open('out.gb', 'w') as fp:
...     fp.write(context)
...

通过rettype和retmode参数可以指定下载文件的格式,对于批量下载,推荐将下载之后的数据另存为文件,然后在通过Bio.SeqIO模块来读取。

6. ELink

该方法用于数据库之间的交叉查询,用法如下

代码语言:javascript
复制
>>> record = Entrez.read(Entrez.elink(dbfrom="gene", db="clinvar", id="7157"))
>>> record[0]['LinkSetDb'][0]['Link'][0]
{'Id': '988617'}

以上例子展示了在gene和clinvar两个数据库之间进行交叉查询的方式,根据基因ID获取对应的clinvar数据库中该基因上包含的突变位点的信息。

7. EGQuery

该方法用于统计检索项在各个数据库中检索到的条目,用法如下

代码语言:javascript
复制
>>> handle = Entrez.egquery(term="biopython")
>>> record = Entrez.read(handle)
>>> for row in record["eGQueryResult"]:
...     print(row["DbName"], row["Count"])
...
pubmed 29
pmc 1734
mesh 0
books 2
...
geoprofiles 0
gds 17
bioproject 1

8. ESpell

该方法用于自动校正拼写错误,用法如下

代码语言:javascript
复制
>>> handle = Entrez.espell(term="biopythooon")
>>> record = Entrez.read(handle)
>>> record.keys()
dict_keys(['Database', 'Query', 'CorrectedQuery', 'SpelledQuery'])
>>> record['Query']
'biopythooon'
>>> record['CorrectedQuery']
'biopython'

在实际使用中,ESearch, ELink, EFetch这3个命令时最为常用的,通过ESearch和ELink进行查询,获取对应的数据库ID, 然后通过EFectch命令进行下载。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档