四百万条拷贝数的五种模态 — CNAScope 泛癌库

810 个数据集 / 五种模态 / 焦点与共识注释

来源 https://cna.fengslab.com/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 13
四百万条拷贝数的五种模态 — CNAScope 泛癌库

信息速览

数据集名称四百万条拷贝数的五种模态 — CNAScope 泛癌库
数据类型元数据,多组学,原始数据链接,人工标注
规模174,464 份样本 / 3,018,672 个单细胞 / 764,232 个空间位点
接入方式https://cna.fengslab.com/
AI 就绪度

肿瘤基因组里最容易被讲清楚、又最难拼在一起的一层,是拷贝数。扩增与缺失以兆碱基为单位,横跨染色体臂,既能把癌基因抬到十几个拷贝,也能把抑癌基因整段抹掉。它比点突变粗,却比表达谱稳;比全基因组重排好测,却比甲基化更贴近剂量效应。问题是,同样叫拷贝数,芯片给的是 log2 比值,全外显子给的是分段,单细胞给的是每细胞每窗的整数估计,空间转录组给的是每个位点由表达反推的连续值。

这些数据分散在 cBioPortal、COSMIC、GDC、HSCGD、scTML、10x Genomics、GEO 与 Broad Single Cell Portal 里。每个库都有自己的调用流程、自己的窗宽、自己的癌种命名。一个想比较「同一癌种在 bulk 与单细胞里扩增模式是否一致」的课题,往往要先花几周把四套坐标系对齐,然后才发现其中两套根本对不上。

CNAScope 是香港城市大学与西北工业大学团队对这些碎片做的一次集中收拢。它不重新调用原始测序,而是把已经发布的拷贝数谱按统一框架重新分窗、注释、可视化,并把焦点事件与跨流程共识单独标出来。它的价值不在于「又多了一个大库」,而在于把五种模态放进了同一个检索入口。一屏速览见下表。

维度 内容
全名 CNAScope: pan-cancer copy number aberration database
中文名 泛癌拷贝数变异数据库
维护机构 香港城市大学生物医学科学系、西北工业大学软件学院
通讯作者 Lingxi Chen(香港城市大学)、Xikang Feng(西北工业大学)
官方入口 https://cna.fengslab.com/
论文 Nucleic Acids Research 2026, 54(D1):D1364–D1375
DOI 10.1093/nar/gkaf1242
首次发布 2025 年 4 月 15 日,版本 1.0
当前版本 1.3,2025 年 10 月 5 日
数据集数 810 个
样本数 174,464 份(摘要口径)
单细胞数 3,018,672 个
空间位点数 764,232 个
癌种亚型 77 个
上游来源 8 个公开资源
模态 bulk DNA、单细胞 DNA、空间 DNA、单细胞 RNA、空间 RNA
注释层级 分段 / 窗 / 基因 / 通路术语
许可 论文 CC BY-NC 4.0;数据无独立许可声明

§1 它要解决的具体麻烦

1.1 拷贝数不缺数据,缺的是一套能对齐的坐标

拷贝数变异的数据量在肿瘤基因组里排得上前列。TCGA 的每个样本都有分段文件,COSMIC 收了几万个样本的基因级拷贝数,GDC 把等位基因特异、拷贝数分段、掩蔽分段三种协议都放了出来,单细胞那边有 HSCGD 与 scTML,空间那边有 10x Visium、Xenium 与 Slide-DNA-Seq。单看任何一个库,数据都够做一篇论文。

麻烦出在比较上。bulk 分段文件的断点由每个样本自己的算法决定,样本与样本之间的断点不对齐;单细胞矩阵按固定窗宽分箱,窗宽又随论文而异;空间转录组的拷贝数是从表达反推的,分辨率和噪声结构都与 DNA 测序不同。要把它们放进同一张热图,第一件事是选一套公共坐标,第二件事是把每套数据投影上去,第三件事是解释投影带来的信息损失。这三件事没有哪一件是「下载下来就能做」的。

CNAScope 的处理方式是承认差异,再把差异显式化。它不强行把所有数据压成一种尺度,而是在元数据里保留数值尺度(绝对拷贝数、绝对拷贝数估计值、log2 比值)与位点分辨率(分段、窗、基因)两个字段,让使用者在检索时就知道自己拿到的是哪一类。对只有分段的数据,它提供 200 kb、500 kb、5 Mb 三种窗宽的矩阵版本;对已经是矩阵的数据,它保留原分辨率。这样做的代价是站内同时存在多种坐标系,好处是每一种都能追溯到它的来源。

这也解释了为什么它的数据集页面要按「来源、癌种、模态」三个维度筛选。来源决定调用流程,癌种决定亚型归类,模态决定观测单位是样本、细胞还是位点。三个维度一定,剩下的比较才有意义。

1.2 三条常见的错误期待

第一条,期待它是一个重新调用过的原始库。 它整合的是上游已经发布的拷贝数谱,团队做的是筛选、重采样、注释与可视化。原始 read、探针强度、比对文件都不在下载包里。想从它出发重新跑一遍 CNVnator 或 Ginkgo,是走不通的;它给的是「已经算好的结果」,不是「算结果的原料」。

第二条,期待它自带监督学习标签。 绝大多数记录只有癌种亚型、分期、分级、年龄、性别、生存时间这些临床字段,没有「这个片段是否驱动」「这个细胞是否恶性」的金标准。单细胞与空间数据倒是有恶性状态与 CNA 置信度,但那是推断结果,不是病理金标准。把它当分类数据集的标签源,会很快遇到标签定义不一致的问题。

第三条,期待细胞数等于样本数。 三百余万个单细胞听起来比十七万份样本大一个量级,但细胞的独立单位是供者。一个数据集可能只有几位供者,每位供者贡献几千个细胞。把细胞当独立样本做检验,自由度会虚高几个数量级,显著性也会跟着虚高。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
同一癌种跨 bulk 与单细胞的扩增模式比较 两套模态各自的窗级矩阵与癌种标签 够做探索,但需自己处理批次与分辨率差异
基因级拷贝数矩阵 由窗级矩阵经 BEDTools 加权得到的基因级文件 够,覆盖全部有窗级矩阵的数据集
通路级拷贝数 六个 MSigDB 集合的术语级矩阵 够,但术语是基因平均,不是通路活性
焦点扩增与缺失 GISTIC2 结果、焦点基因、焦点术语 仅限有分段 BED 的 bulk 数据
跨协议、跨流程的稳健事件 共识 CNA、共识基因、共识术语 仅限同一数据集内至少两套流程的 bulk 数据
单细胞克隆结构 系统发育树、聚类、六种降维嵌入 够看结构,不足以做克隆定名
空间拷贝数分布 位点级矩阵、空间变异基因与术语 够,但 CNA 由表达反推,不是空间 DNA 直接测
原始测序数据 无 不够,需回到 GDC、GEO 或 EGA
统一随访的临床终点 总生存与无进展生存两列 不够,随访定义随原始数据集而异
病理金标准 无 不够,恶性状态是推断值

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
你手上有自己的单细胞 CNV 结果,想找一批公开数据做外部对照 按癌种与模态筛出可比数据集,直接下载窗级矩阵与细胞元数据 先确认对方窗宽与你的窗宽,必要时重分箱到 500 kb 再比
你要研究某个癌种的复发性扩增,但 TCGA 的分段文件断点太碎 用 GISTIC2 焦点结果与共识基因列表,直接拿到跨流程一致的候选 把共识基因与你的候选列表取交集,再回原始数据核对
你在做空间转录组的 CNA 推断方法,缺基准 82 个空间数据集的位点级矩阵、空间变异基因与 Moran’s I 结果 只用其中由空间 DNA 直接测的少数数据集做真值,其余做一致性参照
你想比较不同测序协议对焦点检出的影响 同一 GDC 数据集内 AS、CNS、MCNS 三种协议乘五种流程的结果 用 Jaccard 相似度复现论文的协议敏感性分析
你要教肿瘤基因组课,需要一个能点开看的例子 交互热图、系统发育树、嵌入图、CN 阶梯图与焦点图 选 TCGA-BRCA 的两套流程演示,课堂网络需能访问境外站点
你在评估一个 CNA 调用流程,想知道自己的结果偏不偏 32 种计算流程的产物在同一框架下可检索 把自己的结果按同样窗宽投影,比较焦点基因的重叠率

1.5 一句话判断

它不是一个可以拿来重新算的原始库,而是一张把五种模态摊平到同一张桌上的对照表:价值在于让你看见差异,而不是替你消除差异。

1.6 不适合谁:四条边界

不适合需要原始信号的项目。 如果你的方法依赖 read depth、B 等位基因频率、探针强度或比对质量,这个库给不了。它最细只到分段,往上一层的原始信号全部留在上游资源里。

不适合把细胞当独立样本的统计。 单细胞与空间数据的观测单位是细胞或位点,独立单位是供者。任何按细胞切分训练测试集、按细胞算置信区间的做法,都会得到偏乐观的结果。

不适合需要病理金标准的验证。 恶性状态、CNA 置信度、细胞类型都是推断或人工标注的结果,没有病理切片复核。拿它当「真值」评估自己的恶性细胞识别,会把对方的推断误差当成标准答案。

