技能anndata
A

anndata

用于单细胞分析中带注释矩阵的数据结构。当处理 .h5ad 文件或与 scverse 生态系统集成时使用。该数据格式的优势在于:用于分析工作流使用 scanpy;用于概率模型使用 scvi-tools;用于面向群体规模的查询使用 cellxgene-census。

AnnData - 单细胞基因组学注释数据矩阵处理

技能概述

AnnData 是 Python 生态中处理注释数据矩阵的标准数据结构,专为单细胞基因组学设计,支持 h5ad、zarr 等多种生物信息学数据格式,是 scverse 生态系统的核心组件。

适用场景

  1. 单细胞 RNA-seq 分析流程 从 10X Genomics 或其他平台读取测序数据,进行质量控制、归一化、特征选择,存储分析结果。AnnData 统一管理基因表达矩阵 (X)、细胞元数据 (obs)、基因元数据 (var) 以及多维度注释 (layers、obsm、varm)。

  2. 大规模数据集内存优化 处理超过内存容量的数据集时,使用 backed mode 按需加载数据,或转换稀疏矩阵 (csr_matrix) 降低内存占用。支持 Zarr 云存储格式,实现分布式数据访问。

  3. 多批次数据整合 拼接多个实验批次或样本,自动处理索引对齐和元数据合并。通过 label 参数追踪数据来源,支持 inner/outer join 策略,为下游批次校正提供结构化输入。

核心功能

  1. 数据结构管理 创建和操作 AnnData 对象,包含核心组件 X(主矩阵)、obs(观测元数据)、var(变量元数据)、layers(多层矩阵)、obsm/varm(多维注释)、obsp/varp(成对关系)、uns(非结构化注释)和 raw(原始数据备份)。支持子集筛选、转置、复制和重命名等基础操作。

  2. 输入输出与格式转换 原生支持 h5ad 和 zarr 格式读写,提供压缩选项和 backed mode。通过 anndata.io 模块读取 CSV、MTX、Loom 等格式,与 Scanpy 配合读取 10X Genomics 数据。支持格式间转换和远程数据访问。

  3. 拼接与集成 使用 ad.concat() 沿观测 (axis=0) 或变量 (axis=1) 拼接多个 AnnData 对象,灵活配置 join 类型 (inner/outer) 和合并策略 (same/unique/first/only)。实验性 AnnCollection 支持懒加载拼接,适用于超大规模数据集。无缝集成 Scanpy、scvi-tools、Muon 等下游分析工具。

常见问题

AnnData 和 Scanpy 有什么区别?

AnnData 是数据结构,Scanpy 是分析工具包。AnnData 负责存储和操作注释矩阵,Scanpy 提供 QC、归一化、降维、聚类等分析流程。实际工作流中通常配合使用:用 AnnData 管理数据,用 Scanpy 执行分析。简单比喻:AnnData 是数据容器,Scanpy 是分析实验室。

如何读取 h5ad 文件?

使用 ad.read_h5ad('file.h5ad') 读取完整文件到内存。大文件可添加 backed='r' 参数启用懒加载模式,只在访问数据时才读取内容。写入使用 adata.write_h5ad('output.h5ad', compression='gzip'),压缩可减少文件大小但会略微增加读取时间。

处理大规模数据时内存不足怎么办?

优先使用 backed mode (ad.read_h5ad('large.h5ad', backed='r')),避免一次性加载全部数据。其次将 X 转换为稀疏矩阵 (scipy.sparse.csr_matrix),稀疏数据可显著降低内存占用。还可考虑转换为 Zarr 格式存储在云端,按需分块读取。如果这些方案仍不足,建议先基于 obs 元数据过滤数据子集,再加载到内存。