如何以编程方式将GI编号直接映射到HGNC基因名称?

时间:2013-08-12 17:05:47

标签: python bioinformatics

我有大约2000个GI编号的集合,我需要将其映射到HGNC(aka HUGO)基因名称。

作为数据分析管道的一部分,我将来必须反复进行类似的映射,所以我想以编程方式进行映射(而不是通过在某些交互式上剪切和粘贴2K GI编号)工具的界面)。

此外,我只能使用免费软件。我对Python和Perl感到最舒服,虽然我可以使用R和Java,以及其他任何东西(Ruby,MATLAB,Tcl等)。


(这篇文章的其余部分对于这个问题并不重要。我在其中提供了额外的背景信息,FWIW。它越来越技术化到最后;这些内容仅对那些熟悉NCBI {{1}的人有意义。 } interface。)

一种可能性是从网页上为每个GI编号(example)抓取HGNC ID,但这些页面使用JavaScript加载其内容,这使得它们超出了我的网络抓取能力。

即使我可以进行此类网页抓取,结果也必然低于从适当的网络服务API获得的结果。

不幸的是,我还没有找到任何“官方”服务,以编程方式将GI编号直接映射到HGNC / HUGO基因名称。我对此有最好的希望是NCBI的eutils界面,但是我无法找到一种方法来执行我之后的直接映射。 (如果我错了,请纠正我!)

我能想到的最好的是2跳映射:使用eutils(或更确切地说,是eutils Python模块提供的eutils的接口)来映射GI数字到Entrez Gene ID,然后使用来自HGNC的综合表downloaded将这些Entrez基因ID映射到HGNC / HUGO基因名称。

像往常一样,这种多跳映射的“损耗率”非常糟糕:所有GI数的~25%被映射到某些 HGNC / HUGO基因名称。 (我还没有估计这些映射中有多少实际上是正确的。)

我尝试使用Python的bioservices.eutils库进行此映射的第一跳,但是能够以这种方式仅获得大约四分之一2K GI数的Entrez基因ID。更具体地说,这就是我使用的,实质上是:

bioservices.eutils

from bioservices import EUtils s = EUtils() xml = s.ELink(db='gene', dbfrom='protein', Ids='395398606') # ...now parse the returned xml to get the returned Entrez gene id(s) 的调用会产生以下形式的HTTP请求:

s.ELink

如果有一个更好的http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?db=gene&dbfrom=protein&id=395398606&cmd=neighbor 命令将GI编号映射到Entrez基因ID而不是这个,请告诉我。更好的是,如果有更好的eutils命令将GI编号直接映射到HGNC / HUGO基因名称,请告诉我。

2 个答案:

答案 0 :(得分:0)

您可以从UCSC Genome Browser作为MySql表获得所需内容 - 可以使用您提到的大多数语言来查询,但我的偏好是python。

答案 1 :(得分:0)

如果我能够通过网络抓取从NCBI获得所需的信息,那么您需要从这些页面获得哪些信息。让我们说明你需要从example获得哪些细节。

如果您在页面中提供所需内容,我可以用PHP编写代码,以获取您需要的任意数量的GI ID信息。