Я использую Biopython в первый раз. У меня есть данные о последовательности неизвестных организмов, и я пытаюсь использовать BLAST, чтобы определить, от какого организма они, скорее всего, произошли. Для этого я написал следующую функцию:
def find_organism(file):
"""
Receives a fasta file with a single seq, and uses BLAST to find
from which organism it was taken.
"""
# get seq from fasta file
seqRecord = SeqIO.read(file,"fasta")
# run BLAST
blastResult = NCBIWWW.qblast("blastn", "nt", seqRecord.seq)
# get first hit
blastRecord = NCBIXML.read(blastResult)
firstHit = blastRecord.alignments[0]
# get hit's gi number
title = firstHit.title
gi = title.split("|")[1]
# search NCBI for the gi number
ncbiResult = Entrez.efetch(db="nucleotide", id=gi, rettype="gb", retmode="text")
ncbiResultSeqRec = SeqIO.read(ncbiResult,"gb")
# get organism
annotatDict = ncbiResultSeqRec.annotations
return(annotatDict['organism'])
Он работает нормально, но для извлечения организма для каждого вида требуется около 2 минут, что мне кажется очень медленным. Я просто думаю, мог бы я сделать лучше. Я знаю, что могу создать локальную копию NCBI для повышения производительности, и я могу это сделать. Тем не менее, я подозреваю, что сначала запрашивать BLAST, а затем брать идентификатор и использовать его для запроса Entrez — это не выход. Есть ли у вас другие предложения по улучшению?
Спасибо!