2016-10-10 11 views
1

스프레드 시트의 입력을 사용하여 결과를 인쇄하고 pubmed을 검색해야하는 프로젝트를 진행하고 있습니다. 나는이 작업을 수행하기 위해 xlrdentrez을 사용 해왔다. 여기 내가 시도한 것이있다.XLRD/Entrez : Pubmed를 통해 검색하고 카운트를 추출하십시오.

  1. 가 나는 Excel 스프레드 시트에있는 저자, 그/그녀의 의과 대학, 년의 범위 및 그/그녀의 스승의 이름의 이름을 사용 pubmed를 검색 할 필요가있다. xlrd을 사용하여 필요한 정보가있는 각 열을 문자열 목록으로 변환했습니다.

    from xlrd import open_workbook 
    book = xlrd.open_workbook("HEENT.xlsx").sheet_by_index(0) 
    med_name = [] 
    for row in sheet.col(2): 
        med_name.append(row) 
    med_school = [] 
    for row in sheet.col(3): 
        med_school.append(row) 
    mentor = [] 
    for row in sheet.col(9): 
        mentor.append(row) 
    
  2. Entrez를 사용하여 특정 쿼리의 개수를 인쇄 할 수있었습니다.

    from Bio import Entrez 
    Entrez.email = "[email protected]" 
    handle = Entrez.egquery(term="Jennifer Runch AND ((2012[Date - Publication] : 2017[Date - Publication])) ") 
    handle_1 = Entrez.egquery(term = "Jennifer Runch AND ((2012[Date - Publication] : 2017[Date - Publication])) AND Leoard P. Byk") 
    handle_2 = Entrez.egquery(term = "Jennifer Runch AND ((2012[Date - Publication] : 2017[Date - Publication])) AND Southern Illinois University School of Medicine") 
    record = Entrez.read(handle) 
    record_1 = Entrez.read(handle_1) 
    record_2 = Entrez.read(handle_2) 
    pubmed_count = [] 
    for row in record["eGQueryResult"]: 
        if row["DbName"] == "pubmed": 
         pubmed_count.append(row["Count"]) 
    
    for row in record_1["eGQueryResult"]: 
        if row["DbName"] == "pubmed": 
         pubmed_count.append(row["Count"]) 
    
    for row in record_2["eGQueryResult"]: 
        if row["DbName"] == "pubmed": 
         pubmed_count.append(row["Count"]) 
    print(pubmed_count) 
    >>>['3', '0', '0'] 
    

    문제는 내가, 학생 이름 목록 ("med_name")의 다음 학생 이름 학생 이름 ("제니퍼 Runch")를 대체하기 위해 다음 학교와 의과 대학을 필요로하고 있다는 점이다 현재 멘토의 이름과 목록의 다음 멘토의 이름.

은 내가 pubmed에 내 이메일을 선언 한 후 루프를 작성해야 생각하지만, 나는 함께 코드의 두 블록을 연결하는 방법을 잘 모르겠습니다. 누구든지 두 블록의 코드를 연결하는 효율적인 방법을 알고 있거나 시도한 것보다 더 효율적인 방법으로이 작업을 수행하는 방법을 알고 있습니까? 감사합니다.

+0

질문이 아직 열립니까? –

+0

@ MaximilianPeters 다른 스레드에 게시 한이 질문에 대한 후속 질문이 있습니다. http://stackoverflow.com/questions/40161460/searching-on-pubmed-using-biopython –

답변

1

대부분의 코드가 있습니다. 단지 약간 수정해야했습니다.

은 테이블을 가정하면 다음과 같습니다

Jennifer Bunch |Southern Illinois University School of Medicine|Leonard P. Rybak 
Philipp Robinson|Stanford University School of Medicine   |Roger Kornberg 

다음과 같은 코드를 사용할 수

import xlrd 
from Bio import Entrez 
sheet = xlrd.open_workbook("HEENT.xlsx").sheet_by_index(0) 

med_name = list() 
med_school = list() 
mentor = list() 
search_terms = list() 
for row in range(0, sheet.nrows): 
    search_terms.append([sheet.cell_value(row, 0), sheet.cell_value(row,1), sheet.cell_value(row, 2)]) 

pubmed_counts = list() 

for search_term in search_terms: 
    handle = Entrez.egquery(term="{0} AND ((2012[Date - Publication] : 2017[Date - Publication])) ".format(search_term[0])) 
    handle_1 = Entrez.egquery(term = "{0} AND ((2012[Date - Publication] : 2017[Date - Publication])) AND {1}".format(search_term[0], search_term[2])) 
    handle_2 = Entrez.egquery(term = "{0} AND ((2012[Date - Publication] : 2017[Date - Publication])) AND {1}".format(search_term[0], search_term[1])) 
    record = Entrez.read(handle) 
    record_1 = Entrez.read(handle_1) 
    record_2 = Entrez.read(handle_2) 

    pubmed_count = ['', '', ''] 

    for row in record["eGQueryResult"]: 
     if row["DbName"] == "pubmed": 
      pubmed_count[0] = row["Count"] 
    for row in record_1["eGQueryResult"]: 
     if row["DbName"] == "pubmed": 
      pubmed_count[1] = row["Count"] 
    for row in record_2["eGQueryResult"]: 
     if row["DbName"] == "pubmed": 
      pubmed_count[2] = row["Count"] 

    print(pubmed_count) 
    pubmed_counts.append(pubmed_count) 

출력 필요한 수정 쿼리를 만드는 것입니다


['3', '0', '0'] 
['1', '0', '0'] 

를 사용하는 변수.

필요하지 않습니다하지만 도움이 될 수있는 몇 가지 다른 수정 :

  • Excel 시트를 통해 루프를 한 번만
  • 가게 미리 정의 된 목록에서 pubmed_count 값이 다시 빈 오면 때문에,의 크기 출력이 달라져서 어떤 값이 어떤 쿼리에 속해 있는지 추측하기 어렵게됩니다.
  • 모든 것이 더 최적화되고 미리 정제 될 수 있습니다. 질의를 목록에 저장하고 루프를 반복하면 코드 반복이 줄어들지 만 이제는 그 일을합니다.