数据整理:先看清数据,再确定分析范围

1. 这一步在做什么

.h5ad 是单细胞分析常用的数据文件。表达数据、细胞信息和已经计算好的结果,通常都放在这个文件里。

常见位置 里面是什么
.X.layers.raw 基因表达数据。行是细胞,列是基因
obs 细胞信息表。每行是一个细胞,每列是一项标签
var 基因信息表。每行是一个基因
obsm PCA、UMAP 等结果中,每个细胞的坐标
uns 参数、颜色和其他补充信息

初学者最需要先看懂 obs。它大致像下面这样:

细胞 sample donor batch condition cell_type
cell_001 S1 D1 B1 tumor T cell
cell_002 S1 D1 B1 tumor Myeloid
cell_003 S2 D2 B2 normal B cell

这是结构示意,不是本案例的真实标签。

每一行代表一个细胞。sample 是样本,donor 是供体或患者,batch 是技术批次,condition 是实验分组,cell_type 是已有细胞标签。

2. 直接看一个真实案例

本案例使用 Shi 等发表于 Nature 的人类健康泛组织单细胞图谱。它整合了 35 种人体组织和 706 个健康样本。你可以查看论文原文,或前往 Zenodo 数据下载页获取数据。

本案例检查的原始文件是 igt_s9_fine_counts.h5ad,约 9.9 GB。它是健康泛组织数据,不是泛癌肿瘤数据。下面先检查文件,再从中选择 6 个 dataset,生成一份较小的演示子集。

2.1 先只读检查

用户先让 omicOS 查看数据,但不修改原文件。

用户要求 omicOS 只读检查 h5ad 数据

你也可以这样问:

请只读检查:
<你的 h5ad 文件路径>
不要修改原文件。

请汇总:
1. 数据规模和物种;
2. 表达数据是 counts 还是 lognorm;
3. obs 中的样本、供体和批次相关字段;
4. 已有标签。

最后告诉我:
进入预处理前还需要确认什么。

omicOS 返回了数据规模、表达形式和 obs 字段概览。

omicOS 返回原始数据的规模、表达形式和 obs 字段

原始文件有 2,293,951 个细胞、21,812 个基因。点击图片可查看完整汇总。

截图中的“泛癌 / 泛组织图谱”是当时尚未核对来源时的初步表述。现在已确认它是健康泛组织图谱。

图中把 donorID 列为批次校正候选。这里要谨慎:donor 首先代表生物学个体,不能默认当成技术批次。批次处理使用哪一列,要结合实验设计决定。

这次检查得到的关键信息是:

要确认的内容 本案例结果
物种 根据 HGNC 风格的基因名,判断为人类数据
数据规模 2,293,951 个细胞,21,812 个基因
表达形式 根据抽样表达值和文件结构,判断 .X 为 raw UMI counts
数据来源 26 个 cohort、33 个 dataset
生物学个体 317 个 donor、706 个 sample
组织和平台 35 种 tissue、6 类 platform
已有标签 compartmentmajorClusterann1/2/3cellType1/2subCluster

这里有两个边界:

  • “人类”是根据基因命名判断的,最好再与数据说明核对;
  • “counts”来自表达值抽样和文件结构判断,不等于逐个检查了 229 万个细胞的全部数值。

2.2 把筛选要求说清楚

当时任务把这份数据误称为“泛癌”。核对来源后,教程中建议这样描述筛选任务:

从这份健康泛组织图谱中筛选部分数据,
最终保证总细胞数在 20 万以内,输出 h5ad。
请给个筛选方案。

最终我希望只保留 6 个 dataset,
每个至少 3 个样本。

这段话给出了三个可检查的条件:

  1. 只保留 6 个 dataset;
  2. 每个 dataset 至少有 3 个样本;
  3. 总细胞数不超过 20 万。

omicOS 给出了三套方案:

方案 大致思路 细胞数 取舍
A 选择 6 种组织,对大型 dataset 分层下采样 约 176,000 组织较均衡,但会抽掉部分细胞
B 完整保留 6 个小/中型 dataset 142,540 不做 dataset 内下采样,但缺少肝、肺、乳腺等常见组织
C 以上皮器官为主,对部分 dataset 下采样 约 182,000 覆盖更多常见上皮组织,但会抽掉部分细胞

用户选择了方案 B:

方案 B —— 无需降采样,6 个小/中型 dataset。

omicOS 给出的方案 B 数据组成和细胞数

方案 B 完整保留所选 6 个 dataset 内的细胞,总计 142,540 个。

截图中的“主要癌种组织”沿用了当时的任务假设,这个说法并不成立。准确地说,方案 B 的组织覆盖有限,缺少肝、肺和乳腺,同时包含胸腺和骨骼肌。

“无需降采样”只表示所选 6 个 dataset 内没有再抽取细胞。其余 27 个 dataset 仍被排除,并不是原始数据一条都没删。

2.3 写出新文件并从磁盘读回

用户确认方案 B 后,omicOS 按 datasetID 进行筛选,写出新的 .h5ad,随后从磁盘重新打开文件进行校验。

