scanpy 单细胞分析包图文详解 01 | 深入理解 AnnData 数据结构
一、环境准备:
搭建 Python 高效开发环境: Pycharm + Anaconda
二、安装 scanpy
pip install scanpy
三、AnnData
1、AnnData 介绍与结构
AnnData 是用于存储数据的对象,一般作为 scanpy 的数据存储格式。
主要由以下几部分构成:
功能 | 数据类型 | |
---|---|---|
adata.X | 矩阵数据 | numpy,scipy sparse,matrix |
adata.obs | 观察值数据 | pandas dataframe |
adata.var | 特征和高可变基因数据 | pandas dataframe |
adata.uns | 非结构化数据 | dict |
下面我们动手构建一个用于创建 AnnoData 的虚拟数据
import numpy as np
import pandas as pd
import anndata as ad
from string import ascii_uppercase# 设置观测值数量
n_obs = 1000
# 生成观察时间
obs = pd.DataFrame()
obs['time'] = np.random.choice(['day 1', 'day 2', 'day 4', 'day 8'], n_obs)
# 设置特征名
var_names = [i*letter for i in range(1, 10) for letter in ascii_uppercase]
# 特征数量
n_vars = len(var_names)
# 特征注释数据框
var = pd.DataFrame(index=var_names)
# 生成数据矩阵
X = np.arange(n_obs*n_vars).reshape(n_obs, n_vars)
2、AnnoData 初始化
# 初始化 AnnoData 对象
# AnnoData 对象默认使用数据类型为 `float32`, 可以更精确的存储数据
# 这里设置为整数,为了演示方便
adata = ad.AnnData(X, obs=obs, var=var, dtype='int32')
# 一般默认将变量或特征存储在数据框的行
# 查看数据
print(adata)
3、AnnoData 切片特性
可以看到 AnnData 具有和 dataframe 或 Array 相似的长相,同样具备相似的特性,比如切片:
# 通过切片查看观测值和变量
print(adata.obs_names[:10].tolist())
print(adata.obs_names[-10:].tolist())
print(adata.var_names[:10].tolist())
print(adata.var_names[-10:].tolist())
# 查看矩阵
print(X)
3、AnnoData 的 view 特性
AnnoData 可以实现与 numpy 中的 view 相似的功能。
换句话说就是,我们每次操作 AnnoData 时,并不是再新建一个 AnnoData 来存储数据,而是直接找到已经之前初始化好的 AnnoData 的内存地址,通过内存地址来直接改变 AnnoData 的值。这样做的好处是:
- 无需分配多余的内存
- 可以直接修改已经初始化后的 AnnoData 对象
view 可以使用 .copy() 来得到 AnnoData 对象。
# 查看 'A' 列的头三个元素
print(adata[:3, 'A'].X)
# 设置 'A' 列的头三个元素
adata[:3, 'A'].X = [0, 0, 0]
# 查看 'A' 列的头五个元素
print(adata[:5, 'A'].X)
其实我们在调用 .[] 时,AnnoData已经在内部实现了该操作,也就是说该 view 会成为保存数据的 AnnoData 对象。
但是,如果将 AnnoData 对象的 view 中的一部分赋值,该内容会复制一份并生成新的数据存储对象。
adata_subset = adata[:5, ['A', 'B']]
print(adata_subset)
adata_subset.obs['foo'] = range(5)
可以看到,这时赋值会直接将 AnnoData 对象复制一份。现在 adata_subset 会重新得到一块内存用于存储实际数据,而不再仅仅是对 adata 的内存地址引用。
4、备份到本地
# 计算对象大小的函数
def print_size_in_MB(x):print('{:.3} MB'.format(x.__sizeof__()/1e6))
# 查看 adata 对象大小
print_size_in_MB(adata)
# 查看是否备份
adata.isbacked
# 设置备份地址
adata.filename = './write/test.h5ad'
# 查看是否备份成功
adata.isbacked
可以看到,我们的 adata 对象已经备份成功,而且就在本地 ‘./write/test.h5ad’ 目录。
前边提到的 view 特性在这里同样适用,我们来看看 adata_subset 是否备份成功。
adata_subset.isbacked
adata_subset.filename = './write/adata_subset_test.h5ad'
adata_subset.isbacked
adata_subset 并没有被启用备份模式,重新设置备份模式。
需要注意的是:备份仅影响数据矩阵 X,所有注释信息都保留在内存中。如果想对全部数据的更改保存,则必须将导出到本地。
5、导出到本地
adata.write("./write/my_results.h5ad")
adata.write_csvs('./write/my_results_csvs', )
6、读取数据
import scanpy as sc
import pandas as pd# 初始化数据
adata = sc.read(filename)
# 加入数据
anno = pd.read_csv(filename_sample_annotation)
# 加入样本分组信息
adata.obs['cell_groups'] = anno['cell_groups'] # categorical annotation of type pandas.Categorical
# 加入时间信息
adata.obs['time'] = anno['time'] # numerical annotation of type float
# 甚至可以直接赋值 dataframe
adata.obs = anno
官网:https://anndata.readthedocs.io/en/latest/
scanpy 单细胞分析包图文详解 01 | 深入理解 AnnData 数据结构相关推荐
- ftp linux包,图文详解Ubuntu搭建Ftp服务器的方法(包成功)
一.今天下午由于课程的要求不得已做了Ubuntu搭建Ftp服务器的实验,但是实验指导书还是N年前的技术,网上搜了一大把,都是模模糊糊的! 在百般困难中终于试验成功,特把经验分给大家 希望大家少走弯路! ...
- 单细胞分析的 Python 包 Scanpy(图文详解)
文章目录 一.安装 二.使用 1.准备工作 2.预处理 过滤低质量细胞样本 3.检测特异性基因 4.主成分分析(Principal component analysis) 5.领域图,聚类图(Neig ...
- Seurat 包图文详解 | 单细胞转录组(scRNA-seq)分析02
文章目录 一.创建 Seurat 对象 二.标准预处理流程 1.基因质控指标来筛选细胞 2.归一化数据 3.识别高异质性特征 4.缩放数据 5.线性维度约化 PCA VizDimLoadings Di ...
- 【图文详解】一文全面彻底搞懂HBase、LevelDB、RocksDB等NoSQL背后的存储原理:LSM-tree日志结构合并树...
LSM 树广泛用于数据存储,例如 RocksDB.Apache AsterixDB.Bigtable.HBase.LevelDB.Apache Accumulo.SQLite4.Tarantool.W ...
- spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)...
不多说,直接上干货! 前言 其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...
- Linux下sysstat安装使用图文详解
文章目录 Linux下sysstat安装使用图文详解 1.iostat 2.mpstat 3.sadc 4.sadf 5.sar 6.pidstat Linux下sysstat安装使用图文详解 Sys ...
- 基于CentOS6.5下snort+barnyard2+base的入侵检测系统的搭建(图文详解)(博主推荐)...
为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物理机器环境实验室的大数 ...
- python爬虫图片实例-【图文详解】python爬虫实战——5分钟做个图片自动下载器...
我想要(下)的,我现在就要 python爬虫实战--图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识(没看的赶紧去看)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk ...
- SharePoint2007安装图文详解三:安装SqlServer2005
SharePoint2007 中的很多功能会用到数据库,如分析服务,报表服务等.本文介绍SqlServer2005的安装,数据库的安装很简单,基本上安装默认选项点击下一步即可,需要注意的地方在下面会提 ...
最新文章
- 【实战】OpenCV钢管计数分析与方法比较
- 深度强化学习的现在,将来与未来
- 云计算技术都要学什么?教你分清公有云、私有云和混合云
- 作用域和闭包的通俗理解
- 论文浅尝 | WWW2022 - “知识提示”之知识约束预训练微调
- java 课后习题 随机整数最大值和最小值
- pytorch load state dict_学习Pytorch过程遇到的坑(持续更新中)
- 已知前序中序求层序 c语言递归,二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现...
- [leetcode]136. 只出现一次的数字
- spring 的3种常用的注入方式
- Eclipse安装php插件phpeclipse(转)
- CAD查找属性快文字
- 为什么说视频号是下一个短视频风口?
- 开发电商App哪家好
- Pyhton3 下载Telegram 频道数据
- lsdyna如何设置set中的node_list_ANSA中进行二次开发的Python基础知识
- 位运算实现加减乘除运算
- 《狂人日记》 解读|读后感
- 机房建设必须知道的四大要求
- 银行测试(5)-网上银行活期转定期