第4章 数据获取:公开数据集与本地数据准备
做WGS胚系突变分析,第一道坎就是数据。你想想看,Pipeline再漂亮,没数据也是空转。这一章我跟你聊聊数据怎么来、怎么管,特别是那些公开数据集怎么用,本地数据又该怎么组织。说白了,就是让你别再为数据的事发愁。
我个人习惯是把数据获取分成两条线:一条是公开数据集,比如1000 Genomes、GnomAD这些;另一条是你们自己实验室或者临床上产生的本地数据。两条线的处理思路不太一样,但最终都要走到同一个格式标准上来。
公开数据集:为什么选它们?
1000 Genomes(1KGP)是WGS分析里绕不开的基准。它覆盖了全球26个群体的2500多个样本,测序深度平均在7.4x左右。虽然深度不算高,但做验证、做质控、做群体频率比对,它都是标准配置。
GnomAD这个数据集更大,超过15万个全基因组和全外显子组数据。我在项目中经常用它来做人群频率过滤——那些在GnomAD里频率超过1%的变异,大概率是良性多态性,可以优先排除。
我的实战建议:
- 1000 Genomes:适合做Pipeline验证、基准测试、对照样本
- GnomAD:适合做人群频率过滤,但也注意它的批次效应
- GIAB(Genome in a Bottle):适合做准确性评估,有权威的“金标准”变异集
公开数据怎么下载?
1000 Genomes的数据托管在I GS官网、EMBL-EBI、NCBI这几个地方。最省事的办法是用 wget 或者 curl 直接拉。
# 下载1000 Genomes某个样本的CRAM文件
wget -c ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/phase3/data/NA12878/alignment/NA12878.mapped.ILLUMINA.bwa.CEU.low_coverage.20130415.bam.cram
但要注意,1000 Genomes的数据量非常大,我建议你只下载需要的样本和区域。别一股脑全拉下来——我一个同事曾经把整个ftp目录镜像回来,结果硬盘塞满了才发现大部分数据用不上。嗯,这都是经验教训。
| 数据集 | 访问方式 | 典型文件大小(一个样本) | 推荐用途 |
|---|---|---|---|
| 1000 Genomes | FTP / Google Cloud | ~50 GB (CRAM) | Pipeline测试、验证 |
| GnomAD | 官方下载 / AWS | ~40 GB (VCF) | 频率注释、过滤 |
| GIAB | NIST / NCBI FTP | ~3 GB (VCF + BED) | 准确性基准 |
GnomAD数据怎么用?
GnomAD的数据格式是VCF,可以直接用于bcftools或者ANNOVAR进行人群频率注释。我曾经用GnomAD的AF字段做了一个过滤脚本——当变异的等位基因频率超过0.01时,直接标为“常见变异”,在后续分析里减权重处理。
# 用bcftools过滤常见变异
bcftools view -i 'AF_popmax < 0.01' input.vcf > rare_variants.vcf
这里有个坑:GnomAD的版本更迭很快。3.0版本用的是GRCh38,2.1版本用的是GRCh37。你的参考基因组版本必须跟GnomAD版本对上,否则坐标错位,分析全乱套。我曾有一次用GRCh38的样本去查GRCh37的GnomAD频率,结果一堆低频变异被标成了高频,排查半天才反应过来。
版本匹配警告: 下载前一定确认你的参考基因组版本(GRCh37 vs GRCh38)与公开数据集版本一致。混合使用会导致坐标错误、注释混乱。
本地数据准备:目录结构设计
行了,说完了公开数据,咱们得聊聊本地数据。这部分是实战里的重头戏——你自己的样本怎么管理。
我见到的最大问题是:很多人在项目初期不太注重目录结构,等到测了上百个样本,再去整理就晚了。你想想看,几千个BAM/CRAM文件乱成一锅粥,哪怕Pipeline再高效,光找文件就能让你崩溃。
我建议的项目目录结构是这样:
project/
├── data/
│ ├── raw/ # 原始测序数据
│ │ ├── sample_01/
│ │ │ ├── sample_01_R1.fastq.gz
│ │ │ └── sample_01_R2.fastq.gz
│ │ └── sample_02/
│ ├── reference/ # 参考基因组及索引
│ │ ├── GRCh38.fa
│ │ ├── GRCh38.fa.fai
│ │ └── GRCh38.dict
│ ├── known_sites/ # 已知位点(dbsnp, Mills, Indels等)
│ └── external/ # 公开数据集文件(1KGP, GnomAD等)
├── analysis/
│ ├── align/ # BAM/CRAM文件
│ ├── variant/ # gVCF/VCF文件
│ └── results/ # 最终报表
└── nextflow/
├── main.nf
├── conf/ # 配置文件
└── modules/ # 模块脚本
这种结构我用了好几年,基本没有出现过文件错乱的情况。关键点是:原始数据只读、结果分阶段存放、参考基因组集中管理。
本地数据的质量控制要点
拿到测序数据以后,不能直接扔进Pipeline。我一般会做一个快速的质量检查,看看数据够不够格。通常我会关注这几项:
- 测序深度:WGS通常要求≥30x,做胚系分析最低也得15x
- 比对率:比对到参考基因组的reads占比,正常应该在95%以上
- Duplication rate:PCR重复率,低于20%算正常,高于这个值要小心
- 样本性别确证:通过X/Y染色体的覆盖度判断性别是否跟临床记录一致——这个坑我踩过,有一次样本标签搞错了,幸亏性别检验救了一命
这些检查用FastQC、samtools stats、bedtools这些工具就能搞定。我在后续章节里会专门讲质控模块怎么写到Nextflow里。
数据获取的SVG流程图
好,给你看看我整理的数据获取整体流程。从两个源头出发——公开数据集和本地数据——经过下载/整理、质量控制、格式统一,最后进入统一的Analysis Ready目录。这个目录就是下一章Nextflow Pipeline的数据输入。
数据准备的一些小技巧
最后给你几个实战中验证过的经验,应该能帮你少走弯路。
经验1:用符号链接管理参考基因组
不要在每个项目目录里都复制一份GRCh38.fa。我习惯在~/reference/里放一份完整参考,然后项目里用软链接指过去。省空间,好管理。
ln -s ~/reference/GRCh38.fa ./data/reference/GRCh38.fa
经验2:CRAM比BAM更好
如果存储空间紧张,用CRAM格式能节省30%-40%的磁盘空间。1000 Genomes现在默认分发CRAM,就是这个原因。你只要确保参考基因组在本地有完整拷贝,CRAM的解压速度也能接受。
经验3:小心数据的权限问题
有些公开数据集需要申请才能使用(比如某些受保护的dbGaP数据)。我见过有团队提前下载了受限制的样本,结果在分析完成后才发现没有发表权限,只能重来。下载前一定先看清数据的使用条款。
好了,数据到手、目录搭好、质量控制做一遍,下一步就可以正式跑Pipeline了。数据准备这个阶段,看起来简单,但做好了能省下后面80%的调试时间。我自己每次都是在这个阶段花足功夫——嗯,磨刀不误砍柴工嘛。