美文网首页小教程收藏
分析现代序列文件

分析现代序列文件

作者: 兰宇轩 | 来源:发表于2019-07-13 12:28 被阅读25次

FSATA 格式是一个古老的格式了,现在生物信息学从业者更多地使用的是FASTQ 格式。
首先,我们先来获取我们此次要分析的 FASTQ 文件。

wget  ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/phase3/data/NA18489/sequence_read/SRR003265.filt.fastq.gz

现在我们来打开文件。

import gzip
from Bio import SeqIO
recs = SeqIO.parse(gzip.open('SRR003265.filt.fastq.gz','rt'),
'fastq')
rec = next(recs)
print(rec.id, rec.description, rec.seq)
print(rec.letter_annotations)

我们现在看看 reads 的分布。

from collections import defaultdict # defaultdict 是字典的一种,不需要对字典进行初始化
recs = SeqIO.parse(gzip.open('SRR003265.filt.fastq.gz'), 'fastq')
cnt = defaultdict(int) #此时字典的默认值为整数
for rec in recs: # 分析每一个 read
    for letter in rec.seq:
        cnt[letter] += 1 #统计每一个碱基的个数
tot = sum(cnt.values()) #碱基的总数
for letter, cnt_value in cnt.items():
    print('%s: %.2f %d' % (letter, 100. * cnt_value / tot, cnt_value)) #每个碱基的百分数和绝对数量

在这里面我们关心测序结果为 N 的碱基,N 表示测序没有测准。我们以 reads 的位置为自变量,N 的个数为因变量作图。

import seaborn as sns
import matplotlib.pyplot as plt
recs = SeqIO.parse(gzip.open('SRR003265.filt.fastq.gz'), 'fastq')
n_cnt = defaultdict(int)
for rec in recs:
    for i, letter in enumerate(rec.seq):
        pos = i + 1
        if letter == 'N':
            n_cnt[pos] += 1
seq_len = max(n_cnt.keys()) #用于设置横坐标长度
positions = range(1, seq_len + 1)
fig, ax = plt.subplots()
ax.plot(positions, [n_cnt[x] for x in positions])
ax.set_xlim(1, seq_len)
N 的数量随 read 位置的变化

我们进一步分析 Phred 分数的分布,Phred 分数衡量了测序的质量。

recs = SeqIO.parse(gzip.open('SRR003265.filt.fastq.gz'), 'fastq')
cnt_qual = defaultdict(int)
for rec in recs:
    for i, qual in enumerate(rec.letter_annotations['phred_quality']):
    if i < 25: #在上一个图中可以发现当 read 在25bp内时都测得很准,因此不需要得到其 Phred 分数
        continue
    cnt_qual[qual] += 1
tot = sum(cnt_qual.values())
for qual, cnt in cnt_qual.items():
    print('%d: %.2f %d' % (qual, 100. * cnt / tot, cnt))

对之前得 Phred 分数分布作图。

recs = SeqIO.parse(gzip.open('SRR003265.filt.fastq.gz'), 'fastq')
qual_pos = defaultdict(list)
for rec in recs:
    for i, qual in enumerate(rec.letter_annotations['phred_quality']):
        if i < 25 or qual == 40: # Phred 分数为40是这里面的最大值了,因此可以移除
            continue
        pos = i + 1
        qual_pos[pos].append(qual)
vps = []
poses = sorted(qual_pos) #通过键进行排序
for pos in poses:
    vps.append(qual_pos[pos]) #由字典转化为列表,便于作图
fig, ax = plt.subplots()
sns.boxplot(data=vps, ax=ax)
ax.set_xticklabels([str(x) for x in range(26, max(qual_pos.keys()) + 1)])
Phred 分数随 read 位置的变化
小结

在这一章中我们学习了:

  • 如何读取 FASTQ 格式文件
  • 如何分析 FASTQ 格式文件

相关文章

  • 分析现代序列文件

    FSATA 格式是一个古老的格式了,现在生物信息学从业者更多地使用的是FASTQ 格式。首先,我们先来获取我们此次...

  • 基于序列分析的m6A数据库汇总

    基于序列分析的数据库简介 基于基因序列来进行预测的数据库,一般的输入文件都是序列文件。序列文件的话一般都是 fas...

  • WSL 一行命令 快速合并文件 Fasta Fas合并

    有需求将多个单个基因序列.fasta文件合并到一个多序列的.fasta文件里,方便后续的序列比对和进化分析 采用W...

  • MEGA | 多序列比对

    功能1:序列编辑 首先,要讲一条使用mega打开序列文件的技巧:直接将要分析的文件拖到mega软件的图标上,然后就...

  • TBtools基因家族分析详细教程(3)基因家族成员的进化分析1

    新建文件夹进化分析1 包括1多序列比对与可视化Mega(Muscle)进行序列比对,JalView进行多序列比对结...

  • python——fasta序列的读取和提取处理

    fasta文件的读取是所有数据分析的第一步。fasta文件是包含一行含有">"的序列名和一行包含其对应的序列的文件...

  • SAMtools——bam文件去重

    在对bam文件进行排序后,需要去除重复序列,以减少后续分析的计算压力。 sam文件转换为bam文件——SAMtoo...

  • 2021-03-07

    测序fa文件里的序列: sam文件里的序列: sam序列=reference文件序列,不管正负,都是一个顺序的序列...

  • 2020 时序分析随笔

    多元时间序列分析 通过分析序列自身的变化规律,构建时间序列模型 一元时间序列分析方法 多元时间序列分析 在 198...

  • 生物数据格式 - SAM/BAM

    格式 sam文件是短序列比对生成的文件,是二代测序中最核心的文件。在RNAseq,变异检测等分析中,都需要首先生成...

网友评论

    本文标题:分析现代序列文件

    本文链接:https://www.haomeiwen.com/subject/bbkpkctx.html