[ PROMPT_NODE_26206 ]
data_structure
[ SKILL_DOCUMENTATION ]
# AnnData 对象结构
AnnData 对象存储数据矩阵及其相关的注释,为管理实验数据和元数据提供了一个灵活的框架。
## 核心组件
### X (数据矩阵)
存储实验测量值的核心数据矩阵,形状为 (n_obs, n_vars)。
python
import anndata as ad
import numpy as np
# 使用稠密数组创建
adata = ad.AnnData(X=np.random.rand(100, 2000))
# 使用稀疏矩阵创建 (推荐用于大型稀疏数据)
from scipy.sparse import csr_matrix
sparse_data = csr_matrix(np.random.rand(100, 2000))
adata = ad.AnnData(X=sparse_data)
访问数据:
python
# 完整矩阵 (大型数据集需谨慎)
full_data = adata.X
# 单个观测值
obs_data = adata.X[0, :]
# 所有观测值中的单个变量
var_data = adata.X[:, 0]
### obs (观测值注释)
存储观测值(行)元数据的 DataFrame。每一行对应 X 中的一个观测值。
python
import pandas as pd
# 创建带有观测值元数据的 AnnData
obs_df = pd.DataFrame({
'cell_type': ['T cell', 'B cell', 'Monocyte'],
'treatment': ['control', 'treated', 'control'],
'timepoint': [0, 24, 24]
}, index=['cell_1', 'cell_2', 'cell_3'])
adata = ad.AnnData(X=np.random.rand(3, 100), obs=obs_df)
# 访问观测值元数据
print(adata.obs['cell_type'])
print(adata.obs.loc['cell_1'])
### var (变量注释)
存储变量(列)元数据的 DataFrame。每一行对应 X 中的一个变量。
python
# 创建带有变量元数据的 AnnData
var_df = pd.DataFrame({
'gene_name': ['ACTB', 'GAPDH', 'TP53'],
'chromosome': ['7', '12', '17'],
'highly_variable': [True, False, True]
}, index=['ENSG00001', 'ENSG00002', 'ENSG00003'])
adata = ad.AnnData(X=np.random.rand(100, 3), var=var_df)
# 访问变量元数据
print(adata.var['gene_name'])
print(adata.var.loc['ENSG00001'])
### layers (替代数据表示)
存储与 X 维度相同的替代矩阵的字典。
python
# 存储原始计数、归一化数据和缩放数据
adata = ad.AnnData(X=np.random.rand(100, 2000))
adata.layers['raw_counts'] = np.random.randint(0, 100, (100, 2000))
adata.layers['normalized'] = adata.X / np.sum(adata.X, axis=1, keepdims=True)
adata.layers['scaled'] = (adata.X - adata.X.mean()) / adata.X.std()
# 访问层
raw_data = adata.layers['raw_counts']
normalized_data = adata.layers['normalized']
常见的层用途:
- `raw_counts`