单细胞公共数据检索与再分析(CELLxGENE)
单细胞公共数据再分析,是指从公开数据库检索已发表的单细胞数据,下载后按自己的问题重新筛选、整合和分析。CZ CELLxGENE Discover 是目前最常用的入口之一:它收录的数据集按统一的元数据规范整理,细胞类型、组织、疾病、测序平台都用本体术语标注,并可通过 Census 接口按条件直接取出细胞,不必逐个下载文件。此外还有 GEO、Human Cell Atlas 数据门户、Broad Single Cell Portal、EBI Single Cell Expression Atlas,以及聚焦肿瘤免疫的 TISCH 等。再分析的难点不在下载,而在辨清每份数据存的是什么值、元数据能否对齐、不同研究之间如何避免重复和批次混杂。
什么时候用
- 想知道某个基因在人体各组织、各细胞类型中的表达分布,作为课题立项或验证的依据
- 自己的样本量有限,需要用公开数据扩充对照组或验证某类细胞的特征
- 构建某器官或疾病的参考图谱,用于自有数据的细胞注释或映射
- 比较同一细胞类型在健康与疾病、不同年龄或性别供体中的表达差异
- 为单细胞基础模型或机器学习任务准备大规模、元数据规范的训练数据
不适合的情况
- 需要原始 FASTQ 重新比对,而数据只在 dbGaP、EGA 等受控访问库中,必须先申请权限
- 研究问题依赖精确的临床信息或处理时间点,而公开元数据中没有这些字段
- 把来自不同研究的细胞直接合并做差异分析,却不考虑研究和供体层面的混杂
需要准备的数据
- 检索条件
- 物种、组织、疾病、细胞类型、测序平台等,最好对应到本体术语,如细胞类型用 Cell Ontology 名称。
- h5ad 文件
- AnnData 格式,含 X、obs、var、layers、obsm 等;读入后先确认 X、raw 和 layers 中分别存放的是计数还是标准化值。
- rds 或 Seurat 对象
- R 中用 readRDS 读取;注意 Seurat v5 与 v4 对象结构不同,旧对象可能需要更新后才能正常调用。
- 10x 输出文件
- matrix.mtx.gz、barcodes.tsv.gz、features.tsv.gz 三件套或 .h5 文件,GEO 上常见;文件名前缀需整理成软件识别的名称。
分析步骤
- 1
确定检索范围
先写清楚要的是哪个物种、组织、疾病状态和细胞类型,再到 CELLxGENE Discover 浏览数据集或用 Census 统计各条件下的细胞数和供体数。供体数比细胞数更能决定后续结论是否可靠。
- 2
按元数据筛选
用 obs 中的 tissue、disease、cell_type、assay、donor_id 等字段筛选,并保留 is_primary_data 为 True 的细胞,避免同一批细胞因被多个合集收录而重复计数。记录每个筛选条件。
- 3
下载并固定版本
用 cellxgene_census 按条件取出 AnnData,或下载单个数据集的 h5ad。Census 有定期发布的版本,建议在代码中写明所用版本,否则数月后重跑结果可能不同。
- 4
辨清数据内容
检查表达值是否为整数、最大值大小、是否已对数化;确认基因 ID 是 Ensembl 还是基因符号。CELLxGENE 数据的 var 索引通常是 Ensembl ID,基因符号在 feature_name 列。
- 5
格式转换与读入
Python 用 scanpy 读 h5ad、10x mtx 或 h5,R 用 Seurat 的 Read10X、Read10X_h5。跨语言可用 zellkonverter 或 SeuratDisk 转换,转换后核对细胞数、基因数和若干元数据列是否完整保留。
- 6
统一并重新质控
合并多个数据集前统一基因 ID、物种、元数据列名,按一致标准重新做质控。不同研究的过滤阈值不同,原作者保留的细胞不一定符合你的标准。
- 7
整合与再分析
以研究或供体为批次变量做整合,再进行聚类、注释或差异分析。差异比较时以供体为单位汇总,并在模型中考虑研究来源,避免把研究间差异当成生物学差异。
关键参数与决策
is_primary_data 过滤
CELLxGENE 中同一批细胞可能出现在原始数据集和整合图谱中,is_primary_data 标记原始出处。做细胞计数或组成比较时只保留 True,否则部分细胞会被重复计算。
使用原始计数还是作者标准化值
需要做差异分析、整合或重新标准化时,应取原始计数;只看表达分布或作图时可用作者提供的标准化值。不要对已经对数化的数据再次做 log1p。
细胞类型标签的粒度
统一本体标签便于跨研究检索,但粒度往往较粗;作者原始注释更细但命名不统一。建议检索时用本体标签,分析时结合作者注释或重新注释。
检测平台
10x 3' 与 5'、Smart-seq2、单核与单细胞的基因检测特征不同。单核数据内含子读数多、线粒体比例低,与单细胞数据混合时应把平台或悬液类型作为协变量。
下载规模
Census 可一次取出数百万细胞,内存不足时先按条件只取需要的组织或细胞类型,或只取需要的基因列,也可以分批读取后再合并。
常见错误
- 把标准化后的值当作原始计数送入 DESeq2 或 scVI:这些方法依赖计数分布,输入错误会导致离散度估计和潜在空间都失真。
- 基因 ID 混用:一个数据集用 Ensembl ID、另一个用基因符号,直接合并会丢失大量基因或产生重复列,需要先统一映射。
- 不做 is_primary_data 过滤就统计细胞组成:同一批细胞被重复计入,会让某些组织或细胞类型的比例明显偏高。
- 把每个细胞当独立样本比较疾病与健康:公开数据集中疾病组和对照组往往来自不同研究,差异可能主要来自研究和供体。
- 忽略数据使用许可与引用:公开数据多要求引用原始研究,部分数据有使用限制,再分析发表时需逐一核对并致谢原作者。
结果怎么看
检索结果汇总表
列出每个入选数据集的来源、平台、组织、疾病、供体数和细胞数。某条件下细胞很多但只来自一两个供体时,相关结论的外推性很有限,应在表中显式标出。
元数据核对表
合并后每列元数据的取值和缺失比例。疾病或细胞类型字段大量缺失,或同一含义有多种写法(如 normal、healthy、control 混用),需要先统一,否则分组和后续统计都会出错。
整合前后 UMAP
分别按研究来源和细胞类型着色。整合前细胞按研究聚成团属于正常现象;整合后同一细胞类型仍按研究完全分开,说明批次没有处理好,或不同研究的注释标准不一致。
目标基因表达分布图
按组织和细胞类型展示目标基因的平均表达和表达细胞比例。表达只出现在单一研究中时要警惕是该研究的技术伪影,最好在至少两个独立研究中看到一致模式。
和相近方法怎么选
CELLxGENE 与 GEO
CELLxGENE 的数据经过统一整理,元数据规范、可按条件跨研究检索,适合快速取细胞;GEO 收录范围更广,但格式五花八门,常需手动整理文件和元数据。CELLxGENE 没有的数据集再去 GEO 找,并自行完成格式统一。
下载处理后矩阵与从 FASTQ 重新处理
直接用作者提供的矩阵最快,但比对参考、过滤阈值不可控;从 FASTQ 重新处理能统一流程,代价是计算量大且部分数据需受控访问。整合多个研究且关心低表达基因或剪接时,建议重新处理。
h5ad 与 rds
h5ad 是 Python 生态的 AnnData 格式,读写快、适合大数据;rds 存储 R 对象,常见于 Seurat 流程。两者可以互转,但 uns 中的作图参数、多个 assay 等结构不一定能完整保留,转换后要逐项核对。
常见问题
CELLxGENE 下载的 h5ad 怎么在 Seurat 里打开?
可以用 zellkonverter 读成 SingleCellExperiment 再转为 Seurat 对象,或用 SeuratDisk 先转为 h5Seurat 再读取。转换后检查计数矩阵放在哪个 assay 和层中,并把 feature_name 设为基因名,否则后续按基因符号取表达会找不到基因。
怎么判断公开数据是原始计数还是标准化后的?
看矩阵中的值是否全为非负整数、最大值是否在几十到上千之间。出现小数且最大值只有个位数,通常已经对数标准化。h5ad 中还要分别检查 X、raw.X 和 layers,不同数据集的存放位置可能不同。
CELLxGENE Census 和网页版 Discover 有什么区别?
Discover 是网页,用于浏览数据集、在线查看基因表达和下载单个文件;Census 是 Python 和 R 接口,可以跨所有数据集按元数据条件直接查询并取出细胞和基因子集,适合编程批量获取和可复现分析。
多个公开单细胞数据集合并后批次很严重怎么办?
先确认已统一基因 ID 和质控标准,再以研究或供体为批次变量用 Harmony、scVI 等方法整合。如果不同研究间平台差异很大,如单核与单细胞混合,整合后仍可能残留差异,这时下游比较应在研究内部进行。
GEO 上的单细胞数据只有一个 csv 表怎么处理?
先确认行列含义和数值类型,用 pandas 或 R 读入后转为稀疏矩阵,再构建 AnnData 或 Seurat 对象。csv 通常不含细胞元数据,需要从 GEO 的样本信息和论文补充材料中补齐样本、分组等信息。
在 Codar 里怎么做
在 Codar 中描述想要的物种、组织、疾病和细胞类型后,会先确认检索条件和数据范围,再进行单细胞公共数据检索,列出可用数据集及其供体数和细胞数,确认后下载数据,并完成 h5ad、rds、10x 等格式的读取与转换,统一基因 ID 和元数据。交付检索汇总表、整理好的数据对象、元数据核对表和可复现的下载与读写脚本。
帮我从 CELLxGENE 找人类肺组织中健康和特发性肺纤维化的单细胞数据,只要成纤维细胞,下载后整理成 Seurat 能读的对象。