第4章 公共数据资源:TCGA、ICGC、cBioPortal中MSI数据的获取与格式说明
做MSI临床注释,光靠测序公司给的结果文件远远不够。很多时候,我们需要从公共数据库里挖数据来做验证、对比或者建立自己的参考。今天我们就聊聊我最常用的三个数据源:TCGA、ICGC和cBioPortal。它们各有什么特点?数据怎么拿?拿到手以后长什么样?
说实话,我最早接触公共数据的时候也绕了不少弯路。尤其是格式不统一的问题,让我一度怀疑自己下了假数据。所以今天我把踩过的坑一并告诉你。
三大公共数据源,到底怎么选?
你可能会问:用哪个平台最好?我的建议是:别纠结,三个都要会。它们数据互补,覆盖不同的癌种和分析深度。
| 数据源 | 数据类型 | 获取方式 | 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”的输出评论里,需要切分字段才能提取。我总结了一套标准化的流程:
- 先从cBioPortal确认样本MSI类别:建立一份“样本ID → MSI-H/MSS/L”的映射表
- 回TCGA下载对应样本的MAF:只过滤MSI-H样本,聚焦关键突变
- 用ICGC补充其他癌种:如果TCGA里没有你需要的样本,去ICGC查元数据
- 输出统一格式:只保留“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的数据都分不清——这事我干过。