anndata - Annotated data — anndata 0.9.0.dev7+gfd744d6 documentation
import numpy as np
import pandas as pd
import anndata as ad
from scipy.sparse import csr_matrix
print(ad.__version__)
建构一个 annadata 数据对象
counts = csr_matrix(np.random.poisson(1, size=(100, 2000)), dtype=np.float32) ### 初始化一个矩阵稀疏矩阵
adata = ad.AnnData(counts) ### 初始化一个 AnnData 对象
填充各个数据槽
adata.obs_names = [f"Cell_{i:d}" for i in range(adata.n_obs)] ### 为添加obs 轴添加索引名
adata.var_names = [f"Gene_{i:d}" for i in range(adata.n_vars)] ### 为添加vars 轴添加索引名
adata[["Cell_1", "Cell_10"], ["Gene_5", "Gene_1900"]] ###
ct = np.random.choice(["B", "T", "Monocyte"], size=(adata.n_obs,))
adata.obs["cell_type"] = pd.Categorical(ct) ### 细胞注释表添加细胞类型分类变量
adata.obsm["X_umap"] = np.random.normal(0, 1, size=(adata.n_obs, 2)) ### 随机嵌入一个细胞的umap表,obs -> obs level metatada
adata.varm["gene_stuff"] = np.random.normal(0, 1, size=(adata.n_vars, 5)) ### 随机嵌入一个基因元数据,varm -> vars level metatada
adata.uns["random"] = [1, 2, 3] ### .uns 存储非结构化的metadata,一般存储的是一些对我们分析有意义的数据, 数据类型可以是 list ,dictionary 等等,通过键来索引数据
数据槽:: Layers
#### 一般可以用来存储不同处理的 原始矩阵.X
adata.layers["log_transformed"] = np.log1p(adata.X)
adata.to_df(layer="log_transformed") ### 以DataFrames格式显示某一层的数据
adata.write('my_results.h5ad', compression="gzip") ### 以AnnData自带的存储格式h5ad保存出对象
数据索引与修改
### 提取子集注意使用 .copy() 方法才能提取出对象的完整子集,这种方式相当于拷贝出来一个adata副本,会为这个副本对象分配内存
adata_subset = adata[:5, ['Gene_1', 'Gene_3']].copy()
### 通过赋值的方法获取adata的一个"View"会自动拷贝对象
adata_subset = adata[:3, ['Gene_1', 'Gene_2']]
### 通过.[]方法索引修改adata是在原对象上进行修改,不会分配新的内存地址。
##### 注意调用.[]获取数据的时候,填写整数是根据索引编号索引数据,类似pandas的 .iloc;填写的是字符则根据添加的字符引数据,类似pandas的 .loc
adata[:3, 'Gene_1'].X = [0, 0, 0]
### 通过.isin 方法条件化索引数据
adata[ adata.obs.cell_type.isin(["B", "T"]) ].obs.head()
大数据读取
### 大数据读取,防止爆内存,使用backed模式,即以只读的方式打开文件,所以不能对数据做任何修改
#### 每次只是将部分数据载入内存
adata = ad.read('my_results.h5ad', backed='r')
adata.isbacked
adata.filename ### AnnData对象与被读取的文件建立了一个连接
adata.file.close() ### 关闭与对象的连接
网友评论