不适合商业再分发。 数据可免费访问,论文是非商业许可,站点页脚是版权所有。要把整理后的矩阵打包进商业产品,必须先取得作者书面许可。

§2 数据构成与规格

2.1 五种模态,三层分辨率

CNAScope 把数据按观测单位分成五类:bulk DNA、单细胞 DNA、空间 DNA、单细胞 RNA、空间 RNA。bulk DNA 与单细胞 DNA 是 DNA 直接测得的;空间 DNA 也是直接测的;单细胞 RNA 与空间 RNA 的拷贝数则是从表达矩阵反推的。这个区别很关键:DNA 测的拷贝数是物理剂量,RNA 推的拷贝数是表达剂量,后者还叠了转录调控与细胞状态的影响。

在每一种模态内部,数据又按位点分辨率分三层。最粗的是分段(segment),一行是一个样本的一段连续区间,带起止坐标与拷贝数值;中间是窗(bin),一行是一个固定宽度的基因组窗口,所有观测共享同一套窗;最细的是基因(gene),一行是一个基因,值是覆盖该基因的所有窗的加权平均。三层之上还有一层通路术语(term),值是术语内所有基因的平均。四层不是四套独立数据,而是同一批观测在不同粒度上的投影。

模态 观测单位 拷贝数来源 典型上游 站内是否有焦点注释
bulk DNA 样本 芯片或 WGS/WES 直接调用 cBioPortal、COSMIC、GDC 有,限分段 BED
单细胞 DNA 细胞 scDNA-seq 直接调用 HSCGD、10x、GEO 无
空间 DNA 位点 空间 DNA 测序直接调用 空间 DNA 数据集 无
单细胞 RNA 细胞 表达矩阵经 inferCNV 类方法反推 scTML、GEO、Broad SCP 无
空间 RNA 位点 表达矩阵经 inferCNVpy 反推 10x Visium、Xenium 等 无

三层分辨率的换算不是无损的。分段转窗时,一个窗可能压到多个分段,站内按长度加权平均;窗转基因时,一个基因可能压到多个窗,同样按重叠长度加权。两次平均都会把断点位置抹平,把短片段的影响稀释。对「这个基因是几个拷贝」这类问题,影响不大;对「断点落在哪个内含子」这类问题,信息已经丢了。

层级 一行是什么 主键 站内生成方式 适用分析
分段 BED 一个观测的一段连续区间 观测 × 起止坐标 上游原样保留 断点、片段长度、等位基因特异分析
窗矩阵 一个观测在一个固定窗的拷贝数 观测 × 窗 分段按 200 kb / 500 kb / 5 Mb 加权聚合 聚类、降维、系统发育
基因矩阵 一个观测在一个基因的拷贝数 观测 × 基因 BEDTools 重叠加权 基因级关联、通路汇总
术语矩阵 一个观测在一个通路术语的平均拷贝数 观测 × 术语 术语内基因取平均 通路级描述、富集

2.2 字段与记录的完整字典

数据集层面的字段回答「这是哪一批数据」,观测层面的字段回答「这是谁」,位点层面的字段回答「这是哪个位置」,注释层面的字段回答「这个位置意味着什么」。四类字段在站内分表存放,下载时也是分开的文件。下面这张表把常用字段按类别列全,字段名是为说明而设的示意名,实际表头以下载文件为准,字段含义来自官方元数据说明。

字段 所属表 含义 取值或示例 是否必有
dataset_id 数据集表 数据集的稳定标识 字符串 必有
source 数据集表 上游资源 cBioPortal、COSMIC、GDC、HSCGD、scTML、10x、GEO、Broad SCP 必有
project 数据集表 上游项目或机构 TCGA、TARGET、ICGC、HCMI 等 多数有
cancer_subtype 数据集表 癌种亚型 LUAD、LUSC、BRCA 等 必有
modality 数据集表 观测模态 bulk DNA、scDNA、spatial DNA、scRNA、spatial RNA 必有
protocol 数据集表 测序或建库协议 10x Chromium、Smart-Seq2、Visium、Xenium 等 多数有
workflow 数据集表 拷贝数调用流程 ascatNgs、inferCNV、Ginkgo 等 多数有
value_scale 数据集表 数值尺度 ACN、ACN estimate、log2 ratio 必有
locus_resolution 数据集表 位点分辨率 segment、bin、gene 必有
bin_size 数据集表 窗宽 200 kb、500 kb、5 Mb 窗级必有
observation_id 观测表 样本、细胞或位点标识 字符串 必有
donor_id 观测表 供者标识 字符串 单细胞与空间多有
age 观测表 年龄 整数 部分有
sex 观测表 性别 female、male 部分有
ethnicity 观测表 族裔 字符串 少量有
race 观测表 种族 字符串 少量有
disease_type 观测表 疾病类型 字符串 多数有
primary_site 观测表 原发部位 字符串 多数有
tumor_stage 观测表 肿瘤分期 I–IV 等 部分有
tumor_grade 观测表 肿瘤分级 G1–G4 等 部分有
OS_time 观测表 总生存时间 数值加单位 部分有
OS_status 观测表 总生存状态 dead、alive 部分有
PFS_time 观测表 无进展生存时间 数值加单位 少量有
PFS_status 观测表 进展状态 progressed、censored 少量有
cell_type 观测表 细胞类型 字符串 单细胞与空间多有
cna_confidence 观测表 CNA 置信度 数值或等级 单细胞与空间多有
malignancy 观测表 恶性状态 malignant、non-malignant 单细胞与空间多有
locus_id 位点表 位点标识 窗坐标或基因符号 必有
chrom 位点表 染色体 chr1–chr22、chrX、chrY 分段与窗必有
start 位点表 起点 整数 分段与窗必有
end 位点表 终点 整数 分段与窗必有
gene_symbol 位点表 基因符号 HGNC 符号 基因级必有
term_id 位点表 通路术语标识 MSigDB 术语号 术语级必有
term_collection 位点表 术语集合 Hallmark、KEGG、GOBP、C4、C6、C7 术语级必有
cn_value 取值表 拷贝数 浮点数 必有

需要提醒的是,「部分有」不等于「少量有」。临床字段的覆盖率随上游数据集差异极大,TCGA 来源的 bulk 数据通常带分期与生存,GEO 来源的单细胞数据往往只有癌种与细胞类型。站内没有把缺失值填成默认值,缺就是空。使用前应先看一眼目标数据集的字段完整度,而不是假设每列都能用。

2.3 一条记录的完整解剖

以一个 bulk 样本在某个窗上的取值为例。它在数据集表里有一条数据集记录,在观测表里有一条样本记录,在位点表里有一条窗记录,在取值表里有一条浮点数。四张表通过三个键串起来。实际下载到的 cna.csv 是宽表,行是位点,列是观测,表头第一列是位点标识;元数据是另一张表,行是观测,列是字段。把两张表按观测列名对齐,才是一条完整记录。

dataset_id: GDC-TCGA-BRCA
source: GDC Portal
project: TCGA
cancer_subtype: BRCA
modality: bulk DNA
protocol: copy-number segment
workflow: ascatNGS
value_scale: log2 ratio
locus_resolution: bin
bin_size: 500 kb

observation_id: SAMPLE-001
donor_id: DONOR-001
age: 52
sex: female
tumor_stage: Stage IIA
tumor_grade: G2
OS_time: 1180 days
OS_status: dead

locus_id: chr1:1050000-1550000
chrom: chr1
start: 1050000
end: 1550000
cn_value: 0.412

这段示意只展示字段如何落位,不代表某个真实样本的取值。真实文件里,观测数量可能上千,位点数量可能上万,宽表的列数就是观测数。也正因如此,站内把 bulk 与单细胞的取值文件分开命名:bulk 的分段是 seg.txt,矩阵是 cna.csv,单细胞与空间的观测元数据另存为 meta_scsvas.csv。

下载完一个数据集后,先别急着读内容,先看目录里缺不缺文件。下面这段检查会列出文件大小,并把四个核心文件与目录里的实际文件名做后缀匹配。

#-- 检查一个下载目录里的核心文件是否齐全
from pathlib import Path

files = sorted(Path("cnascope_download").glob("*"))
for f in files:
    print(f.name, f.stat().st_size)

required = ["cna.csv", "meta_scsvas.csv", "gene_cna.csv.gz", "term_cna.csv.gz"]
names = {f.name for f in files}
missing = [r for r in required if not any(n.endswith(r) for n in names)]
print("缺失:", missing)

2.4 数据集构成

官方在结果部分给了一套按模态拆开的构成:501 个 bulk 数据集覆盖 70 个亚型,227 个单细胞数据集(35 个 scDNA 加 192 个 scRNA)覆盖 27 个亚型,82 个空间数据集(3 个空间 DNA 加 79 个空间 RNA)覆盖 14 个亚型。三类相加正好是 810 个数据集。亚型数不能直接相加,因为同一个亚型可能同时出现在 bulk、单细胞与空间里。

类别 数据集数 观测数 覆盖亚型 备注
bulk DNA 501 十七万余份样本 70 含 56 个 GDC 数据集
单细胞 227 二百四十五万余个细胞 27 35 个 scDNA、192 个 scRNA
空间 82 一百三十二万余个位点 14 3 个空间 DNA、79 个空间 RNA
合计 810 不可直接相加 77(并集) 三类亚型有重叠

