EST数据分析

一、EST数据来源

     本研究所用的小麦EST数据库来自GenBank数据库(截止2013年12月),共1286914条序列

二、低质量序列部分以及污染序列去除

      通过逐条扫描EST序列去掉EST序列中低质量部分。具体步骤为,从5'端开始向3'端扫描每一条EST序列,如果在10bp长度范围内出现两次以上除'A','T','C','G'外的字符,则将该10bp序列以及3'端序列去除。python程序是:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from Bio import SeqIO

out = open('low_quality_wheat_est.fasta', 'w')
record_dict = SeqIO.index('wheat_est.fasta', "fasta")
a = []
for key in record_dict.keys():
    for i in range(len(str(record_dict[key].seq))-10):
        new = record_dict[key].seq.upper()[i:(i+10)]
        if new.count('A') + new.count('T') + new.count('C') + new.count('G') <= 8:
            out.write('>%s\n%s\n' % (key, record_dict[key].seq[:i]))
            a.append(key)
            break
    if key not in a:
        out.write('>%s\n%s\n' % (key, record_dict[key].seq))
out.close()

    利用seqclean去除EST序列的载体序列,接头序列和polyA尾巴,并以100bp为长度阈值去除短序列

./seqclean low_quality_wheat_est.fasta -v UniVec -c 12 #其他参数默认

进一步使用cross_match 来mask载体序列,以确定载体完全去除。具体做法是:若masking的位置距离序列5' 或3'小于30bp,则直接去除两端到masking位置的序列;否则选择被mark的序列以及两侧各20bp序列,与小麦基因组序列比对,如果identity 大于90%并且overlap 长度大于30bp,则认为不是载体序列(即masking出错),否则认为masking正确。如果正确,否则根据masking位置将序列分成两部分,然后分别与小麦基因组比对,保留能够比对到小麦基因组部分,若同时比对到小麦基因组且位于不同的contig上,则认为是嵌合体序列,此时将整条序列去除,比对的标准是dentity 大于90%,overlap 长度大于30bp。运行cross_match的脚本,由于软件一次智能运行较小的数据集,故将输入文件分割成21个小文件。

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#!/usr/bin/python
#coding:utf-8
"""
这个脚本用来循环调取shell命令,同时读取文件和输出内容到文件
"""
import subprocess
i = 1
while i <= 21:
    input1 = "low_quality_wheat_est_"+str(i) + ".fasta"
    filename = open(input1, 'r')
    handle = open(r'cross_match_screen_out.txt', 'a+')
    proc = subprocess.Popen(['cross_match.manyreads', input1, 'UniVec', '-minmatch', '10', '-minscore', \
                             '20', '-screen'], stdout=handle, shell=False)
    proc.wait()
    print i
    i += 1

接下来是过滤低复杂度序列(low-complexity),从5'端开始向3'端扫描每一条EST序列,步长为1bp,以12bp为单位计算序列的墒值,并取整条序列的墒值中位数,若墒值小于0.19 并且不能比对到小麦基因组,则认为low-complexity。于使用下列脚本

from Bio import SeqIO
import entropy

outfile = open('low_complexity_est.txt', 'w')
record_dict = SeqIO.index('low_quality_wheat_est.fasta.clean.screen_filter.fasta', "fasta")


def median(lst):
    if not lst:
        return
    lst = sorted(lst)
    if len(lst) % 2 == 1:
        return lst[len(lst)/2]
    else:
        return (lst[len(lst)/2-1]+lst[len(lst)/2])/2.0

for key in record_dict.keys():
    a = []
    for i in range(len(str(record_dict[key].seq)) - 12):
        new = record_dict[key].seq.upper()[i:(i + 12)]
        d = entropy.shannon_entropy(str(new))
        a.append(d)
    if median(a) < 0.21:
        outfile.write('%s\t%s\n' % (key, median(a)))


使用RepeatMasker软件屏蔽序列中的重复序列。说明:如果EST 的数据量比较大,在拼接之前要进行聚类分析,可以先屏蔽一下序列中的载 体,可以提高聚类的准确性,防止很大的cluster形成。

 

RepeatMasker  -e ncbi -s -low -no_is -species wheat low_quality_wheat_est.fasta.clean.screen_filter_complexity.fasta

来自同一克隆的est使用cap3中的工具formcon 生成constraint file,使用cap3拼接时使用-t加上克隆信息

你可能感兴趣的:(生物信息,生物)