2014-12-05 6 views
0

Я хочу очистить таблицу «Взаимодействия» на странице Entrez Gene.Возвращаемые значения из словаря словаря Python Entrez словарей

Таблица взаимодействий заполняется с веб-сервера, и когда я пытался использовать пакет XML в R, я мог бы получить страницу гена Entrez, но тело таблицы взаимодействия было пустым (оно не было заполнено веб-сервером).

Работа с проблемой веб-сервера в R может быть разрешимой (и я бы с удовольствием посмотрел, как это сделать), но, казалось, Biopython был более простым путем.

я соединял следующее, что дает мне то, что я хочу для примера гена:

# Pull the Entrez gene page for MAP1B using Biopython 

from Bio import Entrez 
Entrez.email = "[email protected]" 
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'] 

Но я не могу понять, как поиск по словарю словарей без указания каждого уровня I хочу спуститься. Когда я пытаюсь выполнять функции типа find(), они работают на следующем уровне вниз, но не полностью донизу.

Есть ли символ подстановки, эквивалент Python «//» или функция, которую я могу использовать для доступа к ['Object-id_id'], без указания полного пути? Также приветствуются другие предложения для более чистого кода.

ответ

0

Я не уверен насчет xpath в Python, но если код работает, то я бы не стал беспокоиться о том, чтобы удалить полные пути или если Entrez Gene XML изменится. Поскольку вы впервые попробовали R, вы можете получить XML, используя системный вызов Entrez Direct ниже или пакет, такой как rentrez.

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, но я получаю один или три символа и три идентификатора для каждого узла здесь.

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 Джин просто копирует неповрежденными и 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 
+0

Thank you Chris S! Я планировал написать сценарий в Python, затем сделать системный вызов от R. Но это намного проще (для меня, по крайней мере). Я не знал Entrez Direct, но он прекрасно решает проблему веб-сервера и позволяет мне вернуться к анализу с помощью Node вместо того, чтобы пытаться развернуть словари Python. – jamayfie

+0

Я рассмотрел BioGrid, HERD и т. Д., Прежде чем начать этот проект, но мне нравится, что NCBI сопоставляет IntAct и BioGrid в одну таблицу, и я хотел бы начать там, если это возможно. – jamayfie

+0

Я могу получить только EntrezID для взаимодействующих белков, указав: sapply (x, function (x) paste (xpathSApply (x, ".//Gene-commentary_comment//..//Dbtag_db[.='GeneID']// ..//Object-id_id ", xmlValue), collapse =" ")) – jamayfie

Смежные вопросы