在Python中,单细胞RNA测序(scRNA-seq)数据分析可以使用多种专门的工具和库,如Scanpy、Seurat (for R, interoperable with Python) 和 Scvi-tools。其中,Scanpy是专门为Python设计的单细胞数据分析包,功能强大,特别适合处理大型scRNA-seq数据。下面将详细介绍如何在Python中使用这些工具进行单细胞RNA测序的标准分析流程。
可以通过以下命令安装主要的分析工具包:
pip install scanpy anndata matplotlib seaborn scikit-learn
scRNA-seq数据通常存储在AnnData格式中,适合存储基因表达矩阵及其关联的元数据。如果使用10X Genomics数据,可以直接读取h5
文件。
import scanpy as sc
# 从10X数据中读取
adata = sc.read_10x_h5("filtered_feature_bc_matrix.h5")
# 或者从CSV/TSV文件读取
adata = sc.read_csv("scRNA_data.csv")
预处理步骤包括筛选细胞和基因、标准化、对数变换以及高变基因选择等。
通常过滤低表达基因和低质量细胞以提高数据质量。
# 保留表达超过200个基因的细胞,保留在3个以上细胞中表达的基因
sc.pp.filter_cells(adata, min_genes=200)
sc.pp.filter_genes(adata, min_cells=3)
高线粒体基因比例可能指示低质量细胞或凋亡细胞。
adata.var["mt"] = adata.var_names.str.startswith("MT-")
sc.pp.calculate_qc_metrics(adata, qc_vars=["mt"], percent_top=None, log1p=False, inplace=True)
# 过滤线粒体基因含量高的细胞
adata = adata[adata.obs.pct_counts_mt < 5, :]
将每个细胞的基因表达值归一化为总表达量的1万分之一,并进行对数变换。
sc.pp.normalize_total(adata, target_sum=1e4)
sc.pp.log1p(adata)