第4章 公共数据资源:TCGA、ICGC、cBioPortal中MSI数据的获取与格式说明

做MSI临床注释,光靠测序公司给的结果文件远远不够。很多时候,我们需要从公共数据库里挖数据来做验证、对比或者建立自己的参考。今天我们就聊聊我最常用的三个数据源:TCGA、ICGC和cBioPortal。它们各有什么特点?数据怎么拿?拿到手以后长什么样?

说实话,我最早接触公共数据的时候也绕了不少弯路。尤其是格式不统一的问题,让我一度怀疑自己下了假数据。所以今天我把踩过的坑一并告诉你。

公共MSI数据源获取与整合流程 TCGA 数据门户 ICGC 数据平台 cBioPortal 在线 原始数据 → 关键格式整合 MAF (体细胞突变) BAM / CRAM(原始比对) 片段谱文件(MSIsensor) 临床元数据 MSI 状态注释表(统一格式)

三大公共数据源,到底怎么选?

你可能会问:用哪个平台最好?我的建议是:别纠结,三个都要会。它们数据互补,覆盖不同的癌种和分析深度。

数据源 数据类型 获取方式 MSI数据特点
TCGA 体细胞突变、表达、甲基化、拷贝数、临床 GDC Data Portal / API / GDC Transfer Tool 提供MAF格式,含MSIsensor评分;需自己提取
ICGC 体细胞突变、表达、临床(部分项目含MSI标记) ICGC Data Portal / API 格式类似TCGA,但部分项目标注了MSI状态
cBioPortal 整合多组学、临床、已计算的MSI状态 Web界面 / API / R包(cgdsr) / 批量下载 直接提供MSI分类标签,无需自算,拿来即用
个人经验
做大型队列研究时,我习惯先用cBioPortal下载MSI表型数据,快速确认样本的MSI分类,再回TCGA下载对应的MAF文件做深度突变分析。这样效率最高。

TCGA数据获取要点

TCGA的数据主要托管在Genomic Data Commons(GDC)上。获取MSI相关数据,我个人习惯走两条路:

路线一:直接用GDC Data Portal下载MAF文件

这是最直接的方式。你要关注的是体细胞突变MAF文件,因为里面嵌入了微卫星区域的分析结果。

操作步骤:

  • 进入portal.gdc.cancer.gov,选择“Cases”页面
  • 按癌种筛选,比如选择“TCGA-COAD”(结肠腺癌)
  • 选择“Files”页签,过滤“Data Type”为“Simple Somatic Mutation”
  • 下载MAF格式文件,通常一个癌种会打包成“muse”或“somaticsniper”等流程的结果
# 使用GDC API批量下载MAF(以结肠癌为例)
# 第一步:获取manifest
gdc-client download -m gdc_manifest.2023-01-15.txt

# 第二步:解压MAF文件
gunzip *.maf.gz
注意
我踩过一个坑:同一个肿瘤样本可能有多个MAF文件(不同分析流程)。一定要确认你下载的是“harmonized”版本,否则突变列名对不上。我曾因为这个原因浪费了一整天来重新映射样本ID。

路线二:下载BAM文件自行计算MSI

对于需要原始信号重现的场景,比如你想验证某个位点的测序深度,就得自己下BAM文件跑MSIsensor或者MSIseq。不过BAM文件很大,单个可能50GB以上。

# 使用GDC BAM下载(需登录)
gdc-client download -d path/to/output --token gdc-user-token.2023-01-01.txt \
  --uuid 6a5f7e8c-9b3d-4c2a-8f1e-0d3b6c9a2e7f

ICGC数据平台的使用心得

ICGC的项目覆盖面不如TCGA广,但有些数据更细致。我记得处理胰腺癌数据时,发现ICGC的PCAWG项目提供了完整的微卫星不稳定评分表。

ICGC的MSI数据通常藏在“simple_somatic”或者“clinical”表里。你需要关注这两个字段:

  • msi_status:直接标注“MSS”、“MSI-L”或“MSI-H”
  • msi_score:数值型评分,可以用来自己定阈值

获取方式:

