如何根据固定长度的碱基序列生成指定长度的,所有组合的序列结果?

如何根据固定长度的碱基序列生成指定长度的,所有组合的序列结果?


好久没有写文章了,因为近期在搞一个关于文献以及期刊信息查询,下载,绘图于一体的功能软件,所有忙的有点懵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="指定保存的路径"

好了,今天分享的干货就这些,还是狗命要紧,我先去眯会儿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值