seurat提取表达矩阵_(单细胞-SingleCell)Scanpy流程——python 实现单细胞 Seurat 流程...

本文介绍了如何在Python中使用Scanpy库来实现类似Seurat的单细胞分析流程,包括数据读取、预处理、基因占比统计、线粒体DNA过滤、PCA、聚类、t-SNE/UMAP映射和差异基因寻找。重点讲述了两种数据导入方法,并提供了基本的操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章分为三个部分,第一部分是基本概念介绍
第二部分是官方示例代码的重现
第三部分是用自己的数据重现代码

基本概念介绍

Scanpy 和 Seurat 基本上完全一样,Scanpy 构建的对象叫做 AnnData 对象,他的数据存储是以4 个模块存储(如下图)

f24ab7735c9975574eac69e58cd41b58.png
Scanpy 对象的存储模式

其中X对象为count 矩阵。这里要注意一下,它和 R 语言的不同,Scanpy 中的行为样本,列为基因。这也和 python 的使用习惯相关

  • X 对象为count 矩阵,与 seurat 对象是转置关系
  • obs 存储的是 seurat 对象中的 meta.data 矩阵
  • var 存储的是基因(特征)的信息
  • uns 存储的是后续添加的非结构信息

官方示例代码

import scanpy as sc
import os
import math
import itertools
import warnings
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format = 'svg'
warnings.filterwarnings("ignore")
plt.rc('font',family='Times New Roman')
my_colors = ["#1EB2A6","#ffc4a3","#e2979c","#F67575"]
sc.settings.verbosity = 3  # 输出提示信息         
# ?sc.settings.verbosity
sc.logging.print_header()
sc.settings.set_figure_params(dpi=80, facecolor='white')# 设置输出图像格式
results_file = 'write/pbmc3k.h5ad'  # 存储分析结果
scanpy==1.6.0 anndata==0.7.5 umap==0.4.6 numpy==1.19.2 scipy==1.4.1 pandas==1.1.3 scikit-learn==0.23.2 statsmodels==0.12.0

这里的读取文件的方式和R语言构造seurat对象基本一样 (按照官网分类有12中读取方式)
下面主要介绍两种方法
第一种方法是,文件下面要有3个初始文件包括:

  1. barcord
  2. genes
  3. matrix
    然后使用输 sc.read_10_mtx 读取

第二种方法是直接构建AnnData对象
然后分别的将表达矩阵,细胞信息,基因信息读取,代码如下

# 这个是第二种方法
# creat scanpy object
#df = pd.read_csv('processfile/count.csv', index_col=0)
#meta = pd.read_csv('processfile/metadata.csv', index_col=0)
#cellinfo = pd.DataFrame(df.index,index=df.index,columns=['sample_index'])
#geneinfo = pd.DataFrame(df.columns,index=df.columns,columns=['genes_index'])
#sce = sc.AnnData(df, obs=cellinfo, var = geneinfo)
# 这个是第一种读取方法
adata = sc.read_10x_mtx(
    './filtered_gene_bc_matrices/hg19/',  # the directory with the `.mtx` file
    var_names='gene_symbols',                # use gene symbols for the variable names (variables-axis index)
    cache=True) 
adata.var_names_make_unique()
adata
tips: pytho和R语言有点不同,通常情况下,行为样本, 列为特征
adata.obs.shape # 2700个细胞
adata.var.shape # 32738个基因
adata.to_df().shape # 2700*32738
adata.obs.head()
adata.var.head()
adata.to_df().iloc[0:5,0:5]

数据预处理

这里介绍一下scanpy中常用的组件

  1. pp: 数据预处理
  2. tl: 添加额外信息
  3. pl:可视化

统计基因在细胞中的占比并可视化

sc.pl.highest_expr_genes(adata, n_top=20) # 每一个基因在所有细胞中的平均表达量(这里计算了百分比含量)
sc.pp.filter_cells(adata, min_genes=200) # 每一个细胞至少表达200个基因
sc.pp.filter_genes(adata, min_cells=3) # 每一个基因至少在3个细胞中表达

b8f889961352649e7628be7ae6ddba37.png

过滤线粒体DNA

