第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的数据输入。

WGS数据分析数据获取流程 公开数据集 下载1KGP / GnomAD等 本地样本数据 整理目录结构 格式统一:FASTQ / CRAM / VCF 质量控制检查 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%的调试时间。我自己每次都是在这个阶段花足功夫——嗯,磨刀不误砍柴工嘛。