如何根据固定长度的碱基序列生成指定长度的,所有组合的序列结果?
好久没有写文章了,因为近期在搞一个关于文献以及期刊信息查询,下载,绘图于一体的功能软件,所有忙的有点懵B,就没有时间写文章了。哈哈哈,,,拉我起来,我还可以写。好了,直接进入正题。
简单粗暴直接上代码,拿去就可以用(我又不收费)
# -*- coding: utf-8 -*-
"""
Created on Wed Sep 23 21:59:24 2020
Function: create specified sequence with specified length
@author: 科研君-小白
#QQ:3089863163
#vx:lyq865770
"""
def get_target_seq(len_seq,base_seq,show_seq,out_path,top_seq=10):
##载入所需模块
import itertools as it
import pandas as pd
out_seq = pd.DataFrame() ##创建空数据框
n_id = 0
all_seq = list(it.product(base_seq,repeat=len_seq)) ##生成所有的组合情况
##将列表转化为数据框存储
for sub_seq in all_seq:
n_id = n_id + 1
new_sub_seq = pd.DataFrame(
{
'seq_id':('第' + str(n_id) + '条序列'),
'seq':''.join(sub_seq)
},
index=[1]
)
out_seq = out_seq.append(new_sub_seq) ##数据框逐行追加
##是否输出到终端
if show_seq == True:
top_seq = out_seq[0:top_seq]
print("-"*30)
print('{:<30}'.format("生成的序列总条数为:" + str(len(all_seq))))
print('{:<30}'.format("原始序列为:"+ str(base_seq)))
print('{:<30}'.format("生成的每条序列长度为:"+ str(len_seq)))
print("-"*30)
print('{:<30}'.format("生成的前"+ str(len(top_seq)) + '条序列如下:'))
print(top_seq)
##数据保存,超过100万行,要保存成txt格式!!!
if len(all_seq) > 1000000:
out_seq.to_csv(out_path + '/all_seq.txt',sep='\t',index=False)
else:
out_seq.to_excel(out_path + '/all_seq.xlsx',header=True,index=False)
##函数调用
get_target_seq(len_seq=5, ##int
show_seq=True,## True or False
top_seq=200,
base_seq=['A','T','C','G'],
out_path='D:\新桌面', ##存储路径
)
这个脚本的功能是,根据已知的…,还是给大家举个栗子吧,这样通俗易懂。
我的碱基种类有【A,T,C】三种,想生成长度为6bp的序列,应该怎么修改脚本参数呢?如下所示:
base_seq=['A','T','C'],
len_seq=6,
show_seq=True, ##把结果打印到终端,False则不输出
Top_seq=200, ##默认展示前200条序列
out_path="指定保存的路径"
好了,今天分享的干货就这些,还是狗命要紧,我先去眯会儿