这张表用的是论文结果部分的口径。摘要与首页给的是另一套:十七万四千余份样本、三百零一万余个单细胞、七十六万余个空间位点。两套数字都出自官方,差额的构成官方没有解释。写作与引用时,最稳妥的做法是标明「摘要口径」或「结果口径」,不要跨口径相减。

口径对照可以按三行读:摘要与首页是十七万四千四百六十四份样本、三百零一万八千六百七十二个单细胞、七十六万四千二百三十二个空间位点;结果部分是十七万三千九百一十四份样本、二百四十五万七千四百二十五个单细胞、一百三十二万五千四百七十九个空间位点;两者相减,样本差五百五十,单细胞差五十六万余,空间位点则是结果口径反而多五十六万余。

这个差额不是官方给的,是按两套数字相减得到的。这个互补的差额提示两套口径可能对「什么算单细胞、什么算空间位点」有不同的归类,但没有官方说明,不能据此推断哪一套更新。

2.5 与同类资源的字段差异

cBioPortal 强在样本级的临床与突变联动,COSMIC 强在突变与基因级拷贝数的广度,GDC 强在原始数据与协议分层,HSCGD 强在单细胞 DNA 的克隆结构,scTML 强在转录组推断的肿瘤微环境。CNAScope 的位置是把这些来源的拷贝数层抽出来,补上统一的位点重采样与功能注释。它不是任何一个库的替代品,而是它们之上的一层「拷贝数视图」。

能力 CNAScope cBioPortal COSMIC GDC HSCGD scTML
bulk DNA 拷贝数 有 有 有 有 无 无
单细胞 DNA 有 无 无 无 有 无
空间 DNA 或 RNA 有 无 无 无 无 无
基因级矩阵 有 部分 有 需自算 部分 有
通路术语级 有 无 无 无 无 无
焦点 CNA 有 有限 无 无 无 无
跨流程共识 有 无 无 无 无 无
在线注释工作流 有 无 无 无 无 无
原始测序文件 无 部分 无 有 部分 部分

这张表只比较「有没有」与「是否直接提供」,不比较数据量。数据量的大小在不同癌种上差异很大,单看总数容易误判。比如 CNAScope 的样本总数高于 COSMIC,但 COSMIC 在某些癌种的突变覆盖深度是 CNAScope 没有的。

§3 核心层 A:它是什么,以及它不是什么

3.1 二次整合库的身份

CNAScope 的官方定义是「泛癌拷贝数变异数据库」,不是「泛癌拷贝数调用流程」,也不是「泛癌原始测序归档」。这三个身份的区别决定了它能回答什么问题。数据库回答「有哪些已算好的结果、它们怎么注释」;调用流程回答「给我原始数据,我怎么算出拷贝数」;原始归档回答「原始的 read 在哪里」。CNAScope 只做第一件事,另外两件交给上游。

这个定位带来两个直接后果。第一,它的数据质量上限由上游决定。上游用 ascatNGS 调用的分段,不会因为进了 CNAScope 就变得更准;上游只有 gene-level 矩阵的数据集,也不会因为站内提供了窗级视图就重新获得断点信息。第二,它的可比性来自统一的后处理,而不是统一的实验。所有数据集都经过同一套分窗、基因映射、术语汇总与可视化,但实验层面的差异(建库、测序深度、肿瘤纯度、样本处理)仍然存在。

理解这一点,就不会把它当成「一个巨大的统一队列」。它更像一个带统一索引的样本库:索引是统一的,样本不是。

3.2 五种模态各自能回答什么

bulk DNA 回答「这批肿瘤整体的拷贝数格局是什么」。它的观测单位是样本,适合做癌种间比较、亚型分型、预后关联。缺点是每个样本是一堆细胞的平均,肿瘤纯度低时信号会被正常细胞稀释。

单细胞 DNA 回答「同一肿瘤内有哪些克隆、它们怎么演化」。它的观测单位是细胞,适合做克隆结构、系统发育、耐药克隆追踪。缺点是细胞数多但供者少,且单细胞全基因组扩增的覆盖不均,断点精度不如 bulk。

空间 DNA 回答「克隆在组织里的位置关系」。它的观测单位是空间位点,适合做肿瘤边界、侵袭前沿、微环境分区。缺点是数据量最少,成本最高。

单细胞 RNA 回答「表达层面的拷贝数推断是否与 DNA 一致」。它的观测单位是细胞,拷贝数由表达反推,适合做大规模细胞图谱的恶性细胞识别。缺点是推断依赖参考细胞与基因集,正常细胞比例高时容易失准。

空间 RNA 回答「拷贝数模式在组织坐标上如何分布」。它的观测单位是位点,拷贝数同样由表达反推,适合做空间变异分析。缺点是与空间 DNA 相比,推断链条更长,绝对拷贝数不可靠。

模态 能回答 不能回答 独立单位
bulk DNA 癌种格局、亚型、预后 克隆结构、细胞异质性 样本
单细胞 DNA 克隆结构、演化 组织位置 供者
空间 DNA 克隆的空间分布 大样本统计 供者
单细胞 RNA 大规模恶性细胞识别 绝对拷贝数 供者
空间 RNA 拷贝数模式的空间自相关 绝对拷贝数、断点 供者

3.3 版本演进

站内首页保留了四个版本的发布说明。版本号不是简单的数据增量,每一次都伴随来源扩展或功能变化。v1.0 只收 GDC 的 52 个项目,v1.1 把来源扩到 6 个、数据集到 354 个,v1.2 加了两个在线注释流程,v1.3 把来源扩到 8 个、数据集到 810 个,并加了通路富集与空间变异注释。

版本 日期 数据集 / 项目 拷贝数谱 样本 单细胞 空间位点 主要变化
1.0 2025-04-15 52 个项目 未公布 未公布 未公布 未公布 首发,仅 GDC
1.1 2025-06-30 354 334,187 97,203 71,009 118,600 扩到 6 个来源
1.2 2025-07-31 同 1.1 未公布 未公布 未公布 未公布 加两个在线流程
1.3 2025-10-05 810 3,954,361 十七万余 三百余万 七十六万余 扩到 8 个来源

版本表里最值得注意的是 1.1 到 1.3 的跨度:数据集从三百五十四增到八百一十,单细胞从七万一千增到三百余万,空间位点从十一万八千增到七十六万。这个增速说明单细胞与空间数据是这一轮扩张的主力,也说明库的形态还在快速变化。引用时必须写版本号与日期,否则半年后使用者无法复现你看到的数字。

另一个细节是癌种亚型数从 1.1 的 82 降到 1.3 的 77。官方没有解释这次缩减。可能是亚型合并,也可能是重新归类。对使用者的影响是:如果你按 1.1 的亚型表做筛选,换到 1.3 后会少几个类别,跨版本的面板不能直接拼接。

3.4 机构与维护

项目由两个实验室共同维护。香港城市大学生物医学科学系的城市大学生物医学团队负责数据库的整体设计、元数据审核与平台运维,西北工业大学软件学院的团队负责数据采集、流程开发与前端实现。通讯作者是 Lingxi Chen 与 Xikang Feng,联系邮箱在官网 Contact 页面公开。

这种跨机构维护模式对使用者的直接意义是:数据问题的第一联系人不是期刊,而是官网列出的作者邮箱。遇到字段缺失、下载失败、版本差异,直接写信比在论文评论区留言有效。站内也保留了 Contact 页,列出两个实验室的地址、邮箱与作者名单。

#-- 核对维护机构是否与论文一致
curl -sSL --max-time 30 "https://cna.fengslab.com/contact" -o cnascope_contact.html
python3 -c "s=open('cnascope_contact.html',encoding='utf-8').read(); print('City University' in s); print('Northwestern Polytechnical' in s)"

§4 核心层 B:注释质量与特色

4.1 观察性注释:把观测放回关系里

观察性注释回答的是「这些样本、细胞或位点彼此有多像」。站内做了三件事:系统发育推断、观测聚类、降维嵌入。系统发育用层次聚类生成树,树的可视化是可缩放、可点击的;聚类把树切成若干簇,簇数由使用者指定;降维提供 PCA、ICA、NMF、UMAP、t-SNE、PHATE 六种方法,每种生成二维嵌入。

这三件事的共同前提是观测 × 位点的矩阵。对只有分段 BED 的数据,站内先按窗宽聚合成矩阵;对已经是矩阵的数据,直接用原矩阵。这也解释了为什么窗宽的选择会影响观察性注释:窗越宽,断点越模糊,树的分支越倾向于按大片段的整体得失分开;窗越窄,噪声越大,树的分支越容易受局部波动影响。官方在补充材料里报告了 200 kb、500 kb、5 Mb 三种窗宽对观察性注释的影响,结论是影响温和但可接受,使用者可以按自己的粒度选。

注释 方法 输入 输出文件 主要用途
系统发育树 层次聚类 观测 × 窗或基因矩阵 .nwk 看克隆或样本的分支关系
观测聚类 对树切簇 同上 meta_scsvas.csv 中的簇标签 把观测分成可管理的组
降维嵌入 PCA、ICA、NMF、UMAP、t-SNE、PHATE 同上 meta_scsvas.csv 中的二维坐标 看群体结构、离群点
高变位点 方差排序取前一千 窗、基因或术语矩阵 top_CN_variance.csv 找区分度最高的位点
空间变异位点 Moran’s I 加 BH 校正 带空间坐标的矩阵 top_CN_spatial_variance.csv 找空间自相关的位点

