单细胞数据_不同类型的数据介绍与Scanpy读取

(单细胞下游分析——存储方式汇总,不同类型的数据读入)
数据读入采取scanpy库进行:scanpy库是用于单细胞数据分析的 Python 库
下面几种数据存储的核心数据都是一样的,只是格式不同。

.h5ad(anndata 数据格式)

.h5ad数据结构解释(anndata 数据格式)
官方网站:https://anndata.readthedocs.io/en/latest/ ,下面的内容官网都有

h5ad文件提供了一种可扩展的方式来记录数据及其注释 (annotation),主要包含X, obs, var, uns等多个部分,分别存储不同的信息。结构如下图所示

image
主要由以下几部分构成:

功能 数据类型 说明
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 格式的所有信息:
image

  • 第一行是条形码(基因序列)(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)  # 举例:对每个批次进行标准化

posted @ 2024-09-19 17:49  kingwzun  阅读(450)  评论(0编辑  收藏  举报