从Python Entrez字典词典中返回值

时间:2014-12-05 17:09:57

标签: python xml r dictionary ncbi

我想从Entrez Gene页面中删除Interactions表。

Interactions表是从Web服务器填充的,当我尝试在R中使用XML包时,我可以获得Entrez基因页面,但是Interactions表主体是空的(它没有被Web服务器填充)

处理R中的Web服务器问题可能是可以解决的(我很想知道如何),但似乎Biopython是一条更容易的路径。

我把以下内容放在一起,这给了我想要的示例基因:

# Pull the Entrez gene page for MAP1B using Biopython

from Bio import Entrez
Entrez.email = "jamayfie@vasci.umass.edu"
handle = Entrez.efetch(db="gene", id="4131", retmode="xml")
record = Entrez.read(handle)
handle.close()

PPI_Entrez = []
PPI_Sym = []

# Find the Dictionary that contains the Interaction table
    for x in range(1, len(record[0]["Entrezgene_comments"])):
   if ('Gene-commentary_heading', 'Interactions') in record[0]["Entrezgene_comments"][x].items():
       for y in range(0, len(record[0]["Entrezgene_comments"][x]['Gene-commentary_comment'])):
          EntrezID = record[0]["Entrezgene_comments"][x]['Gene-commentary_comment'][y]['Gene-commentary_comment'][1]['Gene-commentary_source'][0]['Other-source_src']['Dbtag']['Dbtag_tag']['Object-id']['Object-id_id']
          PPI_Entrez.append(EntrezID)
          Sym = record[0]["Entrezgene_comments"][x]['Gene-commentary_comment'][y]['Gene-commentary_comment'][1]['Gene-commentary_source'][0]['Other-source_anchor']
          PPI_Sym.append(Sym)

# Return the desired values: I want the Entrez ID and Gene symbol for each interacting protein
PPI_Entrez  # Returns the EntrezID
PPI_Sym  # Returns the gene symbol

这段代码有效,给了我想要的东西。但我认为它很丑陋,并担心如果Entrez基因页面的格式稍有变化,它会破坏代码。特别是,必须有一种更好的方法来提取所需信息而不是指定完整路径,就像我一样:

record[0]["Entrezgene_comments"][x]['Gene-commentary_comment'][y]['Gene-commentary_comment'][1]['Gene-commentary_source'][0]['Other-source_anchor']

但我无法弄清楚如何搜索字典字典而不指定我想要下降的每个级别。当我尝试像find()这样的函数时,它们会在下一级运行,但不会一直运行到底部。

是否存在通配符,Python等效于“//”,或者我可以使用函数来获取['Object-id_id']而不命名完整路径?其他有关清洁代码的建议也很受欢迎。

1 个答案:

答案 0 :(得分:0)

我不确定Python中的xpath,但如果代码有效,那么我不会担心删除完整路径或Entrez Gene XML是否会发生变化。自从您第一次尝试使用R,您可以使用下面的Entrez Direct系统调用或者像rentrez这样的包来获取XML。

doc <- xmlParse( system("efetch -db=gene -id=4131 -format xml", intern=TRUE) )

接下来,获取与http://www.ncbi.nlm.nih.gov/gene/4131#interactions

表中的行对应的节点
x <- getNodeSet(doc, "//Gene-commentary_heading[.='Interactions']/../Gene-commentary_comment/Gene-commentary" )

length(x)
[1] 64
x[1]
x[50]

首先尝试简单的事情

xmlToDataFrame(x[1:4])

  Gene-commentary_type  Gene-commentary_text Gene-commentary_refs Gene-commentary_source                         Gene-commentary_comment
1                   18   Affinity Capture-MS             24457600   BioGRID110304BioGRID   255BioGRID110304255GeneID8726EEDBioGRID114265
2                   18 Reconstituted Complex             20195357   BioGRID110304BioGRID   255BioGRID110304255GeneID2353FOSBioGRID108636
3                   18 Reconstituted Complex             20195357   BioGRID110304BioGRID 255BioGRID110304255GeneID1936EEF1DBioGRID108256
4                   18   Affinity Capture-MS     2345592220562859   BioGRID110304BioGRID  255BioGRID110304255GeneID6789STK4BioGRID112665
  Gene-commentary_create-date Gene-commentary_update-date
1                  2014461120                201410513330
2                201312810490                201410513330
3                201312810490                201410513330
4                 20137710360                201410513330

文本,引用,来源和日期等部分标签应该易于解析

sapply(x, function(x) paste( xpathSApply(x, ".//PubMedId", xmlValue), collapse=", "))

我不确定评论或表中列出的产品,互动体和其他基因是如何存储在XML中的,但我在这里为每个节点获得一个或三个符号和三个ID。

sapply(x, function(x) paste( xpathSApply(x, ".//Gene-commentary_comment//Other-source_anchor", xmlValue), collapse=" + "))
sapply(x, function(x) paste( xpathSApply(x, ".//Gene-commentary_comment//Object-id_id", xmlValue), collapse=" + "))

最后,因为我认为Entrez Gene只是复制IntAct和BioGrid,你也可以尝试这些网站。 Biogrid有一个非常简单的Rest服务,但你必须注册一个密钥。

url <- "http://webservice.thebiogrid.org/interactions?geneList=MAP1B&taxId=9606&includeHeader=TRUE&accesskey=[ your ACCESSKEY ]"

biogrid <- read.delim(url)
 dim(biogrid)
[1] 58 24

head(biogrid[, c(8:9,12)])
  Official.Symbol.Interactor.A Official.Symbol.Interactor.B      Experimental.System
1                       ANP32A                        MAP1B               Two-hybrid
2                        MAP1B                       ANP32A               Two-hybrid
3                       RASSF1                        MAP1B Affinity Capture-Western
4                       RASSF1                        MAP1B               Two-hybrid
5                       ANP32A                        MAP1B Affinity Capture-Western
6                          GAN                        MAP1B Affinity Capture-Western