0

我收集了大约 2000 个 GI 编号,我需要将其映射到 HGNC(又名 HUGO)基因名称。

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

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


(这篇文章的其余部分对这个问题并不重要。在其中我提供了额外的背景信息,FWIW。它在最后变得越来越技术化;这个内容只对那些熟悉 NCBIeutils界面的人有意义。)

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

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

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

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

像往常一样,这种多跳映射的“损耗率”非常糟糕:大约 25% 的 GI 数字被映射到某个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 基因名称,请告诉我。

4

2 回答 2

0

您可以从UCSC 基因组浏览器中获得所需的 MySql 表 - 这可以使用您提到的大多数语言进行查询,但我的偏好是 python。

于 2013-08-12T18:13:22.810 回答
0

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

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

于 2013-08-12T19:07:58.593 回答