高变位点与空间变异位点是两张不同的表,容易混淆。前者只按方差排序,不管空间位置;后者先按方差筛,再算全局 Moran’s I,只有通过显著性阈值的才进表。空间变异表只对有空间坐标的数据集生成,官方给的数字是 82 个数据集,正好对应空间数据集的总数。这说明所有空间数据集都做了这层注释,但不是每个都一定有显著的位点。

4.2 功能性注释:从位点到基因到通路

功能性注释回答的是「这个拷贝数变化影响了什么」。站内分四步。第一步,把窗级矩阵映射到基因:用 Ensembl 的 GRCh37 或 GRCh38 坐标取出基因区间,用 BEDTools 找与窗的重叠,按重叠长度加权平均。第二步,把基因映射到通路术语:用 MSigDB 的六个集合(Hallmark、C2-KEGG、C4-Computational、C5-GOBP、C6-Oncogenic、C7-Immunologic),对术语内所有基因取平均。第三步,对 bulk 分段数据跑 GISTIC2,检出焦点扩增与缺失,再用 ORA 对焦点基因做通路富集。第四步,对同一数据集内多协议、多流程的焦点结果取交集,得到共识事件。

这四步的适用范围不一样。第一步和第二步覆盖所有有矩阵的数据集;第三步只覆盖有分段 BED 的 bulk 数据;第四步只覆盖至少有两套协议或流程的 bulk 数据。官方给的数字是:焦点术语文件 119 个,共识 CNA、共识基因、共识术语各 34 个。这两个量级都远小于 810,说明大部分数据集没有走到第三步或第四步。

步骤 方法 覆盖范围 输出 文件数
基因级映射 BEDTools 加 Ensembl 坐标 所有矩阵数据集 基因级矩阵 1,140
术语级汇总 MSigDB 六集合取平均 所有矩阵数据集 术语级矩阵 一千一百四十
焦点检出 GISTIC2 加 ORA 有分段 BED 的 bulk 焦点基因、焦点术语、GISTIC 分数 焦点术语 119
共识交集 BEDTools 取交 多流程 bulk 共识 CNA、基因、术语 各 34

这里有一个容易被忽略的限制:GISTIC2 的前提是样本相互独立、数值在 log2 尺度、位点分辨率一致。单细胞与空间数据的观测是同一患者的细胞或位点,不满足独立性;基因级矩阵没有分段断点,不满足输入要求。所以站内对这两类数据一律不做焦点与共识注释。这不是遗漏,是方法前提决定的。

4.3 案例:TCGA-BRCA 的两套分段

TCGA-BRCA 是站内用来演示共识流程的案例,也是理解「协议与流程会改变焦点结果」的最短路径。同一个乳腺癌数据集,GDC 提供了三种分段协议:等位基因特异(AS)、拷贝数分段(CNS)、掩蔽拷贝数分段(MCNS)。站内又用五种流程(ascat2、ascat3、ascatNGS、DNAcopy、GATK4_CNV)分别处理。三乘五,最多十五种组合,每种组合都能跑出一套焦点基因。

官方在 56 个 GDC bulk 数据集上比较了这些组合。结论有三层。第一层,同协议不同流程的相似度高于跨协议比较,说明分段协议是变异的主要来源,流程是次要来源。第二层,焦点基因比焦点术语更一致,因为术语层多做了一次基因平均,把差异放大了。第三层,即便 Jaccard 相似度不高,共享的焦点基因数量仍然可观,CNS 对 CNS 的比较中位数能到几十到几百个。

比较 相似度 共享焦点基因 解释
同协议、同流程 最高 全部 同一份结果自比
同协议、不同流程 较高 数十到数百 流程差异是次要来源
跨协议、同流程 较低 非平凡的核心 协议差异是主要来源
跨协议、跨流程 最低 仍有一个核心 共识只保留最稳的部分

这就是共识注释的设计逻辑:不追求「把所有焦点都留下来」,而是「只留下在多套输入里都出现的焦点」。代价是召回率下降,收益是精确率上升。对找驱动事件的人来说,这个取舍通常是值得的;对想穷举所有可能事件的人来说,这个取舍会漏掉真实的私有事件。

§4.3 的案例在后面的取数、质量评估与使用指引里还会反复出现,因为它同时涉及分段、窗、基因、术语四层,也同时涉及协议、流程、共识三个概念。把 TCGA-BRCA 走通,其他数据集的操作是一样的。

4.4 质量控制的三个动作

第一个动作是三人复核。官方明确写,所有元数据至少由三位作者独立审核。这个动作针对的是癌种亚型归类,不是拷贝数本身。归类的依据是原始疾病描述、原发部位与转移状态,优先对齐 TCGA 与 TARGET 的亚型定义,对不上的退到更宽的癌种类别。三人复核能降低归类的随意性,但不能消除上游描述本身的模糊。

第二个动作是保留原始尺度。站内不把所有数据强制转成 log2 比值,而是保留 ACN、ACN 估计值、log2 比值三种尺度,并在元数据里标记。这样做的好处是不丢失原始语义,坏处是使用者必须自己处理尺度差异。官方给出的换算是:ACN 大于 2 为扩增,小于 2 为缺失,等于 2 为二倍体;log2 比值大于 0 为扩增,小于 0 为缺失,等于 0 为中性。

第三个动作是共识交集。前面已经说过,不再重复。这里只补一句:共识的输入是同一数据集内的多套结果,不是跨数据集的结果。跨数据集的共识不在站内提供,需要使用者自己做。

三个动作的边界可以用一句话概括:三人复核管标注,保留尺度管语义,共识交集管稳健。三者都不管原始数据的实验质量,那是上游的事。

4.5 可视化:每一张图都能下载

站内的可视化不是装饰,而是取数的一部分。每个数据集页面都有交互面板,包括窗、基因、术语三个层级的热图,系统发育树,降维嵌入图,空间分布图,CN 阶梯图,CN 分布图,焦点 CNA 与焦点基因视图,共识基因的血管图,以及焦点与共识术语的条形图。这些图支持提示框、缩放、调整尺寸,并且可以导出高分辨率图片。

对做论文图的人来说,这个功能省掉了「下载矩阵再画图」的一步。但要注意,导出的图是站内注释的结果,不是原始数据;图的坐标轴、配色、聚类顺序都经过站内处理。要放进论文,最好在方法里写明「图由 CNAScope v1.3 导出」,并把对应的矩阵文件一起存档。

对做方法比较的人来说,交互面板的价值在于快速定位异常。比如某个数据集的焦点基因数量突然比同癌种其他数据集高一个量级,点开热图就能看到是不是某条染色体整体扩增导致的。这种「先看图再决定要不要下载」的流程,比先下几十 GB 再排查高效得多。

§5 核心层 C:怎么拿到

5.1 取数路径总览

官网没有公开的 REST API 文档,也没有看到批量下载的清单文件。取数只有两条路:一是在浏览器里进 Database 页面,按来源、癌种、模态筛选,逐个数据集点开下载;二是在 Workflow 页面上传自己的矩阵,等站内算完,在 Workspace 里下载结果。前者是「拿站内的数据」,后者是「让站内注释你的数据」。

这个设计与它的定位一致:它是一个面向浏览的数据库,不是一个面向管道的服务。想做自动化批量拉取,需要自己解析页面或直接用浏览器自动化,但页面是 Next.js 客户端渲染,curl 拿到的 HTML 里没有数据集列表。这一点在取数前必须知道,否则会以为站点坏了。

四条路径的分工很清楚:浏览下载适合少量数据集与探索性分析;在线注释适合带着自己的矩阵来;结果管理只服务于本浏览器会话里的历史任务;论文补充材料只给方法与补充图,不给全量数据。

5.2 先确认站点与版本

第一步不是下载,是确认你访问的是真站点。这个项目的官方入口是 cna.fengslab.com,不是 cnascope.org。后者在当前网络环境下无法解析,也不在论文、Database Commons 或任何官方页面里出现。用错域名会浪费很多时间。

#-- 确认主页可访问,并抓取版本说明所在的 HTML
curl -sSL --max-time 30 "https://cna.fengslab.com/" -o cnascope_home.html
#-- 首页是 Next.js 预渲染,版本说明直接在 HTML 文本里
python3 -c "import re; s=open('cnascope_home.html',encoding='utf-8').read(); print(len(s)); print('Version 1.3' in s)"

第二条命令会打印 HTML 长度和一个布尔值。如果布尔值是 True,说明你拿到的是带版本说明的首页;如果是 False,可能是网络被劫持到了别的页面,或者站点改版。无论哪种情况,都不要继续下载,先核对页面标题是否为 CNAScope。

5.3 逐数据集下载与文件命名

进入 Database 页面后,左侧是按来源、癌种、模态的筛选器,右侧是数据集卡片。点开任一数据集,页面会给出元数据表、注释面板与下载区。下载区的文件名有固定后缀,认后缀比认全名快。

