KEGG

KEGG (https://www.kegg.jp/) 是一个数据库资源,用于理解生物系统(如细胞、生物体和生态系统)的高级功能和效用,这些信息来自分子水平的信息,尤其是由基因组测序和其他高通量实验技术产生的海量分子数据集。

请注意,Biopython 中的 KEGG 解析器实现是不完整的。虽然 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 下载上述酶,以及如何使用通用解析器处理没有实现自定义解析器的自定义数据。

查询 KEGG API

Biopython 完全支持查询 KEGG api。支持查询所有 KEGG 端点;KEGG 文档中记录的所有方法 (https://www.kegg.jp/kegg/rest/keggapi.html) 都受支持。该接口对遵循 KEGG 网站定义规则的查询进行了一些验证。但是,返回 400 或 404 的无效查询必须由用户处理。

首先,以下是如何通过下载相关酶并将其传递给 Enzyme 解析器来扩展上述示例。

>>> 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'

现在,这里有一个更现实的示例,它展示了查询 KEGG API 的组合。这将演示如何提取所有与 DNA 修复相关的独特的人类通路基因符号集。为此需要采取的步骤如下。首先,我们需要获取所有人类通路的列表。其次,我们需要过滤那些与“修复”相关的通路。最后,我们需要获取所有修复通路中所有基因符号的列表。

from Bio.KEGG import REST

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

# Filter all human pathways for repair pathways
repair_pathways = []
for line in human_pathways.rstrip().split("\n"):
    entry, description = line.split("\t")
    if "repair" in description:
        repair_pathways.append(entry)

# Get the genes for pathways and add them to a list
repair_genes = []
for pathway in repair_pathways:
    pathway_file = REST.kegg_get(pathway).read()  # query and read each pathway

    # iterate through each KEGG pathway file, keeping track of which section
    # of the file we're in, only read the gene in each pathway
    current_section = None
    for line in pathway_file.rstrip().split("\n"):
        section = line[:12].strip()  # section names are within 12 columns
        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 包装器与所有端点兼容。使用方式本质上是将 URL 中的所有斜杠替换为逗号,并使用该列表作为 KEGG 模块中相应方法的参数。以下是一些来自 api 文档 (https://www.kegg.jp/kegg/docs/keggapi.html) 的示例。

/list/hsa:10458+ece:Z5100            -> REST.kegg_list(["hsa:10458", "ece:Z5100"])
/find/compound/300-310/mol_weight    -> REST.kegg_find("compound", "300-310", "mol_weight")
/get/hsa:10458+ece:Z5100/aaseq      -> REST.kegg_get(["hsa:10458", "ece:Z5100"], "aaseq")