omicOS 从磁盘读回并汇总筛选后的 h5ad

最终输出为 142,540 个细胞、21,812 个基因。图片已隐藏本机输出路径和内部标识。

最终结果:

指标 结果
细胞数 142,540
基因数 21,812
dataset 6
sample 65
donor 28
tissue 6
表达矩阵 float64 CSR;抽样表达值仍为整数
文件大小 约 2.6 GB
原文件 未修改

6 个 dataset 的明细如下:

datasetID Cohort Tissue 细胞数 样本数
D27 ThymusCellAtlas Thymus 30,828 20
D30 UreterGSE184111 Ureter 25,311 10
D04 GutCellAtlasColon Colon 25,104 20
D20 ProstateGSE172316 Prostate 23,686 6
D21 SkeletalMuscle SkeletalMuscle 22,838 6
D08 KidneyGSE131685 Kidney 14,773 3
合计 6 种 tissue 142,540 65

磁盘读回明确核对了:

  • 输出维度是 142,540 × 21,812
  • 只包含 D04、D08、D20、D21、D27 和 D30;
  • 有 65 个 sample、28 个 donor;
  • .X 仍是 CSR,抽样表达值仍为整数;
  • datasetIDsampleIDdonorIDtissue 等关键字段仍在;
  • ann1majorClustercompartment 和部分 QC 字段仍在。

回放总结中写了“所有 metadata 列保留”。实际读回是逐项检查了上面这些关键字段。因此,其他列如果后续要用,仍建议单独确认。

2.4 这个结果能不能直接叫“泛癌子集”

不能。原始文件的论文和 Zenodo 记录已经说明:它来自健康样本,是健康泛组织图谱。

方案 B 满足“6 个 dataset、每个至少 3 个样本、少于 20 万细胞、不做 dataset 内下采样”这些数据条件。但组织名称不能把健康数据变成肿瘤数据。

所以更准确的说法是:

这是从大型健康泛组织图谱中选出的 6-dataset 多组织演示子集。

如果研究目标真的是泛癌比较,应另行使用论文的泛癌数据或其他匹配的疾病数据。

3. 这个案例最重要的四条信息

关键信息 对后续分析有什么用
数据判断为人类 后续使用人类基因命名和参考资料
表达数据判断为 counts 可以从 QC、归一化和高变基因筛选开始
sample、donor、dataset 等字段清楚 可以识别生物学重复和数据来源
子集按 datasetID 生成 6 个入选 dataset 完整保留,没有 dataset 内细胞下采样

拿到这些信息后,已经可以准备进入预处理。接下来需要理解的是:这些字段分别代表什么,以及哪些选择不能交给工具自动决定。

4. obs 里的字段怎么理解

字段 人话解释 为什么重要
sampleID 细胞来自哪个样本 后续汇总和比较时,不能把每个细胞当成独立样本
donorID 细胞来自哪个人 它是生物学个体,不应简单当成技术批次
datasetID 数据属于哪个子数据集 本案例直接用它决定保留范围
cohortID 数据来自哪个研究队列 可能带有研究来源和技术差异
platform 使用了哪类实验平台 可能是技术批次来源
tissue、疾病和 condition 细胞的生物学背景 决定不同 dataset 能否放在一起比较

cohortIDdatasetIDplatform 都可能与批次有关,但不能看到列名就直接拿去校正。要先判断它们代表技术差异,还是研究设计本身。

5. 选择子集时要权衡什么

你要决定什么 需要问自己的问题
生物学覆盖面 这些组织真的能回答我的问题吗?
样本独立性 65 个 sample 来自多少 donor?同一个 donor 是否有多个 sample?
是否下采样 更重视保留全部细胞,还是不同 dataset 之间的细胞数平衡?
计算规模 142,540 个细胞和约 2.6 GB 文件是否适合当前机器?
已有标签 标签来自哪里?是否有缺失值?能否直接用于研究问题?

本案例选择“不下采样”,换来的是所选 dataset 内细胞完整保留;代价是组织组成不够均衡。这不是对错题,而是研究取舍。

标签仍要单独检查

本案例没有清理、合并或重命名标签。正式分析前,仍建议检查:

  • NA、空字符串和未使用的类别;
  • 同一标签的不同拼写;
  • sampleIDdonorIDdatasetID 和疾病状态之间是否冲突;
  • 多层细胞标签之间是否一致;
  • 如果研究疾病或肿瘤,应另行准备匹配数据,不能把健康组织当成肿瘤样本。

可以继续这样问:

请检查输出文件 obs 中的:
- sampleID、donorID、datasetID、cohortID;
- tissue、疾病状态、condition;
- 已有细胞标签。

请统计缺失值、实际使用的类别和字段之间的冲突。
先给检查结果,不要覆盖原字段。

6. 谁负责什么

分析者负责 可以交给 omicOS
确认物种和研究问题 只读盘点文件结构、规模和字段
决定哪些 dataset 在生物学上可比 统计每个 dataset 的细胞数和样本数
权衡组织覆盖和是否下采样 生成多套满足约束的候选方案
确认数据来源是否适合研究问题 按确认的 datasetID 生成新文件
判断已有标签能否使用 从磁盘读回并检查关键字段和输出规模