后缀 内容 文件数 适用数据
seg.txt 分段级拷贝数 265 有原始分段的 bulk
cna.csv 窗级或基因级矩阵 1,140 所有矩阵数据集
meta_scsvas.csv 观测元数据、簇标签、嵌入坐标 同 cna.csv 所有矩阵数据集
.nwk 系统发育树 同 cna.csv 所有矩阵数据集
gene_cna.csv.gz 基因级矩阵 同 cna.csv 所有矩阵数据集
term_cna.csv.gz 术语级矩阵 同 cna.csv 所有矩阵数据集
top_CN_variance.csv 前一千高变位点 1,137 绝大多数矩阵数据集
top_CN_spatial_variance.csv 空间变异位点 82 空间数据集
focal_term.csv 焦点术语 119 有分段 BED 的 bulk
amp_genes.conf_95.txt 焦点扩增基因 未公布 有分段 BED 的 bulk
del_genes.conf_95.txt 焦点缺失基因 未公布 有分段 BED 的 bulk
scores.gistic GISTIC2 分数 未公布 有分段 BED 的 bulk
consensus_cna.csv 共识 CNA 34 多流程 bulk
consensus_gene.csv 共识基因 34 多流程 bulk
consensus_term.csv 共识术语 34 多流程 bulk

文件数这一列是官方在论文里给的,不是站内每个数据集都齐全。比如 seg.txt 只有 265 个,而矩阵文件有一千一百四十个,说明大部分数据集只提供矩阵,不提供原始分段。想要分段,得先确认目标数据集在不在那 265 个里。

批量下载之后,可以用后缀计数快速判断拿到的是哪一层。下面的循环按后缀统计,输出一行一个后缀,数字对不上就说明有文件没下全。

#-- 统计下载目录里各后缀的文件数
for suffix in seg.txt cna.csv meta_scsvas.csv nwk gene_cna.csv.gz term_cna.csv.gz; do
  count=$(find cnascope_download -name "*${suffix}" | wc -l)
  echo "${suffix} ${count}"
done

5.4 读一个矩阵文件

下载到的 cna.csv 是宽表,第一列是位点,其余列是观测。列名通常对应样本或细胞标识。读进来之后第一件事是看形状与缺失,第二件事是把观测列与元数据表的行对齐。不要假设列顺序与元数据行顺序一致,按标识合并才安全。

#-- 读取一个窗级矩阵,并与观测元数据对齐
import pandas as pd

cna = pd.read_csv("GDC-TCGA-BRCA_cna.csv", index_col=0)
meta = pd.read_csv("GDC-TCGA-BRCA_meta_scsvas.csv", index_col=0)

print("矩阵形状:", cna.shape)
print("元数据形状:", meta.shape)
print("观测交集:", len(cna.columns.intersection(meta.index)))

#-- 取前三个位点、前五个观测,确认数值范围
subset = cna.iloc[:3, :5]
print(subset)
print("取值范围:", float(cna.min().min()), float(cna.max().max()))

这段代码假设文件名符合站内命名规则。实际下载的文件名可能带数据集前缀,读之前先用 ls 确认。如果矩阵是基因级,索引会是基因符号而不是染色体坐标,取值范围的解释也随之改变:基因级的值是多个窗的加权平均,极值通常比窗级更窄。

5.5 读基因级与术语级注释

基因级与术语级文件是压缩的 CSV,行是位点,列是观测。它们的列名与 cna.csv 一致,可以按列名拼接。术语级的值是术语内基因的平均,所以它的取值范围比基因级更窄,极端值更少。用术语级做聚类,簇会更偏向大范围的通路模式;用基因级做聚类,簇会更偏向单个基因的得失。

#-- 读取基因级与术语级矩阵,检查同一观测的取值差异
import pandas as pd

gene = pd.read_csv("GDC-TCGA-BRCA_gene_cna.csv.gz", index_col=0)
term = pd.read_csv("GDC-TCGA-BRCA_term_cna.csv.gz", index_col=0)

obs = gene.columns[0]
print("观测:", obs)
print("基因级标准差:", float(gene[obs].std()))
print("术语级标准差:", float(term[obs].std()))
print("基因数:", gene.shape[0], "术语数:", term.shape[0])

标准差的大小不是质量指标,只是粒度差异的体现。基因级位点多、单点噪声大,标准差通常更大;术语级做了平均,标准差更小。做跨数据集比较时,应该在同一粒度上比,不要把基因级的标准差与术语级的标准差放在一张图里。

5.6 上传自己的矩阵

Workflow 页面有两个流程。Basic CNA Annotation 接受单个矩阵,可附带元数据与自定义基因集,需要指定观测类型(样本、细胞、位点)、参考基因组(hg19 或 hg38)、聚类数。提交后站内会跑观察性注释与功能性注释,完成后在 Workspace 下载。Consensus CNA Annotation 接受同一 bulk 数据集至少两套矩阵,指定位点类型(分段或窗)与参考基因组,站内分别跑焦点检出再取交集。

参数 Basic 流程 Consensus 流程 说明
观测类型 样本、细胞、位点 仅样本 决定是否跑 GISTIC2
参考基因组 hg19、hg38 hg19、hg38 影响基因坐标
位点类型 窗或基因 分段或窗 共识流程不接受基因级
聚类数 可指定 不适用 只影响切树
元数据 可选 可选 用于分组着色
自定义基因集 可选 可选 追加术语注释
邮箱 可选 可选 任务完成通知

两个流程都有演示案例。Basic 流程的演示是 TCGA-ACC、WCDT-MCRPC 与 BRCA-T10,分别对应 bulk、bulk 与 scDNA;Consensus 流程的演示是 TCGA-BRCA 的分段版与窗版。想先看输出长什么样,跑演示比上传自己的数据快。

§6 与库内条目的关系

6.1 关系图谱

库里已经有 TCGA、cBioPortal、COSMIC、TARGET、CZ CELLxGENE、Single Cell Portal、HEST-1k、Ivy GAP 等与肿瘤基因组或单细胞相关的记录。CNAScope 与它们不是替代关系,而是「在它们之上抽出一层拷贝数视图」的关系。下面这张表按「上游 / 同级 / 相关」三类分工来排。

库内记录 关系 分工
TCGA 上游 提供原始样本、分段与临床,CNAScope 取其中的拷贝数层重采样
cBioPortal 上游 提供多癌种样本级突变与拷贝数,CNAScope 收其 CNA 谱
COSMIC 上游 提供基因级拷贝数与突变,CNAScope 收其 CNA 谱
TARGET 上游 提供儿童肿瘤数据,CNAScope 收其 CNA 谱
CZ CELLxGENE 同级 单细胞表达图谱,CNAScope 的单细胞层是拷贝数而非表达
Single Cell Portal 同级 单细胞研究门户,CNAScope 提供跨模态的 CNA 注释
HEST-1k 同级 病理与空间转录组配对,CNAScope 的空间层偏 CNA 推断
Ivy GAP 同级 胶质母细胞瘤空间转录组,CNAScope 覆盖更广但每癌种更浅
MSK-IMPACT 相关 靶向测序队列,可作为突变层补充,CNAScope 不重复其突变层

这张表里最容易误解的是 TCGA。库内的 TCGA 记录讲的是原始项目与样本结构,CNAScope 讲的是「把 TCGA 的拷贝数抽出来,和别的模态放在一起」。两者的读者不同:前者想知道 TCGA 怎么来的,后者想知道 TCGA 的拷贝数能怎么用。

6.2 检索路径

在站内找 CNAScope,最直接的标签是「基因组学与多组学」「单细胞基因组学」「变异与注释」「肿瘤学」。关键词可以搜「拷贝数」「CNA」「泛癌」「焦点扩增」「共识」。如果按数据集名搜,CNAScope 与 cna.fengslab.com 都能命中;如果按上游名搜,cBioPortal、COSMIC、GDC 会同时命中上游记录与 CNAScope,需要看描述区分。

你的检索意图 建议关键词 可能命中的记录
找泛癌拷贝数总库 泛癌、拷贝数、CNA CNAScope
找乳腺癌拷贝数案例 BRCA、TCGA-BRCA CNAScope、TCGA
找单细胞拷贝数 单细胞、scDNA、克隆 CNAScope、CELLxGENE
找空间拷贝数 空间、Visium、Xenium CNAScope、HEST-1k、Ivy GAP
找突变与临床注释 突变、体细胞、临床解读 COSMIC、cBioPortal、OncoKB
找儿童肿瘤 儿童、TARGET TARGET、CNAScope

检索时要注意,CNAScope 的「单细胞」标签覆盖的是拷贝数,不是表达。想找表达图谱,CZ CELLxGENE 与 Single Cell Portal 更合适;想找「同一批细胞既有表达又有拷贝数」,CNAScope 不保证提供配对,官方明确说跨模态的样本或细胞重叠有限。

§7 质量评估与局限性

7.0 阅读本节前的一个前置校正

评价 CNAScope 时,最容易犯的错是把「拷贝数谱数量」当成「样本数量」。官方说的三百九十五万余条拷贝数谱,是一条观测在一个位点上的取值,不是三百九十五万个病人。样本数是十七万余,单细胞数是三百余万,空间位点是七十六万余。三个数字的观测单位不同,不能互相换算,也不能相加成一个「总观测数」。

