滑动窗口并识别列表中的特定字符

时间:2018-12-08 09:18:05

标签: python-3.x

说明:编写一个脚本,该脚本将计算dna字符串的%GC 基于可调整大小的滑动窗口。所以说长度 窗口为L = 10个基数,那么您将沿着 从位置0到末端的dna链(小心,不要太远...) 然后将碱基“提取”为子字符串并分析GC含量。 将数字放在列表中。 dna字符串可能很大,因此您 将要从文件中读取字符串,并打印结果 到一个逗号分隔的输出文件,可以移植到Excel中进行绘图。

对于最终数据分析,请使用L = 100的窗口并分析文件中的两个基因组: Bacillus_amyloliquefaciens_genome.txt Deinococcus_radiodurans_R1_chromosome_1.txt

但是首先,要使脚本正常运行,请使用以下培训师数据集。让窗口L = 4。输入和输出示例如下:

输入: AACGGTT

输出:

0,0.50
1,0.75
2,0.75
3,0.50

我的代码:

dna = ['AACGGTT']
def slidingWindow(dna,winSize,step):
    """Returns a generator that will iterate through
    the defined chunks of input sequence.  Input sequence
    must be iterable."""

    # Verify the inputs
    #try: it = iter(dna)
   # except TypeError:
    #raise Exception("**ERROR** sequence must be iterable.")
    if not ((type(winSize) == type(0)) and (type(step) == type(0))):
        raise Exception("**ERROR** type(winSize) and type(step) must be int.")
    if step > winSize:
        raise Exception("**ERROR** step must not be larger than winSize.")
    if winSize > len(dna):
        raise Exception("**ERROR** winSize must not be larger than sequence length.")

    # Pre-compute number of chunks to emit
    numOfwins = ((len(dna)-winSize)/step)+1

    # Do the work
    for i in range(0,numOfwins*step,step):
        yield dna[i:i+winSize]
        chunks = slidingWindow(dna,len(dna),step)
        for y in chunks:
            total = 1 
            search = dna[y]
            percentage = (total/len(dna))
            if search == "C":
                        total = total+1
                        print ("#", y,percentage)
            elif search == "G":
                        total = total+1
                        print ("#", y,percentage)
            else:
                    print ("#", y, "0.0")

"""
MAIN
calling the functions from here
"""

#    YOUR WORK HERE
#print ("#", z,percentage)

1 个答案:

答案 0 :(得分:1)

在处理复杂问题时,将其分为更简单的子问题会很有帮助。在这里,您至少有两个独立的概念:一个基础窗口和该窗口的统计信息。为什么不一次解决一个问题?

这是一个简单的生成器,可以生成所需大小的块:

def get_chunks(dna, window_size=4, stride=1):
    for i in range(0, len(dna) - window_size + 1, stride):
        chunk = dna[i:i + window_size]
        assert len(chunk) == window_size
        yield chunk


for chunk in get_chunks('AACGGTT'):
    print(chunk)

它显示以下输出:

AACG
ACGG
CGGT
GGTT

现在,有了这个功能,您是否可以编写一个简单的函数来接受一个四个字符的字符串并为其生成适当的统计摘要? [请将其作为对您问题的单独答复。是的,乍一看听起来很奇怪,但是StackOverflow 确实鼓励您发布问题的答案,以便您分享所学到的知识。]