从单细胞表达矩阵构建Anndata对象

之前的文章整理了读取单细胞10X标准数据的流程,后面发现更多的单细胞数据只是一个单纯的表达矩阵,文件后缀可能是csv.gz/matrix.csv.gz/txt.gz等等,原理基本是一致的。

这里记录一下如何快速有效地读取一个单细胞表达矩阵,以及简单的过程检查。

这里以 Yamagata M, Yan W, Sanes JR. A cell atlas of the chick retina based on single-cell transcriptomics. Elife 2021 Jan 4;10. PMID: 33393903 文章的数据为例

导入需要的包

import pandas as pd
import numpy as np
import scanpy as sc
import anndata as ad
from anndata import AnnData
import gzip
import os
import sys

为了快速了解这些压缩矩阵的数据结构,我们可以在读取前先查看前五行

file_path = '/data/work/retina_sc/chick/GSE159107_E12chick_count.matrix.csv.gz'

with gzip.open(file_path, 'rt') as file:
    for i in range(5):
        line = file.readline()
        print(line)

下拉查看发现第一行是单细胞标识

从第二行开始是基因名和计数,即首列为基因名,首行为细胞名,且每个元素以逗号分隔

于是我们正式读取压缩矩阵,file_path是下载的压缩包存放的位置

file_path = '/data/work/retina_sc/chick/GSE159107_E12chick_count.matrix.csv.gz'
adata_df = pd.read_csv(file_path, sep=',', index_col=0)
adata_df = adata_df[~adata_df.index.duplicated(keep='first')]
adata = sc.AnnData(X=adata_df.values.T, obs=pd.DataFrame(index=adata_df.columns), var=pd.DataFrame(index=adata_df.index))
adata

最后检查一下anndata对象的index是否正确

adata.var.index

adata.obs.index

var索引是基因名,obs观测值索引是细胞标识,没啥问题就可以保存一下转化之后的原始数据

adata.write('/data/work/retina_sc/chick/GSE159107_E12chick.h5ad')

另外两个批次地数据可以重复上述操作,最后如果想要合并多个批次数据

dataset = AnnData.concatenate(*[sc.read_h5ad(os.path.join("/data/work/retina_sc/chick", f)) 
                                for f in sorted(os.listdir("/data/work/retina_sc/chick")) if f.endswith("h5ad")])
dataset

观测值obs中会多一个列叫'batch',三个批次数据默认标记为'0''1''2'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值