第二个容易犯的错是把「数据集数」当成「独立队列数」。八百一十个数据集里,很多来自同一个项目(比如 TCGA 的不同癌种),共享同一套样本处理与临床框架。按数据集划分训练测试集,仍可能把同一项目的不同癌种分到两侧,造成项目级泄漏。

第三个容易犯的错是把「共识」当成「真值」。共识只表示多套流程都检出了这个事件,不表示这个事件在生物学上一定真实。流程之间的系统性偏差可能让同一个假阳性在多种流程里都出现,共识对此无能为力。

把这三条校正放在前面,后面的评分才不会误判。

按供者划分不是一句口号,落到代码上就是按 donor_id 分组切分,而不是按行随机切分。下面这段用 GroupShuffleSplit 做示范,输出的训练与测试供者数应该没有交集。

#-- 按供者切分,避免同一个人的细胞跨训练集与测试集
import pandas as pd
from sklearn.model_selection import GroupShuffleSplit

meta = pd.read_csv("GDC-TCGA-BRCA_meta_scsvas.csv", index_col=0)
groups = meta["donor_id"] if "donor_id" in meta.columns else meta.index

splitter = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
train_idx, test_idx = next(splitter.split(meta, groups=groups))

print("训练观测:", len(train_idx))
print("测试观测:", len(test_idx))
print("训练供者:", meta.iloc[train_idx]["donor_id"].nunique())
print("测试供者:", meta.iloc[test_idx]["donor_id"].nunique())

7.1 五维评分

参照 DAIMS 的检查思路,这里压缩为五个维度:可发现性、可访问性、互操作性、可复用性、可持续性。分数是编辑判断,不是官方评分,依据写在每一格的说明里。

维度 分数 依据 扣分点
可发现性 4 / 5 有论文、有官网、进 Database Commons,检索友好 域名易混,cnascope.org 不存在
可访问性 4 / 5 数据免费,无需注册,页面可直接浏览 无批量下载、无公开 API、客户端渲染
互操作性 4 / 5 文件是 CSV、BED、NWK 等通用格式,字段命名清晰 跨数据集位点不对齐,尺度不统一
可复用性 3 / 5 注释丰富、可视化可导出、元数据完整 数据无独立许可,临床字段覆盖不均
可持续性 4 / 5 两个实验室维护,一年内四个版本,论文刚发表 依赖上游资源,长期资金未公开

总分 19 / 25。这个分数在同类数据库里属于中上:格式与注释是强项,许可与批量取数是弱项。分数的意义不是排名,而是提示你该在哪一步多花时间。

7.2 规模与覆盖的真实含义

八百一十个数据集、七十七个亚型,听起来覆盖了整个泛癌空间。但拆开看,覆盖是不均匀的。bulk 数据集中在 TCGA 与 COSMIC 覆盖的常见癌种,少见癌种与儿童肿瘤的样本少;单细胞数据集中在乳腺癌、胶质瘤、结直肠癌等有成熟 scDNA 流程的癌种;空间数据只有十四类亚型,且以空间转录组为主,空间 DNA 只有三个数据集。

按维度拆,癌种上乳腺癌、肺癌、结直肠癌覆盖最广,罕见癌与儿童肿瘤最窄;模态上 bulk DNA 最广,空间 DNA 最窄;地区上欧美队列为主,亚洲与非洲队列少;随访上总生存较全,无进展生存骤减;分辨率上窗级最全,分段级要看数据集有没有 BED。这张清单不是要否定它的规模,而是提醒「总数大」不等于「每个子集都大」。

7.3 已知的、可枚举的偏差

来源偏差。 八个上游资源里,cBioPortal、COSMIC、GDC 都是欧美主导的公共库,TCGA 的样本以北美人群为主。站内没有做人群层面的重新加权,所以按癌种聚合时,人群构成会继承上游的偏斜。

模态偏差。 bulk 数据占数据集的一半以上,单细胞与空间数据虽然细胞数多,但供者少。按数据集计数,bulk 是主体;按观测计数,单细胞是主体。两种计数方式会给出完全不同的「这个库偏什么」的印象。

协议偏差。 官方自己的案例就证明,同一数据集内换一种分段协议,焦点基因的重叠会明显下降。站内用共识缓解,但共识只覆盖有分段 BED 的 bulk 数据,单细胞与空间没有这层保护。

分辨率偏差。 窗宽从 200 kb 到 5 Mb,跨度二十五倍。窗越宽,短片段事件越容易被平均掉;窗越窄,噪声越大。站内默认提供三种窗宽,但没有替使用者选,选错窗宽会让后续分析偏向大片段事件。

随访偏差。 总生存与无进展生存来自上游,随访时长、删失规则、终点定义都不统一。把多个数据集的生存数据合并做 Cox 模型,需要先处理数据集间的基线风险差异,否则会得到虚假的组间差异。

标注偏差。 癌种亚型由三位作者复核,但复核的是「归类是否一致」,不是「原始诊断是否正确」。上游把某个样本标成 LUAD,站内不会重新读病理切片。原始标注的错误会原样传下来。

这六条偏差里,前三条是上游带来的,后三条是整合过程带来的。上游带来的只能靠分层与抽样核对缓解,整合带来的可以靠固定窗宽、固定协议、按数据集分层来缓解。没有哪一条能靠「换一个库」消除。

7.4 外部验证矩阵

官方用两个正交资源验证焦点与共识注释:cBioPortal 的基因级拷贝数频率与 Progenetix 的分段级拷贝数频率。验证集是三十三个同时出现在 CNAScope、Progenetix 与 cBioPortal 的 GDC 来源 TCGA 数据集。结论是扩增的一致性较强,缺失的一致性较弱,CNAScope 还检出了一批在基因级频率资源里被低估的缺失事件。

验证维度 对照资源 覆盖 结论 局限
基因级频率 cBioPortal 33 个 TCGA 数据集 扩增一致性强 基因级对照,缺分段信息
分段级频率 Progenetix 33 个 TCGA 数据集 整体一致,缺失偏弱 分段定义不同
焦点事件 文献 部分事件 有文献支持的独有事件 非系统验证
共识事件 多流程自比 34 个数据集 稳健性提升 只覆盖 bulk
单细胞注释 无外部真值 227 个数据集 未做外部验证 缺金标准
空间注释 无外部真值 82 个数据集 未做外部验证 缺金标准

这张表最重要的两行是最后两行。单细胞与空间的注释没有外部真值验证,官方也没有声称有。用这两层数据做方法评估时,只能做一致性比较,不能做准确性比较。想把它们当基准真值,是把「未验证」当成了「已验证」。

7.5 它为何能持续:把上游的更新变成自己的更新

CNAScope 的生存逻辑不是「自己产生数据」,而是「把上游不断产生的新数据快速收进来,用统一的注释层增加价值」。上游每发表一批单细胞或空间数据,它就有新内容可收;上游每更新一次参考基因组或通路集合,它就有新注释可跑。这个模式的好处是边际成本低,坏处是永远依赖上游的格式与质量。

它能持续的两个条件,一是两个实验室愿意长期维护,二是使用者愿意引用。前者看资金与人员,后者看它是否真的比「直接用上游」省事。从目前四个版本的节奏看,它至少在短期内是活跃的。长期能否持续,取决于它能否把「统一注释」这件事做得比使用者自己做的更好——如果使用者发现自己分窗、映射基因、跑 GISTIC2 更灵活,那这层价值就会被绕开。

§8 生态位与历史

8.1 历史沿革

2025 年 4 月,CNAScope 以 GDC 的 52 个项目起步,只做拷贝数的整理与可视化。两个月后,来源扩到 6 个,数据集到 354 个,单细胞与空间数据第一次进入。7 月,两个在线注释流程上线,库从「只读」变成「可写」。10 月,来源扩到 8 个,数据集到 810 个,加了通路富集与空间变异注释。论文在 2025 年 11 月 20 日上线,正式版本对应 1.3。

这个节奏在学术数据库里算快。快的代价是版本之间的口径会变:1.1 的八十二个亚型到 1.3 变成七十七个,1.1 的样本数到 1.3 接近翻倍。使用者如果跨版本做面板,必须先把版本对齐。

把时间线摊开看,六个节点可以分成三段:4 月到 6 月是「从单库到多源」,7 月是「从只读到可写」,10 月到次年 1 月是「从能用到被引用」。每一段的重心不同,前两段改数据与功能,后一段改身份与可见度。

8.2 与其他 CNA 库的生态位

把 CNAScope 放进 CNA 数据库的谱系里,可以看到三代产品。第一代是「单模态归档」,比如早期的 GDC 与 COSMIC,解决「有没有」;第二代是「单模态加注释」,比如 cBioPortal 与 Progenetix,解决「好不好用」;第三代是「多模态加统一注释」,CNAScope 属于这一代,解决「能不能放在一起比」。

三代不是替代关系。第一代仍然是原始数据的来源,第二代仍然是临床与突变的主力,第三代是在它们之上做跨模态的视图。一个完整的课题往往要同时用三代:从 GDC 拿原始数据,从 cBioPortal 拿临床与突变,从 CNAScope 拿跨模态的拷贝数比较。