# 通过ICGC API获取某个项目的临床元数据
curl -X GET "https://dcc.icgc.org/api/v1/projects/PACA-CA/clinical?fl=icgc_donor_id,msi_status,msi_score&size=500" \
  -H "accept: application/json" | jq '.' > icgc_msi.json

当然,ICGC的API有时不太稳定。如果批量下载,我建议使用他们提供的Python SDK:

# icgc-get.py 示例
from icgcget.__main__ import main
# 下载PACA-CA项目全部体细胞突变注释
# main(['--project', 'PACA-CA', '--type', 'simple_somatic', '--output', './icgc_data/'])
关键信息
TCGA和ICGC的数据虽然免费,但都有使用约束。学术引用要写论文出处,别直接用商用。我个人习惯在每个项目文件夹里放一个README,记录数据获取日期和许可证信息。

cBioPortal —— 懒人必备的数据宝库

说实话,cBioPortal是三个里我最喜欢用的。它把TCGA、ICGC以及其他几十个队列的多组学数据整合在一起,MSI状态直接作为一条临床属性列在表中。

不用下载原始BAM!不用解析MAF!直接导出!

# 使用cgdsr R包,一行代码拿到MSI数据
library(cgdsr)

# 创建连接
mycgds = CGDS("https://www.cbioportal.org/")

# 获取结肠癌数据集(TCGA Provisional)的临床数据
cancer_studies <- getCancerStudies(mycgds)
# 找到合适的study_id

# 下载临床属性和MSI状态
clinical_data <- getClinicalData(mycgds, "coadread_tcga", case_list = "coadread_tcga_all")
# 查看列:其中微卫星不稳定性列名类似 MSI_TYPE 或 MSI_SCORE
colnames(clinical_data)
# 直接输出MSI类型表
msi_table <- clinical_data[, c("SAMPLE_ID", "MSI_TYPE")]

如果你不喜欢R,也可以用他们的API直接下载JSON:

# 通过cBioPortal API获取
curl "https://www.cbioportal.org/api/studies/coadread_tcga/clinical-data?projection=SUMMARY&pageSize=500" \
  -H "accept: application/json" | jq '.[] | {sampleId: .sampleId, msi_status: (.clinicalAttributeId == "MSI_TYPE")}'
# 注意:上面只是示意,实际你需要过滤clinicalAttributeId

数据格式统一化实战

三个源拿到的数据格式天差地别。比如,TCGA的MAF文件里MSI评分是藏在“mutect2”的输出评论里,需要切分字段才能提取。我总结了一套标准化的流程:

  1. 先从cBioPortal确认样本MSI类别:建立一份“样本ID → MSI-H/MSS/L”的映射表
  2. 回TCGA下载对应样本的MAF:只过滤MSI-H样本,聚焦关键突变
  3. 用ICGC补充其他癌种:如果TCGA里没有你需要的样本,去ICGC查元数据
  4. 输出统一格式:只保留“sample_id、chromosome、position、ref_allele、alt_allele、msi_status”六列
# 统一格式示例(TSV)
sample_id	chromosome	position	ref_allele	alt_allele	msi_status
TCGA-AA-0001	2	123456789	A	T	MSI-H
TCGA-AA-0002	5	987654321	C	G	MSS
避坑指南
我曾经发现,cBioPortal上标注为MSI-H的样本,在TCGA原始MAF中找不到对应的微卫星位点突变。这是因为cBioPortal使用了改良版的MSI检测算法(基于全外显子组),而TCGA的原生流程可能没跑这个。这时候我通常会信任cBioPortal的结论,因为它是专门针对微卫星区域优化的。

小结

三个数据源各有长短。

  • TCGA 提供最全的原始数据,适合深度分析但下载量大
  • ICGC 适合特定癌种的补充,元数据较精细
  • cBioPortal 是快速上手的最佳选择,但有时数据更新滞后

拿到数据后,我个人做法是立即用Python或R对列名重命名,统一成一套标准。不然一个月后你回看自己的文件夹,可能连TCGA和ICGC的数据都分不清——这事我干过。