利用Biopython来解析KEGG记录

Biopython

更好的阅读体验请移步这里

简介

Biopython项目是旨在减少计算生物学中代码重复的开源项目之一,由国际开发人员协会创建。 它包含表示生物序列和序列注释的类,并且能够读取和写入各种文件格式(FASTA,FASTQ,GenBank和Clustal等), 支持以程序化方式访问生物信息的在线数据库(例如,NCBI)。 独立的模块扩展了Biopython的序列比对,蛋白质结构,群体遗传学,系统发育,序列基序和机器学习等功能。

Biopython中的Bio.KEGG模块可以对KEGG数据库中的条目记录进行解析和对KEGG的API进行查询,这对于批量处理KEGG条目有很大帮助。

解析KEGG记录

解析KEGG记录就像利用Biopython解析任何其他文件格式类似。(在运行以下代码之前,请首先将http://rest.kegg.jp/get/ec:5.4.2.2处的文件另存为ec_5.4.2.2.txt。)

>>> from Bio.KEGG import Enzyme
>>> records = Enzyme.parse(open("ec_5.4.2.2.txt"))
>>> record = list(records)[0]
>>> record.classname
['Isomerases;', 'Intramolecular transferases;', 'Phosphotransferases (phosphomutases)']
>>> record.entry
'5.4.2.2'

如果输入的KEGG记录只有一条,也可以使用read方法:

>>> from Bio.KEGG import Enzyme
>>> record = Enzyme.read(open("ec_5.4.2.2.txt"))
>>> record.classname
['Isomerases;', 'Intramolecular transferases;', 'Phosphotransferases (phosphomutases)']
>>> record.entry
'5.4.2.2'

查询KEGG的API

Biopython支持查询KEGG api。支持查询所有KEGG端口;支持KEGG(https://www.kegg.jp/kegg/rest/keggapi.html)条目记录查询的所有方法。该界面对查询进行了一些验证,这些查询遵循KEGG网站上的规则。

下面代码展示了如何通过下载上述相关的酶来扩展示例数据,并将结果传递给解析函数:

>>> from Bio.KEGG import REST
>>> from Bio.KEGG import Enzyme
>>> request = REST.kegg_get("ec:5.4.2.2")
>>> open("ec_5.4.2.2.txt", "w").write(request.read())
>>> records = Enzyme.parse(open("ec_5.4.2.2.txt"))
>>> record = list(records)[0]
>>> record.classname
['Isomerases;', 'Intramolecular transferases;', 'Phosphotransferases (phosphomutases)']
>>> record.entry
'5.4.2.2'

再来一个更实际的例子:

from Bio.KEGG import REST

human_pathways = REST.kegg_list("pathway", "hsa").read()

# 从所有人类相关的通路中过滤出与修复相关的通路
repair_pathways = []
for line in human_pathways.rstrip().split("\n"):
    entry, description = line.split("\t")
    if "repair" in description:
        repair_pathways.append(entry)

# 得到与修复通路相关的基因并将其加入列表
repair_genes = [] 
for pathway in repair_pathways:
    pathway_file = REST.kegg_get(pathway).read()  # 查询并读取每一条通路

    # 遍历每个KEGG通路文件,只读取每个通路中的基因
    current_section = None
    for line in pathway_file.rstrip().split("\n"):
        section = line[:12].strip()  # 12列以内部分的名字
        if not section == "":
            current_section = section
        
        if current_section == "GENE":
            gene_identifiers, gene_description = line[12:].split("; ")
            gene_id, gene_symbol = gene_identifiers.split()

            if not gene_symbol in repair_genes:
                repair_genes.append(gene_symbol)

print("There are %d repair pathways and %d repair genes. The genes are:" % \
      (len(repair_pathways), len(repair_genes)))
print(", ".join(repair_genes))

关于KEGG API的详细说明可以移步其官方说明文档

参考

其他资源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,126评论 2 89
  • 去年有段时间得空,就把谷歌GAE的API权威指南看了一遍,收获颇丰,特别是在自己几乎独立开发了公司的云数据中心之后...
    骑单车的勋爵阅读 20,898评论 0 41
  • 转载 :https://www.plob.org/article/3856.html 生物信息数据库与查询 近年来...
    oddxix阅读 13,838评论 0 37
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 8,150评论 1 3
  • 少年对我说 你不要总是一副什么都不在乎的样子 姑娘对我说 你现在还会在乎什么 姑娘与少年啊 我惟愿我终生欢喜就只能...
    韩Pluto阅读 2,532评论 0 0