2

我尝试通过生物服务访问KEGG ,以获取有关基因列表的某些信息。问题是我事先不知道各个基因属于哪个生物体;在我的列表中可能有很多基因都属于不同的生物。我的问题是我不知道如何在不指定生物体的情况下检索有关基因的所需信息。

举个例子:

gene_list = ['YMR293C', 'b3640']

一个基因属于酵母,而第二个基因属于大肠杆菌。

如果我现在尝试:

from bioservices import *
kegg_con = KEGG()
res = kegg_con.get('b3640', parse=True)['NAME']

我最终得到了TypeError一个

kegg_con.get('b3640', parse=True)

不返回字典,而只返回一个数字(因为我没有指定它所属的有机体)。但是,当我指定有机体时(这里它eco代表大肠杆菌),这是有效的:

kegg_con.get('eco:b3640', parse=True)['NAME']

返回

[u'dut']

这是正确的,可以在这里看到:

在此处输入图像描述

然后我尝试使用find获取有关相关生物的信息。这适用于YMR293C但失败b3640

kegg_con.find('genes', 'YMR293C')

返回

u'sce:YMR293C\tHER2, GEP6, QRS1, RRG6; 谷氨酰-tRNA(Gln) 氨基转移酶亚基 HER2 (EC:6.3.5.7);K02433 天冬氨酰-tRNA(Asn)/谷氨酰-tRNA(Gln) 氨基转移酶亚基 A [EC:6.3.5.6 6.3.5.7]\ncal:CaO19.11438\tlikely amidase类似于 S. cerevisiae YMR293C 线粒体推定的谷氨酰-tRNA氨基转移酶\ncal :CaO19.3956\tlikely amidase类似于S. cerevisiae YMR293C线粒体推定的谷氨酰-tRNA氨基转移酶;K02433 天冬氨酰-tRNA(Asn)/谷氨酰-tRNA(Gln) 氨基转移酶亚基 A [EC:6.3.5.6 6.3.5.7]\n'

我可以从中轻松提取所需的信息(在这种情况下:)sce:YMR293C,但是,当我运行

 kegg_con.find('genes', 'b3640')

我明白了

u'cnb:CNBB3640\假设蛋白;K06316 寡糖易位蛋白 RFT1\ncgi:CGB_B3640C\假设蛋白\neco:b3640\tdut;脱氧尿苷三磷酸酶(EC:3.6.1.23);K01520 dUTP 焦磷酸酶 [EC:3.6.1.23]\nsea:SeAg_B3640\tbfd; 细菌铁蛋白相关的铁氧还蛋白;K02192 细菌铁蛋白相关铁氧还蛋白\nyps:YPTB3640\t 保守假设蛋白\nreu:Reut_B3640\t 保守假设蛋白\nbbr:BB3640\t 噬菌体相关输出蛋白\nmag:amb3640\假设蛋白\nbcg:BCG9842_B3640\tflagellar 钩相关蛋白;K02407 鞭毛钩相关蛋白 2\ncbi:CLJ_B3640\t 保守假设蛋白;K09963 未表征蛋白质\nmmo:MMOB3640\假设蛋白质\nmbo:Mb3640c\tftsH; 膜结合蛋白酶 FTSH (细胞分裂蛋白) (EC:3.4.24.-);

它不提供有关大肠杆菌的信息。

因此,我的问题是:

1)有没有办法让我可以仅根据基因 ID 访问有关基因的信息,而无需指定它所属的生物体?

2) 检索基因所属生物体信息的最佳方法是什么?为什么find我搜索大肠杆菌基因时会失败?

4

1 回答 1

3

find() 方法的输出是纯字符串,不易阅读,但我相信您要查找的信息在输出中。在第三行,您可以看到:

eco:b3640

现在,我不确定 KEGG 的输出格式是否总是具有相同的结构。如果是这样,假设感兴趣的行是第三行,您可以使用:

res = kegg_con.find('genes', 'b3640') 
orgnanism = res.split("\n")[2].split()[0].split(":")[0]

您可以进一步检查它是一个有效的生物体,如下所示:

assert organism in kegg_con.organismIds

为了安全起见,您可以在字符串中搜索标识符(而不是使用第三行):

[x for x in res.split() if "b3640" in x]

希望它有帮助

TC,生物服务主要作者

于 2016-05-28T16:19:22.747 回答