#python #biopython #ncbi
#python #biopython #ncbi
Вопрос:
Я работаю над попыткой автоматизировать некоторые поисковые запросы. Мне нужно получить только три первых результата из результатов BLAST, однако параметр hitlist_size
, похоже, не ограничивает мои поиски только тремя результатами. Независимо от того, какой размер я указываю, я все равно получаю> 3 обращений для большинства образцов (в других я получаю три, хотя я не уверен, что это просто совпадение). У кого-нибудь есть какое-либо представление об этом?
import Bio
from Bio import SeqIO
from Bio.Blast import NCBIWWW
from Bio.Blast import NCBIXML
fasta_string = open("FASTA_Files/48_50.fasta").read()
result_handle = NCBIWWW.qblast("blastn", "nt", fasta_string,hitlist_size=3)
with open("XML_Files/48_50.xml", "w") as save_to:
save_to.write(result_handle.read())
result_handle.close()
Следующая последовательность FASTA выдает ожидаемое количество 46
обращений, но превышает ожидаемое количество обращений для 47
:
>46
NNNNNNNNNNGNNNNNNTGCAGTCGNANNNNNNNNNNNNNNNNNAGCTTGCTGCTTCGCTGACGAGTGGCGGACGGGTGA
GTAATGTCTGGGAAACTGCCTGATGGAGGGGGATAACTACTGGAAACGGTGGCTAATACCGCATAACGTCGCAAGACCAA
AGAGGGGGACCTTCGGGCCTCTTGCCATCAGATGTGCCCAGATGGGATTAGCTTGTTGGTGAGGTAACGGCTCACCAAGG
CGACGATCCCTAGCTGGTCTGAGAGGATGACCAGCCACACTGGAACTGAGACACGGTCCAGACTCCTACGGGAGGCAGCA
GTGGGGAATATTGCACAATGGGCGCAAGCCTGATGCAGCCATGCCGCGTGTATGAAGAAGGCCTTCGGGTTGTAAAGTAC
TTTCAGCGGGGAGGAAGGNGTTGTGGTTAATAACCGCAGCAATTGACGTTACCCGCANAANAAGCACCGGCTAACTCCGT
GCCAGCAGCCGCGGTAATACGGAGGGTGCANGCGTTAATCGNAATTACTGGNCGTAAAGCGCACGCAGGCGGTCTGTCAA
GTCTGATGTGAAATCCCCGGGCTCAACCTGGNAACTGCATTCNAAACTGGCAGGCTTGAGTCTTGNAGANGGGGGGTAGA
ATTCCAGGTGTANCGNTGAAATGCGTANAGATCTGGANGNAATACCGGTGGCNAANGCGGCCCCCTGGACAAAGACTGAC
GCTCANGTGCGAAAGCGTGGNGGAGCAAANAGGATTAGATACCCTGGTAGNCCNNCGCCNNANACGATGTCTACNTGGNA
GGNTTGTGNCCTTGAGGCGTGNCTNNCCNGNAGCTNAACGCGTTTAAGTANANCNNCCTGGGGCGAGCNACGGGCNGCNN
GGNTNAAAACNNNNNNTGNNNTTNNACGGGNGNNCCCCGCANNANCCGGCTGNNAGCATGNTGGATTNAANTTCGATNNN
NNCGCGAAGAANCCNNANNNNNGNNNNNNNANNNNNNNNNNAANNNTNNNNNANANNNNNNNNNNNNNNNGNNNNCTNNN
AGNANNGNNNCTGCATGGNNNNCNNNCNNGNTCNNGNNNNNNNNNNNNNGNNNNNNNNCCNNNANNNNNNNNNNNNTNAT
CNNNNNNNNNNNNNTNNNNNNNNNNNNNAGNNNNNNNNCNNNNNNNNNNANNTNNNAANN
>47
NNNNNNNNNNNNNNNNNNNNNNNNGNNNNNCGGGTNNCCNNNNGCTGGNTGNNNTGCTGACGAGTGGCGGACGGGTGAGT
AATGTCTGGGAAACTGCCTGAAGGGGGGGGATTCCTACTGGCCAGGGTGGCTAATACCGGGTAACGTCGNNNGANCAAAG
AGGGGGACCTTCGGGCCTCTTGCCATCACATGTGCCCGGATGGGATTAGCTTGTTGGTGAGGTAACGGCTCACCAAGGCG
ACGATCCCTAGCTGGTCTGAGAGGATGACCAGCCNCACTGGAACTGAGACACGGTCCCGACTCCTACGGGAGGCANCAGT
GGGGAATATTGCTCTTGGGCGCAAGCCTGATGCAGCCATGCCGCGGGTATGAGGAAGGCCTTCGGTTTGTAAAGTACTTT
CTCCGGGGAGGAAGGNGTNGTGGTGAATAACCGCTACANTTGANNCTNCCCGCNNAANAACCACCNGNTAACTCCNTGCN
NNNNGCCGCGGTAATACGGANGGTGCAAGNGTTAATCGNANTTACTGNNTGTTGAGCGCACGNNGGCGGCCTGTCNNNTC
TNATGTGAGATCCCCGGGCTCNCCCTGNNACCTGCATTCGNNNNNTGNNANGCTNGANTCTTGNNNNGNNGNGGNAGNAA
TTCCNNGTGTNNCGNNGAAATGCNNANAGATCTGNANANANNACNGGNGNCCAANGNNGNCCCCTGNTCTCNGACTGACG
CNNGAGTGCTGAANNGTGNAGAGCGNACAGGATTANANNNCCNGNTAGNCCGNCNCCNCACACCNATGTCTACATGNGAG
GNTNNNGNNNNNTGNGGCNNNNCNNTCCNNNAGCTNANGNNGTTNAANTANATCNNNCTNNNNCNNGCNNGGGGNCANNA
NGGGNNNAAANNTNNNNATNAATNTGACGGANNNNNCNNNNNNNNCNNNNNNANCATGNGGATTNANNNTNNNTNNNNNC
NNNNNANAACCNNANNNNNNNNNNNNNNTNNNNNNNANNNTNNNNNNNTNNNNNNGNNNNCNNNNNNNNACTNNNNNNNC
NNNNNNNNCANNGNNNNNNNNNNNANGNTNNNNNTGNNNNAANNNTGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNTN
NNNNNNTNNNNNNNTNNNNTNNNNNNNNNNNNNNNNNNNNNNNTNNNNNNNNTCNNNNNN
Комментарии:
1. Добро пожаловать в StackOverflow! Можете ли вы предоставить воспроизводимый пример этого (т. Е. некоторую последовательность fasta, которая производит более> 3 обращений?) Я пытаюсь решить ту же проблему, но, похоже, получаю нужное количество обращений (ниже
<Hit>
)2. Конечно! Не могли бы вы также поделиться своей последовательностью fasta, чтобы я мог посмотреть?
3.@cnluzon Обновите это: я думаю, что моя проблема связана с моим синтаксическим анализом XML. Я нахожусь в процессе выяснения того, что я сделал не так, но я думаю, что это как-то связано с моим
for
вызовом циклаalignment.hsps
и циклом вокруг них, в отличие от моих обращений.from Bio.Blast import NCBIXML
with open("XML_Files/46_47.xml") as result_handle:
blast_records = NCBIXML.parse(result_handle)
x = 0
for rec in blast_records:
for alignment in rec.alignments:
for hsp in alignment.hsps:
#print(rec.query)#DNA ID
4. О, я вижу! Что ж, если вы ищете выравнивания, возможно, вам следует использовать параметр
alignments=3
вместоhitlist_size
того, как определено здесь: biopython.org/DIST/docs/api/Bio.Blast.NCBIWWW-module.html5. @Cnluzon Как вы думаете, вы могли бы быстро определить выравнивания по сравнению со списком попаданий? Я не совсем понимаю их разницу.
Ответ №1:
Проблема заключается в том, что попадание — это нечто иное, чем выравнивание. Совпадение — это совпадение последовательности в базе данных, тогда как выравнивание — это фактическое положение нуклеотидов. Это может произойти несколько раз для одной и той же последовательности в базе данных.
В случае, который вы пробовали, xml, который это сохраняет, действительно содержит три элемента <Hit>
, но последнее полученное вами обращение содержит семь <Hsp>
записей, которые, похоже, являются тем, что вы повторяете в цикле:
for rec in blast_records:
for alignment in rec.alignments:
for hsp in alignment.hsps:
print(rec.query) #DNA ID
alignments=3
Я думаю, что указание вместо обращений даст вам максимум 3 выравнивания за попадание. Вы можете указать оба, если хотите контролировать количество обращений и количество выравниваний.
Комментарии:
1. Ваше решение решило мою проблему. Мне нужно было указать оба
hitlist_size = 3
, а такжеalignments=1
для получения первых трех обращений и первой записи <HSP> в моем XML-файле.2. Рад слышать! 🙂