4. 原始数据获取与预处理:下载FASTQ、检查文件完整性及MD5校验
好,咱们进入第四章。前面铺垫了那么多背景知识,现在开始真正碰数据了。
我记得第一次从公共数据库下载 FASTQ 的时候,光校验 MD5 就折腾了半小时——后来发现是 wget 少了个参数。你想想看,几百 GB 的测序数据,传了一晚上结果最后一个字节不对,整个重来……这种痛,一次就够了。
所以这一章我不光讲步骤,更要把踩过的坑摊开来。咱们把「下载 + 校验」这个看似简单的环节做扎实,后面的分析才站得住。
4.1 从公共数据库下载 FASTQ 文件
目前主流的转录组原始数据仓库就两个:NCBI 的 SRA(Sequence Read Archive)和 EBI 的 ENA。Visium 空间转录组数据通常以 FASTQ 格式存放,注意是双端测序(R1/R2),同时会附带一个样本信息表(metadata)。
我个人习惯用 ENA Browser 来获取下载链接。为什么呢?因为 ENA 直接提供了 FTP 路径,而且支持 wget 批量下载,速度比 SRA Toolkit 快不少。举个例子,找到项目 PRJEB12345 后,你会看到类似下面的链接:
# 单样本双端 FASTQ 示例
ftp.sra.ebi.ac.uk/vol1/fastq/ERR123/ERR123456/ERR123456_1.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/ERR123/ERR123456/ERR123456_2.fastq.gz
下载命令很直接,但有个容易被忽略的细节:压缩包名可能被截断,或者 FTP 服务器限速。我建议用 wget 的 -c 参数支持断点续传:
wget -c -P ./data/ERR123456/ \
ftp.sra.ebi.ac.uk/vol1/fastq/ERR123/ERR123456/ERR123456_1.fastq.gz \
ftp.sra.ebi.ac.uk/vol1/fastq/ERR123/ERR123456/ERR123456_2.fastq.gz
如果文件特别多,可以先生成一份 URL 列表,然后配合 aria2c 并行下载,能省不少时间。我常用的写法:
aria2c -j 8 -i url_list.txt -d ./data/
其中 -j 8 表示 8 个线程同时拉。不过要注意,有些公共 FTP 对并发有限制,遇上了就把线程数降到 2 或 3。
4.2 文件完整性检查与 MD5 校验
好了,文件下载完了。你以为就结束了吗?远着呢。传输过程中可能丢包、截断,甚至被篡改。我曾经急着跑分析,跳过校验,结果跑了一天发现某个样本的 R2 文件比预期少了 10MB……排查了半天,最后发现是网络问题导致的传输不完整。
所以这一步绝对不能省。大多数公共仓库在提供 FASTQ 的同时会附带一个 md5sum.txt 文件,里面每一行是文件名及其 MD5 值。校验命令在 Linux 下非常简单:
# 进入数据目录
cd ./data/ERR123456/
# 对比本地文件的 MD5 与官方值
md5sum -c md5sum.txt
如果输出格式是「文件名: OK」,说明文件完整;如果出现「文件名: FAILED」,就必须重新下载那个文件。
有时候官方只给了单个文件的 MD5,没有汇总文件。你可以自己生成一份:
# 对所有 .fastq.gz 计算 MD5
md5sum *.fastq.gz > local_md5.txt
# 然后手动跟官方公布的 MD5 值逐行对比
diff local_md5.txt official_md5.txt
sha256sum 做最终的完整性验证——安全性更高,虽然多花几秒,更稳妥。对了,Windows 用户可以用 PowerShell 的 Get-FileHash:
Get-FileHash .\ERR123456_1.fastq.gz -Algorithm MD5
但我个人还是建议在 Linux 或 WSL 下做,省得碰上换行符问题。
4.3 下载与校验的常见工具对比
我把常用工具整理成了一张表,方便你根据场景选择:
| 工具 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| wget | 单文件/少量文件 | 自带断点续传、参数简单 | 多文件需写脚本、并发差 |
| curl | 自定义请求头、API调用 | 支持更多协议、灵活 | 断点续传需手动设置 |
| aria2c | 大批量并行下载 | 多线程、支持 Metalink | 配置稍复杂 |
| aspera (ascp) | 大型文件高速传输 | 利用 UDP 加速、超快 | 需安装客户端、部分仓库收费 |
| md5sum / sha256sum | 完整性校验 | 系统自带、快速 | 大文件 MD5 碰撞风险(极低) |
4.4 实战中的避坑指南
嗯,这里要重点说说我遇到的几个坑,希望能帮你绕过去。
- 路径名里的特殊字符:ENA 给的 FTP 路径有时包含
~或;,wget 可能会解析错误。记得用引号把 URL 括起来,或者用--content-disposition参数。 - 磁盘空间不足:下载前先用
du -sh看好剩余空间。FASTQ 压缩后通常 2-10GB,解压后膨胀 3-5 倍。我建议留出至少原始大小 5 倍的空余。 - 防火墙限制 FTP 主动模式:有些机构网络只允许被动模式(PASV)。wget 默认自动协商,但偶尔会卡在主动模式。强制被动模式:
wget --passive-ftp ...。 - MD5 文件编码:从 Windows 上传到 Linux 的 md5sum.txt 可能带有
\r\n,导致md5sum -c报错。先用dos2unix转换一下。 - 校验失败后的重试策略:不要只重下一个文件,很可能整个批次都有问题。我习惯在下载脚本里加入自动重试逻辑:失败则等待 30 秒后重试,最多 3 次。
下面这张图把整个流程串了起来,你可以跟着走一遍:
好了,这一章到此结束。数据在手心里就踏实了——下一回咱们拿这些 FASTQ 开始做真正的预处理和质量控制。