Ограничение количества совпадений в поиске Biopython NCBIWWW

Я работаю над попыткой автоматизировать некоторые поиски BLAST. Мне нужно выбрать только три лучших результата из результатов 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

Добро пожаловать в StackOverflow! Можете ли вы привести воспроизводимый пример этого (например, некоторую последовательность fasta, которая дает более> 3 совпадений?) Я пытаюсь решить ту же проблему, но, похоже, получаю правильное количество совпадений (под <Hit>)

cnluzon 09.04.2019 15:03

Конечно! Не могли бы вы также поделиться своей последовательностью Fasta, чтобы я мог посмотреть?

AccidentalCube 09.04.2019 15:10

@cnluzon Обновление по этому поводу: я думаю, что моя проблема связана с разбором XML. На самом деле я нахожусь в процессе выяснения того, что я сделал неправильно, но я думаю, что это как-то связано с моим for вызовом цикла alignment.hsps и циклом вокруг них, а не с моими попаданиями. from Bio.Blast import NCBIXMLwith open("XML_Files/46_47.xml") as result_handle:blast_records = NCBIXML.parse(result_handle)x = 0for rec in blast_records:for alignment in rec.alignments:for hsp in alignment.hsps:#print(rec.query)#DNA ID

AccidentalCube 09.04.2019 15:49

О, я вижу! Что ж, если вы ищете выравнивания, возможно, вам следует использовать параметр alignments=3 вместо hitlist_size, как определено здесь: biopython.org/DIST/docs/api/Bio.Blast.NCBIWWW-module.html

cnluzon 09.04.2019 15:52

@Cnluzon Как вы думаете, вы могли бы быстро определить мировоззрение и список попаданий? Я не совсем вижу их разницу.

AccidentalCube 09.04.2019 15:56

Я не уверен на 100%, потому что не вижу больше информации в документации, но я предполагаю, что одному попаданию может соответствовать более одного выравнивания, и это будет причиной того, что вы получите больше, чем указанное количество элементов. в ваших списках, потому что вы получаете доступ к rec.alignments.

cnluzon 09.04.2019 16:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
6
296
1
Перейти к ответу Данный вопрос помечен как решенный

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

Ваше решение решило мою проблему. Мне нужно было указать как hitlist_size = 3, так и alignments=1, чтобы получить первые три совпадения и первую запись <HSP> в моем XML-файле.

AccidentalCube 09.04.2019 20:12

Рад слышать! :)

cnluzon 11.04.2019 10:34

Другие вопросы по теме