我有一个细菌基因组,我怎么能在python中将它随机切片成150bp长的DNA片段?

2024-06-01 10:17:43 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在python中将其随机切片为150bp长的片段?我想把它切成1000块,然后把每次的碎片集中在一起。这是为了模拟Illumina测序。你知道吗

以下是示例:

seq = 'ATGGAAAAAGAGTATACGATTGGATTAGATATTGGGACAAATTCGGTTGGATGGGCAGTGTTGACGGATG'
len(seq)=70

我想随机将这个字符串切成5个较小的字符串,固定长度为10,而不会弄乱字母的原始顺序。预期结果:

seq1= ['ATGGAAAAAG', 'AGTATACGAT', 'TGGATTAGAT', .......]

它是这样的:

seq1= seq[0:10] + seq[10:20] + seq[20:30] + seq[30:40] + seq[40:50]

但我希望它是随机的,而不是相邻的。你知道吗

对于seq[n:n+10],n是切片的起点。我需要它是随机的,也就是说我随机选取一个起始点,在那个起始点取出一个10bp长的DNA切片。然后我继续在随机的起点切割DNA。你知道吗

然后我需要一次又一次地做同样的切片,总共10次:

seq2=['', '', '', .....]
seq3=['', '', '', .....]
seq4=['', '', '', .....]
seq5=['', '', '', .....]
seq6=['', '', '', .....]
seq7=['', '', '', .....]
seq8=['', '', '', .....]
seq9=['', '', '', .....]
seq10=['', '', '', .....]

然后把序列1到序列10放在一起。你知道吗

谢谢你。你知道吗


Tags: 字符串示例len顺序字母切片序列seq
2条回答
#calculate how much extra space there is
extra_length = total_length-string_count*string_length
#choose how to allocate extra space
gaps = np.random.choice(extra_length,string_count)
gaps.sort()
gaps = np.diff(gaps)
#we now have a list of random numbers that add up to extra_length
start = 0
end = start+string_length
seq1 = [seq[start:end]]
for string_index in range(string_count-1):
   #each string skips a random distance determined by our gaps variable
   start = end+gaps[string_index]
   end = start+string_length
   seq1.append(seq[start:start+string_length])

我只需要选择一个随机的起点,然后从那里创建一个子串。 由于样本长度的原因,您的起点将排除最后150个字符。你知道吗

然后我会列一个清单,以便以后操作。你知道吗

(我在下面创建一个随机的DNA字符串进行测试。)

from random import randint, choice

#just for testing we will assign seq randomly.
seq = ''.join(choice(['A', 'C', 'G', 'T']) for pony in range(1000))

sample_length = 150
number_of_samples = 1000

samples = []

for pony in range(number_of_samples):
    sample_start = randint(0, len(seq) - sample_length)
    samples += [seq[sample_start:sample_start+sample_length]]

print(samples[0])
print(samples[1])

如果您需要多次执行此操作,您可以始终将上述内容放入函数中,然后执行以下操作:

samples_list = [do_func() for pony in range(10)]

相关问题 更多 >