从fastq读取质量文件并计算平均值

时间:2018-10-23 18:49:11

标签: average

我能听懂一些bash和R,但还不足以写某事。 我已经使用PRINSEQ从我的FastQ文件中提取了qual文件,我有类似的东西:

>R8ABE:00036:00036
20 20 20 25 15 25 30 30 25 25 25 15 20 15 20 20 25 25 15 21 15 21 21 26 34 36 25 25 28 25 25 21 31 25 25 25 11 25 25 25 25 13 23 13 13 15 13 13 23 26 26 21 25 19 25 19 25 19 25 25
11 21 21 21 21 15 21 21 29 21 21 15 21 21 21 13 13 23
>R8ABE:00038:00039
20 20 15 20 25 15 20 23 14 13 14 14  8 13 23 23  8 13 13 13 13 13  7 13 13 13  8 21 34
>R8ABE:00038:00042
23 26 27 30 34 15 25 25 20 25 25 30 31 33 33 39 39 16 25 25 25 25 25 12 25 25 19 25
>R8ABE:00038:00047
25 25 25 25 19 13 14 14  8 13 13 13  8 13 13  8 13 13 20 20 30 30 34 34 16 25 19 25 25 19 21 15 21 15 21 31 21 25 25 25 15 25 30 30 19 27 29 36 37 36 36 32 35 33 33 33 19 25 25 25
25 25 25 25 25 34 28 28 24 15 15 13  9 13 13  8 13 23 23 17 23 23 34 15 20 15 21 21 21 21 15 21 25 25 25 25 25 28 22 25 27 28 28 10 15 15 16 16 15 15 15 25 25 30 30 25 25 19 25 25

我想计算每个序列的平均值。 “>”之后的名称不是必需的。对于我来说,重要的是要按原始顺序(如列表)使用这些“方法”,类似于:

21.62
22.16
30.88
.
.

有十进制数字没关系。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以像这样使用python脚本:

from __future__ import division ## I'm assuming you're using python 2
with open('my_quality_file.fastq') as fh:
  for line in fh:
    if line.startswith('>'):
      continue
    scores = map(float, line.strip().split())
    print sum(scores) / len(scores)

对于每条上都有质量得分的行,它将转换为浮点数列表,然后打印算术平均值。