三代的局限也很清楚:第一代格式各异、注释少;第二代以单模态为主;第三代依赖上游、许可不清。选哪一代,取决于你要回答的问题,不取决于哪一代更新。

8.3 维护模式与更新节奏

官方说会每年更新本体与参考数据库。这句话的含义是:基因坐标、通路集合、细胞类型本体这些外部参照会跟着版本走,但底层 CNA 数据不一定重新调用。对使用者的影响是,同一数据集在不同年份的注释可能不同,原因不是数据变了,而是参照变了。做长期追踪时,应该把参照版本一起记下来。

站内的版本说明只写到 1.3,没有公开路线图。从论文的讨论看,下一步的重点可能是跨模态配对(同一批样本既有 bulk 又有单细胞)、空间 CNA 推断方法的改进、以及单细胞与空间的焦点检测方法。这三件事都是当前的空缺,也都是难点。

8.4 引用与社区

论文发表在 Nucleic Acids Research 的数据库专刊,DOI 是 10.1093/nar/gkaf1242,PMID 是 41263112,PMCID 是 PMC12807756。引用时应该同时写版本号与访问日期,因为站内数据仍在更新。如果用了具体的注释结果,最好在方法里写明「版本 1.3,访问于某年某月」。

社区层面,站内有 Contact 页与作者邮箱,官网页脚没有公开的论坛或代码仓库入口。遇到问题直接写信是主要渠道。这个模式对小团队友好,对大社区不够规模;如果使用者增多,可能会成为瓶颈。

§9 使用指引

9.1 三种角色的路径

做探索的人。 先上 Database 页面,按癌种筛,点开两三个数据集看热图与树,确认数据结构符合预期,再下载矩阵。不要一上来就下载全量,先看一个数据集的文件列表与字段,能省掉很多重复劳动。

做方法的人。 先读论文的方法部分与补充材料,确认窗宽、基因坐标、通路集合的版本,再决定用哪一层。做焦点方法比较,直接用 GDC 的 56 个数据集,其中 34 个有共识结果;做单细胞方法比较,注意没有外部真值,只能做一致性。

做临床或转化的人。 先确认目标癌种的样本量与随访字段,再看生存分析的可行性。不要假设每个数据集都有 PFS;PFS 的覆盖比 OS 少得多。做预后模型时,按数据集分层比合并更稳。

角色 第一步 第二步 不要做
探索者 筛癌种与模态 看一个数据集的热图与字段 一上来下载全量
方法研究者 读方法与补充材料 选固定窗宽与流程 跨窗宽直接比焦点
临床转化 查样本量与随访字段 按数据集分层建模 把多数据集生存直接合并

9.2 一条最短的可用流程

从零到一张可用的基因级矩阵,最短路径是:确认站点、筛数据集、下载矩阵与元数据、按观测对齐、检查尺度、做第一张热图。下面这段代码把后四步串起来,假设你已经把两个文件下载到本地。

#-- 最短流程:读矩阵、对齐元数据、检查尺度、画热图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

cna = pd.read_csv("GDC-TCGA-BRCA_cna.csv", index_col=0)
meta = pd.read_csv("GDC-TCGA-BRCA_meta_scsvas.csv", index_col=0)

shared = cna.columns.intersection(meta.index)
cna = cna[shared]
meta = meta.loc[shared]

#-- 按方差取前五十个位点,避免热图过密
top = cna.var(axis=1).sort_values(ascending=False).head(50).index
mat = cna.loc[top]

fig, ax = plt.subplots(figsize=(10, 6))
im = ax.imshow(mat.values, aspect="auto", cmap="RdBu_r", vmin=-1, vmax=1)
ax.set_yticks(range(len(mat.index)))
ax.set_yticklabels(mat.index, fontsize=6)
ax.set_xlabel("observations")
fig.colorbar(im, ax=ax, label="copy number")
plt.tight_layout()
plt.savefig("cna_heatmap.png", dpi=200)

这段代码的 vmin 与 vmax 固定为 −1 与 1,适合 log2 比值。如果你的矩阵是 ACN 或 ACN 估计值,应该改成 0 到 4 左右,否则颜色会全挤在中间。热图之前先看一眼 value_scale 字段,能避免这种低级错误。

矩阵读进来之后,建议立刻转成列类型明确的 Parquet。CSV 的列名在反复读写中容易变成数字或带空格,Parquet 会保留 schema,后续合并元数据时少一类麻烦。

#-- 清洗列名后存成 Parquet,便于后续按列合并
import pandas as pd

cna = pd.read_csv("GDC-TCGA-BRCA_cna.csv", index_col=0)
cna.columns = [str(c).strip() for c in cna.columns]
cna.index = [str(i).strip() for i in cna.index]

cna.to_parquet("tcga_brca_cna.parquet", compression="zstd")
print(cna.shape)
print(cna.dtypes.value_counts())

9.3 引用方式

引用分三种情况。只用了数据库的概念或入口,引论文即可。用了具体数据集的注释结果,引论文加版本号加访问日期。用了在线流程跑自己的数据,除了引论文,还应该在图注里写明「注释由 CNAScope v1.3 的 Basic CNA Annotation 流程完成」。

论文的完整引用是:Feng X, Zheng J, Peng S, Jiang A, Ng KH, Lyu C, Jin Q, Chen L. CNAScope: pan-cancer copy number aberration database with functional annotation and interactive visualization. Nucleic Acids Research. 2026;54(D1):D1364–D1375. doi:10.1093/nar/gkaf1242.

如果期刊要求数据可用性声明,可以写「数据可从 https://cna.fengslab.com/ 免费获取,版本 1.3,访问于某年某月」。

§10 AI 使用声明

项目 说明
数据来源 官方站点、NAR 论文全文、Database Commons 目录
标注方式 站内注释由团队流程生成,非本篇编辑标注
训练可用性 可用于非商业研究,需按供者划分
许可状态 论文 CC BY-NC 4.0,数据无独立许可
隐私 全部为已公开的去标识化数据,无新增个人信息
偏倚 癌种、人群、模态覆盖不均,详见 §7.3
建议用途 跨模态探索、方法对照、教学演示
不建议用途 商业再分发、把细胞当独立样本、把共识当真值

常见误读

说法 实际 证据
「cnascope.org 是官网」 该域名无法解析,官方入口是 cna.fengslab.com 论文摘要、Database Commons、官网
「它有三百九十五万个病人」 三百九十五万是拷贝数谱条数,样本是十七万余 论文摘要
「单细胞数就是样本数」 单细胞的独立单位是供者,细胞数远大于供者数 论文方法、元数据字段
「所有数据集都有焦点注释」 只有有分段 BED 的 bulk 数据有,单细胞与空间没有 论文方法、文件数 119 与 34
「共识事件就是真事件」 共识只表示多流程都检出,不保证生物学真实 论文讨论
「它是原始测序库」 它整合已发布的 CNA 谱,不含 read 与探针强度 论文数据可用性、文件类型
「数据可以随便商用」 论文非商业许可,站点版权所有,数据无独立许可 论文版权页、站点页脚
「八百一十个数据集是八百一十个独立队列」 很多数据集来自同一项目,存在项目级重叠 论文来源描述
「空间 CNA 是空间 DNA 直接测的」 82 个空间数据集中只有 3 个是空间 DNA 论文结果
「摘要与结果数字一致」 样本、单细胞、空间位点各有一套口径 论文摘要与 Results

FAQ

Q1:CNAScope 和 PhysioNet 有关系吗?
没有。它不在 PhysioNet 上,也不属于 PhysioNet 的任何子库。官方入口是香港城市大学实验室维护的 cna.fengslab.com,论文发表在 Nucleic Acids Research。把它和 PhysioNet 联系起来,通常是记混了域名或把「数据库」当成了「生理信号库」。

Q2:它到底有多少样本?
摘要与首页写十七万四千四百六十四份,结果部分写十七万三千九百一十四份。两套都是官方口径,差额五百五十份,官方没有解释。引用时写明取的是哪一处,不要跨口径相减。

Q3:为什么单细胞数比样本数大这么多?
因为观测单位不同。样本是一个病人或一份标本,单细胞是一个细胞。一个病人可以贡献几千个细胞,所以细胞数自然大一个量级。做统计时,独立单位仍然是病人,不是细胞。

Q4:我能用它训练一个 CNA 分类器吗?
可以,但要先定义标签。站内没有「这个片段是否驱动」的金标准,只有癌种、分期、生存等临床字段。如果你要预测癌种,可以用癌种标签;如果你要预测驱动事件,需要自己从焦点或共识结果里构造标签,并承担标签噪声。

Q5:焦点注释为什么只覆盖一小部分数据集?
因为 GISTIC2 要求样本独立、log2 尺度、分段输入。单细胞与空间的观测不独立,基因级矩阵没有分段,都不满足前提。站内选择不做,而不是硬做。这是方法上的克制,不是数据缺失。

Q6:共识注释的 34 个数据集是怎么来的?
是同一 bulk 数据集内至少有两套不同协议或流程的焦点结果,才能取交集。56 个 GDC bulk 数据集里,有 34 个满足这个条件。其余数据集只有一套结果,无法做共识。