str.startswith 不支持正则,如果要使用正则则使用.str.match
sce.var_names[sce.var_names.str.match(r'^MT-')]
sce.var_names[sce.var_names.str.match(r'^RP[SL0-9]')]
sce.var_names[sce.var_names.str.match(r'^ERCC-')]
# 抽取带有MT的字符串
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)
# 过滤后可视化(官方文档真的骚到我头皮发麻)
sc.pl.violin(adata, ['n_genes_by_counts'],jitter=0.4)
sc.pl.violin(adata, ['total_counts'],jitter=0.4)
sc.pl.violin(adata, ['pct_counts_mt'],jitter=0.4)

<think>好的,我现在需要帮助用户寻找关于单细胞分析的完整流程以及对应的代码实现。首先,我需要理解用户的具体需求。他们提到“single-cell analysis workflow complete code implementation”,所以用户可能是在生物信息学或相关领域的研究者,需要从原始数据开始处理单细胞数据,直到完成分析的代码示例。 接下来,我要回忆单细胞分析的典型流程。通常包括数据预处理、质控制、标准化、降维、聚类、差异表达分析等步骤。然后,用户需要代码实现,所以可能需要使用常见的工具,比如Seurat在R中的使用,或者ScanpyPython中的库。此外,用户可能希望看到每个步骤的具体代码片段,以及可能的可视化示例。 然后,我需要检查用户提供的引用内容。引用[1]提到使用MATLAB进行模拟和分析,但单细胞分析通常使用R或Python,所以可能需要指出这一点,同时提到如果有MATLAB的需求,可能需要特定工具包。引用[2]提到快速统计计算子矩阵用于图像处理,这可能与单细胞分析中的某些步骤相关,比如图像数据预处理,但可能不是主要部分。 用户的问题中系统级指令要求生成相关问题,我需要确保在回答的最后包括相关问题。同时,要使用中文回答,并正确应用LaTeX格式,比如行内公式用$...$,独立公式用$$...$$,但在这个问题中可能数学公式较少,不过如果有的话需要注意格式。 用户可能还希望了解流程的每个步骤的详细说明,以及代码示例的结构。例如,数据预处理可能需要过滤低质细胞,标准化表达矩阵,降维使用PCA或t-SNE,聚类用Leiden算法等。需要确保代码示例正确,并且注释清晰。 另外,用户可能对流程中的关键步骤有疑问,比如质控制的标准,如何选择聚类数,差异表达分析的方法选择等,这可能在相关问题中体现出来。需要预测用户可能的后续问题,并在相关问题部分列出,比如询问质控制的具体参数,不同降维方法的比较,聚类结果的验证方法等。 最后,需要确保引用正确,引用标识放在引用段落的末尾。例如,在提到数据模拟和分析时,引用[^1],或者在统计计算时引用[^2]。</think>以下是一个典型的单细胞转录组分析流程及代码实现框架,整合了数据预处理、聚类分析和可视化等关键步骤: ### 单细胞分析完整流程 1. **数据加载与预处理** ```python import scanpy as sc adata = sc.read_10x_mtx("data/filtered_feature_bc_matrix/") # 加载10X数据 adata.var_names_make_unique() # 确保基因名唯一 ``` 2. **质控制** $$ \text{细胞过滤标准:} \begin{cases} n\_genes \geq 500 \\ mito\_ratio \leq 0.2 \\ total\_counts \in [2000, 20000] \end{cases} $$ ```python sc.pp.filter_cells(adata, min_genes=500) 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.n_genes_by_counts < 5000, :] ``` 3. **数据标准化与特征选择** ```python sc.pp.normalize_total(adata, target_sum=1e4) sc.pp.log1p(adata) sc.pp.highly_variable_genes(adata, n_top_genes=2000) ``` 4. **降维与聚类** ```python sc.pp.neighbors(adata, n_neighbors=15, n_pcs=40) sc.tl.umap(adata) sc.tl.leiden(adata, resolution=0.5) # 聚类算法 ``` 5. **差异表达分析** ```python sc.tl.rank_genes_groups(adata, 'leiden', method='wilcoxon') ``` 6. **可视化** ```python sc.pl.umap(adata, color='leiden', legend_loc='on data') sc.pl.dotplot(adata, var_names=['CD3D','CD79A'], groupby='leiden') ``` ### 关键工具推荐 - **Python**: Scanpy ($\geq$1.8版本) 生态 - **R**: Seurat ($\geq$4.0版本) - 云端分析:Cell Ranger (10X Genomics官方流程)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值