2015-02-08 3 views
-1

Я новичок в программировании и буду благодарен за вашу помощь!случайным образом удалять части последовательности для создания более короткой последовательности

У меня есть файл с ~ 20K последовательностей со следующим форматом:

>sequence_1 
MAADTPGKPSASPMAGAPASASRTPDKPRSAAEHRKSSKPVMEKRRRARINESLAQLKTLILDALRKESSRHSKLEKADILEMTVRHLRSLRRVQVTAALSADPAVLGKYRAGFHECLAEVNRFLAGCEGVPADVRSRLLGHLAACLRQLGPSRRPASLSPAAPAEAPAPEVYAGRPLLPSLGGPFPLLAPPLLPGLTRALPAAPRAGPQGPGGPWRPWLR 

>sequence_2 
MGWDLTVKMLAGNEFQVSLSSSMSVSELKAQITQKIGVHAFQQRLAVHPSGVALQDRVPLASQGLGPGSTVLLVVDKCDEPLSILVRNNKGRSSTYEVRLTQTVAHLKQQVSGLEGVQDDLFWLTFEGKPLEDQLPLGEYGLKPLSTVFMNLRLRGGGTEPGGRS 

Я хочу, чтобы создать случайные фрагменты этих последовательностей длины ~ 50-100 символов. Мне нужно сохранить первоначальный порядок неповрежденным (поэтому я не произвожу случайных символов).

Примеры последовательностей я мог бы сделать из> sequence_1 будет:

MAADTPGKPSASPMAGAPASASRTPDKPRSAAEHRKSSKPVMEKRRRARINESLAQLKTLILDALR 

или

MTVRHLRSLRRVQVTAALSADPAVLGKYRAGFHECLAEVNRFLAGCEGVPADVRSRLLGHLAACLRQLGPSRRPASLSPAAPAEAPAPEVYAGRPLLPSLGGPFPLLAPPLLPGLTRALPAAPRAGPQGPGGPW 

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

+0

я не знаю достаточно о кодировании еще даже попробовать что-нибудь. Я полностью потерял о том, как подойти к этой проблеме. Сожалею. – juneau

+0

Итак, что именно вы хотите? Одна случайная подпоследовательность из каждой исходной последовательности? Или больше? Какой формат вывода вы хотите? Ваш ввод выглядит как FASTA; вы хотите, чтобы результат был таким же, или это всего лишь одна последовательность на строку в порядке? Разделяются ли начальные позиции и длины, или вы хотите что-то еще? – Borodin

+0

@Borodin, это может быть одна или несколько случайных подпоследовательностей из каждой исходной последовательности, поэтому в зависимости от того, что проще. Да, выход fasta был бы идеальным. Начальные позиции и длины необязательно должны быть распределены равномерно, поэтому снова, однако, проще всего написать сценарий. Самое большое ограничение состоит в том, что последовательности должны быть между 50-100 аминокислотами (или символами) в длину. Кроме того, если возможно, было бы идеальным, чтобы сценарий генерировал новые случайные последовательности каждый раз, когда он запускался. Спасибо. – juneau

ответ

0

Используйте случайно сгенерированный старт для среза:

from random import * 

def fifty_slice(sequence): 
    i = randrange(0, len(sequence) - 50) 
    return sequence[i:i+50] 
+0

Я попытался сохранить это как скрипт и запустить его в исходном файле, но он создал двоичный файл для вывода. Я не уверен, правильно ли я использую его. – juneau

+0

Просто поместите это в свой основной файл и передайте последовательности в качестве аргументов. –

-1

Я думаю, что вы после реализации древовидной структуры данных в Python.

Каждая строка из ваших последовательностей 20 К каждый является родительскими узлами, а затем вы можете создать код, который создает дочерние элементы для каждой из случайных подпоследовательностей. Каждый из детей может также стать родителями, если это необходимо, хотя я не думаю, что описанная вами проблема требует этого.

см https://github.com/caesar0301/treelib