数据整理:先看清数据,再确定分析范围
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 查看数据,但不修改原文件。
你也可以这样问:
请只读检查:
<你的 h5ad 文件路径>
不要修改原文件。
请汇总:
1. 数据规模和物种;
2. 表达数据是 counts 还是 lognorm;
3. obs 中的样本、供体和批次相关字段;
4. 已有标签。
最后告诉我:
进入预处理前还需要确认什么。
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 |
| 已有标签 | compartment、majorCluster、ann1/2/3、cellType1/2、subCluster 等 |
这里有两个边界:
- “人类”是根据基因命名判断的,最好再与数据说明核对;
- “counts”来自表达值抽样和文件结构判断,不等于逐个检查了 229 万个细胞的全部数值。
2.2 把筛选要求说清楚
当时任务把这份数据误称为“泛癌”。核对来源后,教程中建议这样描述筛选任务:
从这份健康泛组织图谱中筛选部分数据,
最终保证总细胞数在 20 万以内,输出 h5ad。
请给个筛选方案。
最终我希望只保留 6 个 dataset,
每个至少 3 个样本。
这段话给出了三个可检查的条件:
- 只保留 6 个 dataset;
- 每个 dataset 至少有 3 个样本;
- 总细胞数不超过 20 万。
omicOS 给出了三套方案:
| 方案 | 大致思路 | 细胞数 | 取舍 |
|---|---|---|---|
| A | 选择 6 种组织,对大型 dataset 分层下采样 | 约 176,000 | 组织较均衡,但会抽掉部分细胞 |
| B | 完整保留 6 个小/中型 dataset | 142,540 | 不做 dataset 内下采样,但缺少肝、肺、乳腺等常见组织 |
| C | 以上皮器官为主,对部分 dataset 下采样 | 约 182,000 | 覆盖更多常见上皮组织,但会抽掉部分细胞 |
用户选择了方案 B:
方案 B —— 无需降采样,6 个小/中型 dataset。
方案 B 完整保留所选 6 个 dataset 内的细胞,总计 142,540 个。
截图中的“主要癌种组织”沿用了当时的任务假设,这个说法并不成立。准确地说,方案 B 的组织覆盖有限,缺少肝、肺和乳腺,同时包含胸腺和骨骼肌。
“无需降采样”只表示所选 6 个 dataset 内没有再抽取细胞。其余 27 个 dataset 仍被排除,并不是原始数据一条都没删。
2.3 写出新文件并从磁盘读回
用户确认方案 B 后,omicOS 按 datasetID 进行筛选,写出新的 .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,抽样表达值仍为整数;datasetID、sampleID、donorID、tissue等关键字段仍在;ann1、majorCluster、compartment和部分 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 能否放在一起比较 |
cohortID、datasetID 和 platform 都可能与批次有关,但不能看到列名就直接拿去校正。要先判断它们代表技术差异,还是研究设计本身。
5. 选择子集时要权衡什么
| 你要决定什么 | 需要问自己的问题 |
|---|---|
| 生物学覆盖面 | 这些组织真的能回答我的问题吗? |
| 样本独立性 | 65 个 sample 来自多少 donor?同一个 donor 是否有多个 sample? |
| 是否下采样 | 更重视保留全部细胞,还是不同 dataset 之间的细胞数平衡? |
| 计算规模 | 142,540 个细胞和约 2.6 GB 文件是否适合当前机器? |
| 已有标签 | 标签来自哪里?是否有缺失值?能否直接用于研究问题? |
本案例选择“不下采样”,换来的是所选 dataset 内细胞完整保留;代价是组织组成不够均衡。这不是对错题,而是研究取舍。
标签仍要单独检查
本案例没有清理、合并或重命名标签。正式分析前,仍建议检查:
NA、空字符串和未使用的类别;- 同一标签的不同拼写;
sampleID、donorID、datasetID和疾病状态之间是否冲突;- 多层细胞标签之间是否一致;
- 如果研究疾病或肿瘤,应另行准备匹配数据,不能把健康组织当成肿瘤样本。
可以继续这样问:
请检查输出文件 obs 中的:
- sampleID、donorID、datasetID、cohortID;
- tissue、疾病状态、condition;
- 已有细胞标签。
请统计缺失值、实际使用的类别和字段之间的冲突。
先给检查结果,不要覆盖原字段。
6. 谁负责什么
| 分析者负责 | 可以交给 omicOS |
|---|---|
| 确认物种和研究问题 | 只读盘点文件结构、规模和字段 |
| 决定哪些 dataset 在生物学上可比 | 统计每个 dataset 的细胞数和样本数 |
| 权衡组织覆盖和是否下采样 | 生成多套满足约束的候选方案 |
| 确认数据来源是否适合研究问题 | 按确认的 datasetID 生成新文件 |
| 判断已有标签能否使用 | 从磁盘读回并检查关键字段和输出规模 |
7. 结果怎么检查
本案例已经完成:
- 原文件只读打开,结果写入新文件;
- 输出文件从磁盘重新打开成功;
- 细胞数是 142,540,基因数是 21,812;
- 6 个 dataset 的细胞数相加等于 142,540;
- 每个 dataset 至少有 3 个样本;
- 65 个 sample、28 个 donor 和 6 种 tissue 可正常读取;
- 关键元数据、注释和 QC 字段仍在;
- 表达矩阵仍被判断为 counts。
分析者还要补充确认:
- 论文说明这些 dataset 来自健康样本;若研究疾病或肿瘤,需要另行匹配数据;
- 65 个 sample 与 28 个 donor 的对应关系;
- 方案 B 的组织组成是否适合研究问题;
- 后续批次处理应该使用哪个字段;
- 需要使用的其他
obs列是否完整保留。
另外,分类字段可能保留“零细胞类别”。统计每个 dataset 的样本数时,要看实际非零类别,不能只看分类表里一共有多少名字。
8. 下一步
确认物种、counts、样本关系和最终分析范围后,进入预处理。下一步会介绍 QC、归一化、批次处理、降维和聚类。
本页最新版案例输出 142,540 个细胞;下一页直接使用这份输出进行预处理。
9. 案例实际回放
下面按真实操作顺序,用核对来源后的准确表述把案例重新走一遍。
9.1 新建项目和对话
- 在“分析”页找到
PROJECTS,点击右上角的+新建项目。 - 项目名称填写“我的项目A”。
- 展开项目,点击项目名称右侧的
+,新建对话“泛组织数据预览&整理”。
红色箭头分别指向“新建项目”和“在项目内新建对话”。
一个项目管理一项分析。数据整理、预处理和细胞注释可以放在同一项目的不同对话中。
新对话不会自动继承旧对话的全部结论。进入下一阶段时,把数据路径、物种、表达形式和关键字段重新写清楚。
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:
- 再次核对 6 个 dataset 的细胞数和样本数;
- 使用
datasetID生成子集; - 写出新的
.h5ad; - 从磁盘重新打开输出文件;
- 检查维度、dataset、sample、donor、counts 和关键字段。
如果结果汇总不够清楚,可以继续问:
请汇总输出文件的磁盘读回结果:
1. 细胞数和基因数;
2. dataset、sample、donor 和 tissue 数量;
3. 每个 dataset 的细胞数和样本数;
4. 表达数据是否仍为 counts;
5. 关键 obs、注释和 QC 字段是否存在;
6. 原文件是否保持不变;
7. 仍需我确认的生物学问题。
本案例最终得到 142,540 个细胞、21,812 个基因。确认样本关系和研究适用范围后,就可以进入预处理教程。
10. 参考文献
- 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
- 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