7. 结果怎么检查

本案例已经完成:

  1. 原文件只读打开,结果写入新文件;
  2. 输出文件从磁盘重新打开成功;
  3. 细胞数是 142,540,基因数是 21,812;
  4. 6 个 dataset 的细胞数相加等于 142,540;
  5. 每个 dataset 至少有 3 个样本;
  6. 65 个 sample、28 个 donor 和 6 种 tissue 可正常读取;
  7. 关键元数据、注释和 QC 字段仍在;
  8. 表达矩阵仍被判断为 counts。

分析者还要补充确认:

  1. 论文说明这些 dataset 来自健康样本;若研究疾病或肿瘤,需要另行匹配数据;
  2. 65 个 sample 与 28 个 donor 的对应关系;
  3. 方案 B 的组织组成是否适合研究问题;
  4. 后续批次处理应该使用哪个字段;
  5. 需要使用的其他 obs 列是否完整保留。

另外,分类字段可能保留“零细胞类别”。统计每个 dataset 的样本数时,要看实际非零类别,不能只看分类表里一共有多少名字。

8. 下一步

确认物种、counts、样本关系和最终分析范围后,进入预处理。下一步会介绍 QC、归一化、批次处理、降维和聚类。

本页最新版案例输出 142,540 个细胞;下一页直接使用这份输出进行预处理。

9. 案例实际回放

下面按真实操作顺序,用核对来源后的准确表述把案例重新走一遍。

9.1 新建项目和对话

  1. 在“分析”页找到 PROJECTS,点击右上角的 + 新建项目。
  2. 项目名称填写“我的项目A”。
  3. 展开项目,点击项目名称右侧的 +,新建对话“泛组织数据预览&整理”。

在 omicOS 中新建项目和项目内对话

红色箭头分别指向“新建项目”和“在项目内新建对话”。

一个项目管理一项分析。数据整理、预处理和细胞注释可以放在同一项目的不同对话中。

新对话不会自动继承旧对话的全部结论。进入下一阶段时,把数据路径、物种、表达形式和关键字段重新写清楚。

9.2 先只读检查

请只读检查:
<你的 h5ad 文件路径>
不要修改原文件。

请汇总:
1. 数据规模和物种;
2. 表达数据是 counts 还是 lognorm;
3. obs 中的样本、供体和批次相关字段;
4. 已有标签。

最后告诉我:
进入预处理前还需要确认什么。

看到结果后,先记住:

  • 人类数据的判断依据;
  • counts 的判断依据;
  • sample、donor、dataset、cohort 和 platform 字段;
  • 已有标签和缺失值;
  • 哪些信息仍需要数据说明或实验设计确认。

9.3 提出可以检查的筛选条件

来源核对后,建议使用下面的筛选提示词:

从这份健康泛组织图谱中筛选部分数据,
最终保证总细胞数在 20 万以内,输出 h5ad。
请给个筛选方案。

最终我希望只保留 6 个 dataset,
每个至少 3 个样本。

先让 omicOS 给方案,不要只说“帮我缩小一点”。数字越明确,结果越容易检查。

9.4 比较方案后再选择

本案例比较了三种思路:

  • A:组织更均衡,但会下采样;
  • B:完整保留 6 个 dataset,但组织覆盖有限;
  • C:常见上皮组织更多,但会下采样。

用户最终回复:

方案 B —— 无需降采样,6 个小/中型 dataset。

选择方案时,不要只看总细胞数。还要看组织、疾病状态、样本数和 donor 数是否符合研究问题。

9.5 查看写出和读回结果

本案例选择方案 B 后,omicOS:

  1. 再次核对 6 个 dataset 的细胞数和样本数;
  2. 使用 datasetID 生成子集;
  3. 写出新的 .h5ad
  4. 从磁盘重新打开输出文件;
  5. 检查维度、dataset、sample、donor、counts 和关键字段。

如果结果汇总不够清楚,可以继续问:

请汇总输出文件的磁盘读回结果:
1. 细胞数和基因数;
2. dataset、sample、donor 和 tissue 数量;
3. 每个 dataset 的细胞数和样本数;
4. 表达数据是否仍为 counts;
5. 关键 obs、注释和 QC 字段是否存在;
6. 原文件是否保持不变;
7. 仍需我确认的生物学问题。

本案例最终得到 142,540 个细胞、21,812 个基因。确认样本关系和研究适用范围后,就可以进入预处理教程

10. 参考文献

  1. Shi, Q., Chen, Y., Li, Y. et al. Cross-tissue multicellular coordination and its rewiring in cancer. Nature 643, 529–538 (2025). https://doi.org/10.1038/s41586-025-09053-4
  2. Shi, Q. & Chen, Y. Data for “Cross-tissue multicellular coordination and its rewiring in cancer” [Dataset]. Zenodo (2025). https://doi.org/10.5281/zenodo.15169362

results matching ""

    No results matching ""