单细胞数据_不同类型的数据介绍与Scanpy读取
(单细胞下游分析——存储方式汇总,不同类型的数据读入)
数据读入采取scanpy库进行:scanpy库是用于单细胞数据分析的 Python 库
下面几种数据存储的核心数据都是一样的,只是格式不同。
.h5ad(anndata 数据格式)
.h5ad数据结构解释(anndata 数据格式)
官方网站:https://anndata.readthedocs.io/en/latest/ ,下面的内容官网都有
h5ad文件提供了一种可扩展的方式来记录数据及其注释 (annotation),主要包含X, obs, var, uns等多个部分,分别存储不同的信息。结构如下图所示
主要由以下几部分构成:
功能 | 数据类型 | 说明 | |
---|---|---|---|
adata.X | 表达量矩阵 | ndarray,scipy sparse,matrix, DataFrame | X用来联系obs和var,其中行代表细胞,列代表基因,每个元素的值代表该基因在该细胞中的表达量。 |
adata.obs | 观察值数据 | DataFrame,Mapping[str, Iterable[Any]] | obs从不同维度描述细胞的信息,不同数据集不同。 |
adata.var | 特征和高可变基因数据 | DataFrame,Mapping[str, Iterable[Any]] | var从不同维度描述基因的结果,不同数据集不同。 |
adata.uns | 非结构化注释 | Mapping[str, Any] | 其他注释 |
- 其余看官方解释吧
读取
注意:.h5ad和.h5两个读取方式不同
#导入scanpy库 import scanpy as sc #读取 data=sc.read_h5ad('XXXXX.h5ad') #查看数据 print(data)
.h5 (HDF5)
Hierarchical Data Format (HDF5)文件,HDF5 是一种用于存储和组织大规模科学数据的文件格式。在单细胞数据中,可以使用 HDF5 存储表达矩阵、基因和细胞的元数据等信息。
AnnData的.h5ad文件,是基于 HDF5 的文件格式,参考h5ad即可。
注意:.h5ad和.h5两个读取方式不同
读取
#导入scanpy库 import scanpy as sc #读取 data=sc.read_10x_h5('XXXXX.h5') #查看数据 print(data)
10x_mtx(cell ranger输出,三个文件)
就是cell ranger上游比对分析产生的3个文件:
├── xxx_feature_bc_matrix
│ ├── barcodes.tsv.gz:细胞标签(barcode)
│ ├── features.tsv.gz:基因ID(feature)
│ └── matrix.mtx.gz:表达数据(matrix),该文件包含了一个稀疏矩阵,其中每一行代表一个基因,每一列代表一个细胞,每个元素则表示基因在相应细胞中的表达量
具体文件格式如下:
>barcodes.tsv.gz AAACCCAAGAAACCCA-1 AAACCCAAGAAAGTCT-1 AAACCCAAGAAATTGC-1 AAACCCAAGAACAAGG-1 ============ >features.tsv.gz ENSG00000243485 MIR1302-2HG Gene Expression ENSG00000237613 FAM138A Gene Expression ENSG00000186092 OR4F5 Gene Expression ENSG00000238009 AL627309.1 Gene Expression ============ >matrix.mtx.gz %%MatrixMarket matrix coordinate integer general %metadata_json: {"software_version": "Cell Ranger cellranger-8.0.1", "format_version": 2} 36601 643092 12843054 19846 1 1 8208 2 1 31505 3 1 22399 4 1
读取
#导入scanpy库 import scanpy as sc #读取 data=sc.read_10x_mtx('path')# 注意是path,即上图中的3个文件所在的文件目录 #查看数据 print(data)
对于R语言,一般先使用read10X()对这三个文件进行整合,得到行为基因、列为细胞的表达矩阵(为稀疏矩阵dgCMatrix格式,节约内存);然后再配合CreateSeuratObject()函数创建Seurat对象
tsv/csv/txt/tab(一个文件)
提醒:.gz是一种压缩格式,.gz前的只要是这几个数据类型,就可以使用。
这些文件本质都是txt,文件里面包含了转成10x_mtx 格式的所有信息:
- 第一行是条形码(基因序列)(barcodes.tsv.gz)
- 第一列是基因(features.tsv.gz)
- 其余就是0/1矩阵(reads 计数)(matrix.mtx.gz)
读取和排错
#导入scanpy库 import scanpy as sc #读取 data=sc.read_text('XXXXX.counts.matrix.tsv.gz')# tsv/csv/txt/tab数据一样,只是换个名字 #查看数据 print(data)
注意:read_text可能会读错信息,即:obs存储基因信息和var存储细胞信息,使用data_T=data.T
即可转置。
查找错误和解决代码如下:
# 输出var print(data.var) #如果是类似的 AL627309.1,则表明读入正确,不需要转置。 # 或者 输出obs print(data.obs) #如果是类似的 AAACCTGAGTCATGCT-1,则表明读入正确,不需要转置。 #解决方案 data_T=data.T
按照obs的batch列拆分anadata
import scanpy as sc # 假设 adata 是你的 AnnData 对象 # 按照 'batch' 列拆分 AnnData batches = adata.obs['batch'].unique() # 获取所有独特的批次值 # 创建一个字典存储拆分后的 AnnData 子集 # adata_splits 字典的每个键是一个 batch 值,对应的值是一个新的 AnnData 子集。 adata_splits = {batch: adata[adata.obs['batch'] == batch].copy() for batch in batches} # 现在 adata_splits 是一个字典,键是批次,值是对应批次的数据 for batch, adata_batch in adata_splits.items(): # 对每个批次的数据进行操作 sc.pp.scale(adata_batch) # 举例:对每个批次进行标准化
本文作者:kingwzun
本文链接:https://www.cnblogs.com/kingwz/p/18421064
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2022-09-19 前后端交互常用组件
2022-09-19 UML _ 通信/协作图