12 FAIR 原则与数据共享
12 FAIR 原则与数据共享
把分析做出来是一回事,把它共享给别人用是另一回事。FAIR(Findable、Accessible、Interoperable、Reusable)是目前最常被引用的数据共享准则,杂志投稿和基金资助也越来越频繁地要求作者按这套原则来组织自己的数据。
单细胞数据因为体积大、格式多、元数据复杂,按 FAIR 做共享的压力比 bulk 要高。本章讲你需要准备哪些内容、用什么格式发出去、选哪个数据库,以及一份发布前的检查清单。
FAIR 原则是什么
FAIR 不是某一个数据库或软件,是四个原则的缩写:
- Findable(可发现):有唯一持久标识符(DOI、GEO accession 等),在标准数据库里可检索,元数据完整。
- Accessible(可访问):用开放协议可取,元数据在数据本身失效之后也应该保留。
- Interoperable(可互操作):用标准格式和受控词汇,便于和其他数据混用。
- Reusable(可重用):有清晰的许可证、准确的来源信息、足够的上下文让第三方可以复现分析。
实际做起来就是把四个问题回答清楚:别人怎么找到你的数据?怎么下载?怎么读进分析流程?可以怎么用?
常用文件格式
单细胞数据的"主"矩阵往往有这几种落盘方式:
| 格式 | 典型工具 | 用途 |
|---|---|---|
.h5ad |
Scanpy / AnnData | Python 生态标准 |
.rds / .qs |
Seurat / SingleCellExperiment | R 生态标准 |
.loom |
LoomPy | 跨语言通用 |
.mtx / .h5 |
10x Genomics | 原始稀疏矩阵 |
投稿到 CELLxGENE 等注释数据库时通常需要 h5ad 或 Seurat v3+ 的 rds,因为它们可以同时携带表达矩阵、细胞元数据、降维坐标和注释。Seurat 对象用 SeuratDisk::SaveH5Seurat() 转换再 Convert() 成 h5ad 是最常见的路径。
元数据要包含什么
元数据比矩阵本身更重要。一份最小元数据至少要能回答:
- 样本来自哪里(物种、组织、疾病、个体)
- 样本怎么产生的(技术平台、chemistry 版本、测序深度)
- 细胞层面的注释(cell type、cluster、QC 过滤后保留)
- 处理条件(如果有分组或时序)
把这些按每细胞一行整理成表格,命名字段时尽量用社区公认的词汇(比如 CELLxGENE 的 schema 或 HCA 的 metadata standard),避免出现"cell_type_v2"这种私有命名。
公共数据库怎么选
不同数据库服务不同目的:
| 数据库 | 适合提交 | 要求 |
|---|---|---|
| GEO / SRA | 有论文的项目,需要 SRA 原始 FASTQ | NCBI 账号,提交后 3-5 天审核 |
| CELLxGENE Discover | 已经注释好的单细胞数据,希望可在线浏览 | 遵守 schema,H5AD 格式 |
| HCA Data Coordination Platform | 大型人类组织 atlas 项目 | 需要向 HCA 项目注册 |
| Figshare / Zenodo | 中间结果、脚本、补充文件 | 任何人都可以提交,给 DOI |
| BioStudies | 论文配套材料集合 | EBI 账号 |
如果一份单细胞数据同时需要"原始 FASTQ 可被他人重新跑" + "处理好的对象能被在线浏览",通常的做法是原始数据放 GEO/SRA,处理好的对象放 CELLxGENE,两边互引。
发布前的检查清单
发表或共享前对照下面这份清单比事后改容易得多:
数据本身
- 原始 FASTQ 或 BAM 已上传(GEO/SRA/ENA)
- 处理后的表达矩阵可下载(常用格式 + 固定 schema)
- 细胞元数据完整(样本、疾病、技术平台、处理条件)
- 基因注释版本记录了(hg38/GRCh38 + GENCODE 版本)
- UMAP/t-SNE 坐标和聚类结果保留
代码与软件
- 分析脚本已公开(GitHub/GitLab 仓库)
- README 说明运行顺序、输入和输出
- 软件版本有记录(
sessionInfo()或pip freeze) - 随机种子在脚本里固定
元信息
- 有许可证(数据建议 CC-BY 或 CC0,代码建议 MIT 或 Apache-2.0)
- 方法段落里写清了 accession 编号、工具版本、参数
- 数据可用性声明(Data Availability)有写
可发现性
- 数据集有持久 ID(GEO GSE 号 / DOI)
- 关键词、样本来源、技术平台在元数据里可检索
- 如果数据是论文的一部分,论文里给了明确引用方式
示例:把 Seurat 对象转出到 h5ad
一个常见的真实场景:用 Seurat 做完分析,想让 Python 用户也能用这份数据。
# 需要 SeuratDisk
remotes::install_github("mojaveazure/seurat-disk")
library(SeuratDisk)
# 假设已有分析完成的 Seurat 对象
# saveRDS(seurat_obj, "pbmc_analyzed.rds")
# 转成中间格式再导出成 h5ad
SaveH5Seurat(seurat_obj, filename = "pbmc_analyzed.h5Seurat")
Convert("pbmc_analyzed.h5Seurat", dest = "h5ad")
导出后 Python 那边:
import scanpy as sc
adata = sc.read_h5ad("pbmc_analyzed.h5ad")
adata
# AnnData object with n_obs × n_vars = 2638 × 13714
# obs: 'nCount_RNA', 'nFeature_RNA', 'seurat_clusters', 'cell_type', ...
adata.obs 就是你从 Seurat 带过来的细胞元数据,adata.obsm['X_umap'] 是 UMAP 坐标。
示例:准备 GEO 提交包
GEO 常规 scRNA-seq 提交包里一般包含这几类文件:
GEO_submission/
├── raw/
│ ├── sample1_S1_L001_R1_001.fastq.gz
│ ├── sample1_S1_L001_R2_001.fastq.gz
│ └── ...
├── processed/
│ ├── counts.mtx.gz
│ ├── barcodes.tsv.gz
│ ├── features.tsv.gz
│ └── metadata.csv
├── README.txt
└── GEO_metadata.xlsx
GEO_metadata.xlsx 要按 GEO 模板填写每个样本的 source、characteristics、molecule、technology 和 MD5 校验码。模板可以从 GEO 提交页面下载,本地填好再走 FTP 上传。审核通过后会收到 GSE 编号,之后就可以把 GSE###### 写进论文。
一些现实建议
- 数据越早规范化越好。等写完论文再整理元数据,往往已经忘了"这个样本为什么单独处理过一次"。
- 原始数据和处理后数据分开存。审稿人可能要的是处理好的矩阵,但 GEO 仍然要求原始 FASTQ。
- 代码和数据要配套。只给数据不给代码,审稿意见里经常会被要求补。
- 许可证不是无所谓的事。受访者个体数据(即便脱敏)、商业合作数据往往不能用 CC-BY,要跟 IRB 确认可以公开到什么程度。
下一步
你已经完成了单细胞实践教程 01-12。接下来可以: