By yangyulei, 15 July, 2026

一、为什么要进行数据预处理?

  1. 软件分析失败,往往始于输入数据文件预处理

有的软件的整个 pipeline 对输入文件的格式要求非常严格:基因 ID 是否一致、CDS 是否符合阅读框、序列命名是否有特殊字符…… 任何一个细节不达标,后续的 其他分析流程都可能直接报错,而且报错信息有时候会很 "隐晦",让你半天找不到原因。

  1. 影响结果,造成极端值误差干扰

就算软件勉强跑通了,脏数据带来的影响更可怕。

举个例子,比如有天你需要绘制wgd的Ks 分布图,这时候你可能会遇到:长度过短的序列会产生不可靠的 Ks 值,包含终止密码子的序列会导致计算异常,冗余的可变剪接转录本会造成同源对重复计数…… 这些问题不会让程序崩溃,但会在你的 Ks 分布图上产生大量极端值和噪音,严重干扰古老 WGD 峰值的识别,甚至得出完全错误的进化结论。

 

二、处理基因序列时,需要注意哪些?

  1. 先读文档!搞清楚输入文件的格式要求

这是最容易被忽略但最重要的一步。

在动手处理序列之前,一定要先把 程序 的官方文档、README、帮助文件完整看一遍,重点确认:

  • 输入文件格式:是 FASTA 还是其他格式?核酸还是蛋白?

  • 基因 ID 规则:CDS 文件和蛋白文件的 ID 是否需要完全对应?是否允许有特殊字符(如下划线、点号、竖线)?

  • 文件命名规范:物种缩写是否有要求?文件名会不会影响后续脚本的解析?

如果拿到序列直接上手筛,结果跑到一半才发现 ID 对不上,又得从头返工。

 

  1. 序列筛选:严格还是宽松,要看你的研究目的

清洗序列时常见的问题有:最短序列长度到底设多少 bp 合适?

这个没有标准答案,取决于你的研究对象和分析目的

  • 如果是做古老 WGD 检测(Ks 峰值通常在 0.1~3.0 之间),序列太短会导致同义替换数估计不稳定,建议设置相对严格的阈值,比如 CDS 最短 300bp(即 100 个氨基酸)
  • 如果研究对象是近期分化的近缘物种,或者关注的是年轻的重复基因,可以适当放宽到 150bp 左右
  • 同时也要注意去除过长的异常序列 —— 可能是基因预测错误或融合基因

 

  1. 根据序列性质,剔除有问题的基因序列

例如,在CDS 预处理的核心环节中,需要检查:

  • 序列长度是否为 3 的倍数:CDS 编码氨基酸,长度必须是 3 的整数倍。如果不是,说明基因预测有问题或者序列截取错误,直接剔除。
  • 是否以起始密码子开头、终止密码子结尾:很多 Ka/Ks 计算工具默认要求完整的编码区,缺少起始或终止密码子可能导致计算偏移。
  • 是否包含内部终止密码子:一条 CDS 序列中间出现了终止密码子,有可能是假基因、移码突变或者基因预测错误
  • 碱基组成是否正常:有没有大量的 N(模糊碱基)?有没有非 ATGC 的字符?这些都会影响密码子对齐的质量。

三、预处理后的基因序列,怎么检查?

  1. 肉眼检查:打开文件看看格式对不对

不要嫌麻烦,处理完先打开文件看几眼:

  • FASTA 格式是否规范?标题行是不是以 > 开头?
  • 序列是不是只有一行还是自动换行了?(虽然大多数软件都兼容,但统一格式更稳妥)
  • ID 命名是否一致?有没有多余的空格或特殊字符?
  1. 用 seqkit 做整体统计
# 统计序列数量、平均长度、最短/最长
seqkit stats your_file.cds.fa

# 按长度排序,看看有没有极端短或极端长的序列
seqkit sort -l your_file.cds.fa | seqkit stats

重点关注:

  • 序列总数是否符合预期?
  • 最短 / 最长序列是否在合理范围内?
  • N50、平均长度是否符合该物种的 CDS 特征?

如果发现有几十 bp 的超短序列或者几万 bp 的超长序列,就要回去检查筛选阈值是不是设得有问题。

  1. 写个小脚本,针对性检查

对于特定的研究需求,建议自己写个简单的脚本做定制化检查

 

金山文档链接:https://www.kdocs.cn/l/cv4g1J00FVMP