Python 如何通过编程将GI编号直接映射到HGNC基因名称?

Python 如何通过编程将GI编号直接映射到HGNC基因名称?,python,bioinformatics,bioservices,Python,Bioinformatics,Bioservices,我有一个大约2000个GI编号的集合,需要映射到HGNC(又名HUGO)基因名 将来,作为数据分析管道的一部分,我将不得不重复执行类似的映射,因此我希望以编程方式执行此映射(而不是在某个交互式工具的界面上剪切和粘贴2K GI编号) 此外,我只能使用自由软件。我最熟悉Python和Perl,尽管我可以使用R和Java,作为最后的手段,也可以使用其他任何东西(Ruby、MATLAB、Tcl等) (这篇文章的其余部分对这个问题不是必要的。我在文章中提供了额外的背景信息,FWIW。文章的结尾越来越具有

我有一个大约2000个GI编号的集合,需要映射到HGNC(又名HUGO)基因名

将来,作为数据分析管道的一部分,我将不得不重复执行类似的映射,因此我希望以编程方式执行此映射(而不是在某个交互式工具的界面上剪切和粘贴2K GI编号)

此外,我只能使用自由软件。我最熟悉Python和Perl,尽管我可以使用R和Java,作为最后的手段,也可以使用其他任何东西(Ruby、MATLAB、Tcl等)


(这篇文章的其余部分对这个问题不是必要的。我在文章中提供了额外的背景信息,FWIW。文章的结尾越来越具有技术性;这篇文章的内容只有那些熟悉NCBI的
eutils
接口的人才有意义。)

一种可能是从网页中为每个GI编号()刮取HGNC id,但这些网页使用JavaScript加载内容,这超出了我的网页刮取能力

即使我可以执行这样的web抓取,结果的质量也必然低于从适当的web服务API获得的结果

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

我能想到的最好的方法是两跳映射:使用
eutils
(或者更确切地说,是
bioservices.eutils
Python模块提供的
eutils
接口)将GI编号映射到Entrez基因ID,然后使用HGNC的综合表将这些Entrez基因ID映射到HGNC/HUGO基因名称

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

我尝试使用Python的
bioservices.eutils
库进行第一步的映射,但通过这种方式,只能够获得2K GI编号中约四分之一的Entrez基因ID。更具体地说,这就是我使用的,本质上:

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)
s.ELink
的调用将导致以下形式的HTTP请求:

http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?db=gene&dbfrom=protein&id=395398606&cmd=neighbor

如果有更好的
eutils
命令将GI编号映射到Entrez基因ID,请告诉我。更好的是,如果有更好的
eutils
命令将GI编号直接映射到HGNC/HUGO基因名,请让我知道。

您可以从MySql表中获得所需信息-可以使用您提到的大多数语言进行查询,但我更喜欢python。

如果我能够通过web抓取从NCBI获得所需信息,那么您需要从这些页面中获得哪些信息。让我们说一下,您需要从您提供的信息中获得哪些详细信息

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