Q7:空间转录组的 CNA 可信吗?
它是从表达反推的,不是空间 DNA 直接测的。官方自己说空间 CNA 推断方法还不成熟,目前用 inferCNVpy 做位点级推断。把它当绝对拷贝数不可靠,当相对模式或空间自相关的输入更合适。

Q8:下载需要注册吗?
不需要。数据免费,页面可直接浏览。但下载是逐数据集的,没有批量包,也没有公开 API。想批量取数,需要自己写浏览器自动化或解析页面。

Q9:可以商用吗?
论文是 CC BY-NC 4.0,允许非商业再使用;站点页脚写版权所有;数据本身没有单独的许可声明。商业用途应先联系通讯作者,取得书面许可,不要直接打包进产品。

Q10:它和 cBioPortal 有什么不同?
cBioPortal 是它的上游之一,强在样本级突变、临床与拷贝数的联动。CNAScope 在 cBioPortal 之上补了统一分窗、基因与通路注释、焦点与共识分析,以及单细胞与空间的跨模态视图。要原始突变与临床,用 cBioPortal;要跨模态拷贝数比较,用 CNAScope。

Q11:版本更新后,旧的分析还能复现吗?
不一定。站内数据仍在更新,同一数据集在不同版本的注释可能不同。复现时应该记录版本号、访问日期、窗宽与参考基因组。论文对应的是 1.3 版,用 1.3 复现最稳。

术语表

术语 英文 解释
拷贝数变异 copy number aberration, CNA 基因组片段的获得或丢失,通常以千碱基到兆碱基计
绝对拷贝数 absolute copy number, ACN 每个癌细胞中某位点的整数拷贝数,2 为二倍体
ACN 估计值 ACN estimate 因肿瘤纯度、亚克隆与噪声产生的非整数拷贝数
log2 比值 log2 ratio 以 2 为底的对数比值,0 为中性,正为获得,负为丢失
分段 segment 一段连续且拷贝数相近的基因组区间
窗 bin 固定宽度的基因组区间,用于把分段转成矩阵
基因级矩阵 gene-level matrix 行是基因、列是观测的拷贝数矩阵
通路术语级 term-level 行是通路术语、列是观测的矩阵,值为术语内基因平均
焦点事件 focal CNA 反复出现的短片段扩增或缺失,常含驱动基因
共识事件 consensus CNA 同一数据集内多协议或多流程都检出的焦点事件
GISTIC2 GISTIC2 常用的 bulk 焦点拷贝数检出工具
ORA over-representation analysis 过表征分析,检验基因集是否富集到通路
MSigDB Molecular Signatures Database 通路与基因集参考库,站内用六个集合
系统发育树 phylogenetic tree 用层次聚类表示观测间相似关系的树
降维嵌入 embedding 把高维矩阵压到二维的坐标,用于可视化
Moran’s I Moran’s I 空间自相关指标,站内用于找空间变异位点
BH 校正 Benjamini–Hochberg 控制错误发现率的多重检验校正
观测 observation 样本、单细胞或空间位点的统称
供者 donor 提供样本或细胞的人,统计上的独立单位
肿瘤纯度 tumor purity 样本中肿瘤细胞所占比例,影响拷贝数信号
亚克隆 subclone 肿瘤内具有不同基因组特征的细胞群
空间转录组 spatial transcriptomics 保留组织位置信息的表达测量技术
空间 DNA 测序 spatial DNA sequencing 在原位测量 DNA 拷贝数的技术
批次效应 batch effect 因实验批次、平台或流程不同产生的系统偏差

附录 A:核心数字核对表

项 值 来源 来源层级
数据集数 810 摘要、首页、Results 官方
样本数 174,464(摘要口径) 摘要、首页 官方
单细胞数 3,018,672 摘要、首页 官方
空间位点数 764,232 摘要、首页 官方
拷贝数谱数 3,954,361 摘要、首页、Results 官方
元数据条数 3,946,319 摘要、Results 官方
癌种亚型 77 摘要、首页 官方
上游来源 8 摘要、首页 官方
测序协议 12 摘要 官方
平台数 34 摘要 官方
计算流程 32 摘要 官方
bulk 数据集 501 Results 官方
单细胞数据集 227 Results 官方
空间数据集 82 Results 官方
GDC 数据集 56 Results 官方
共识数据集 34 Results 官方
窗宽 200 kb / 500 kb / 5 Mb Methods 官方
当前版本 1.3 首页、论文 官方

附录 B:数字的来源分层

第一层:官方页面。 首页的版本说明、Database 页面的数据集卡片、Contact 页面的机构信息。这一层的数字随版本更新,引用时必须带访问日期。

第二层:论文摘要与正文。 摘要给的是总量口径,Results 给的是分模态口径,Methods 给的是方法与文件数。两套口径不一致时,以「出处 + 口径」的方式并列,不判断谁对。

第三层:未核实。 站内的数据集总数在浏览器里能看到,但页面的数据集列表是客户端渲染,无法用静态抓取核对。本篇文章没有逐个点开八百一十个数据集,也没有统计字段空值率、癌种频次或文件体积。这些数字如果出现,都是官方给的,不是本篇算的。

层级 来源 可核对性 本篇用法
一 官网首页、Contact、Database Commons 可直接访问 版本、机构、入口
二 NAR 论文摘要、Results、Methods 可读全文 规模、结构、边界
三 站内逐数据集页面 需浏览器交互 未逐个核对,明确标注

附录 C:完整参考文献

  1. Feng X, Zheng J, Peng S, Jiang A, Ng KH, Lyu C, Jin Q, Chen L. CNAScope: pan-cancer copy number aberration database with functional annotation and interactive visualization. Nucleic Acids Research. 2026;54(D1):D1364–D1375. doi:10.1093/nar/gkaf1242.
  2. CNAScope 官方站点. https://cna.fengslab.com/. 访问于 2026-10-28.
  3. Database Commons. CNAScope. https://ngdc.cncb.ac.cn/databasecommons/database/id/10663. 访问于 2026-10-28.
  4. PubMed. PMID 41263112. https://pubmed.ncbi.nlm.nih.gov/41263112/.
  5. PMC. PMCID PMC12807756. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC12807756/.

附录 D:任务代码

#-- 核对站点、抓首页、确认版本号
curl -sSL --max-time 30 "https://cna.fengslab.com/" -o cnascope_home.html
python3 -c "s=open('cnascope_home.html',encoding='utf-8').read(); print('bytes', len(s)); print('v1.3', 'Version 1.3' in s)"

#-- 核对论文元数据(Europe PMC)
curl -sSL --max-time 30 "https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=DOI:10.1093/nar/gkaf1242&resultType=core&format=json" -o cnascope_paper.json
python3 -c "import json; d=json.load(open('cnascope_paper.json')); r=d['resultList']['result'][0]; print(r['title']); print(r['journalInfo']['journal']['title'], r['pubYear'])"

#-- 核对域名是否存在(预期失败,用于排除 cnascope.org)
curl -sSI --max-time 10 "https://cnascope.org/" || echo "cnascope.org 无法解析"

这三条命令分别验证站点、论文与错误域名。第三条预期失败,失败本身就是结论:cnascope.org 不是官方入口。如果它在你的网络里能解析,先确认解析到的是不是同一个站点,不要直接采信。

附录 E:如果只记五件事

  1. CNAScope 是泛癌拷贝数数据库,官方入口是 cna.fengslab.com,不是 cnascope.org。
  2. 它整合八个上游资源的已发布 CNA 谱,不提供原始测序数据。
  3. 规模按摘要口径是十七万余份样本、三百余万个单细胞、七十六万余个空间位点,共八百一十个数据集。
  4. 焦点与共识注释只覆盖有分段 BED 的 bulk 数据,单细胞与空间没有这层注释。
  5. 数据免费但无独立再分发许可,商用前必须联系作者。

编辑说明

本篇的事实核对集中在三处:官网首页的版本说明、NAR 论文摘要与正文、Database Commons 目录。站内的数据集列表是客户端渲染,未逐个点开核对;样本、细胞、位点三套数字存在摘要与结果两套口径,已在 §2.4 与附录 B 并列,不做取舍。文中未计算任何分布、频次、空值率或体积统计,所有规模数字均来自官方表述。封面提示词按几何抽象风格填写,未生成图片。核验日期 2026-10-28。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • cosmic — 共享标签:基因组学与多组学 / 变异与注释 / 肿瘤学
  • civic — 共享标签:基因组学与多组学 / 变异与注释 / 肿瘤学
  • cellsnvreg — 共享标签:基因组学与多组学 / 单细胞基因组学 / 变异与注释
  • 3d-genome-browser — 共享标签:基因组学与多组学 / 单细胞基因组学 / 变异与注释
  • vdjdb — 共享标签:基因组学与多组学 / 变异与注释 / 肿瘤学
  • cellosaurus — 共享标签:基因组学与多组学 / 变异与注释 / 肿瘤学
  • expression-atlas-legacy — 共享标签:基因组学与多组学 / 单细胞基因组学 / 变异与注释
  • expression-atlas — 共享标签:基因组学与多组学 / 单细胞基因组学 / 变异与注释
  • gnomad — 共享标签:基因组学与多组学 / 变异与注释 / 肿瘤学
  • human-cell-atlas — 共享标签:基因组学与多组学 / 单细胞基因组学 / 肿瘤学

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集