scRNAseq-scanpy
By Kaiyi Fu
环境配置
Anaconda
下载安装anaconda:https://www.anaconda.com/download
配置channels:打开Anaconda Navigator,点击Channel,添加conda-forge和bioconda,点击更“Update channels”
在conda环境中安装包:点击Anaconda Powershell Prompt,即可用conda命令创建环境,安装python包
VScode
下载并安装VScode
安装插件:Python、C/C++、R、R Debugger、Jupyter相关、Github Copilot、Auto Import、Remote - SSH、WSL等扩展插件
新建ipynb文件,Select Kernel选择环境变量
PyTorch
根据驱动和CUDA版本,在官网选择适当版本的PyTorch,进入conda环境,将下载指令复制到"Conda Prompt"中运行
下载完成后输入"pip list",查看列表中有没有"torch",有则说明安装完成
Conda常用命令操作
// Conda Powershell
# 创建名称为scanpy,python版本为3.11的虚拟环境
conda create -n scanpy python=3.11 --yes
# 激活scanpy环境
conda activate scanpy
# 退出当前虚拟环境
conda deactivate
# 查看所有虚拟环境
conda env list
#删除环境
conda remove -n 名字 --all
#重命名环境:conda没有提供重命名环境的命令,我们只能先克隆一份原来的环境,然后再删除原来的环境
conda create -n b --clone a
conda remove -n a --all
#安装包
conda install pip
#格式:conda install [-n env_name | -p path] [-c channel_address] [packages]
#安装指定版本的包
conda install peckage_name==x.x
#如果conda安装太慢可以用mamba install
#移除包
conda remove -n my_env numpy
conda uninstall 是 conda remove 的别名,同理
#列出环境中所有包
conda list
#更新包
conda update -n my_env numpy scipy
#格式:conda update [-n env_name | -p path] [packages] [--all]
#设置镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
#设置搜索时显示Channel地址
conda config --set show_channel_urls yes系统教程
安装Python包
分析前参数设置
路径设置
导入必要的包
绘图参数设置
数据的基本处理
1、数据格式
Scanpy 构建的对象叫做 AnnData 对象,数据存储是以多个模块存储;
obs 存储的是 seurat 对象中的 meta.data 矩阵
X 对象为一个稀疏矩阵(scipy.sparse.csr.csr_matrix),用于存储矩阵的值,与 seurat 对象是转置关系,即Scanpy 中的行为样本,列为基因
X 的多层级是由 layers 管理的,X 仍然只是一个矩阵而已。例如,在 X 存储未归一化的原始计数数据,在 layers 中可以添加归一化的数据或其他转换后的数据
var 存储的是基因(特征)的信息
uns 存储的是后续添加的非结构信息
obsm 和 varm 两个属性类似于字典,可以用键值对的方式添加矩阵类型(如 Pandas 数据框, scipy 稀疏矩阵, numpy 数组)的元数据信息,如 UMAP embedding 等;obsm 所添加的每个数据长度一定等于
n_obs,varm的长度与n_vars相同obsp 和 varp 中主要存储了观测值或变量两两之间的关系矩阵

AnnData object with n_obs × n_vars = 8931 × 33538
n_obs: 代表观测的数量
n_vars: 代表变量的数量,即测量的基因数
scanpy常用组件
sc.pp:用于数据预处理的 preprocessing 模块
sc.tl :访问用于数据分析的 tools 模块
sc.pl:用于可视化的 ploting 模块
访问读写操作是顶层函数,直接使用 sc 访问

2、数据读入
3、数据提取、修改与导出
4、数据转换(H5AD/Seurat/H5等)
H5AD转换为Seurat
Seurat转换为H5AD
5、子集操作与添加metadata
6、对象合并
数据预处理
对于单细胞数据,我们需要在分析前进行质量控制,包括去除包含双细胞、低表达细胞和低表达基因的细胞。除此之外,我们还需要根据线粒体基因比例、转录本数量、每个细胞表达的基因数量、细胞复杂性等进行过滤。
1、背景RNA校正
CellBender:
需要输入 cellranger count 输出的没有 filter 的矩阵(raw_feature_bc_matrix)
如果没有cellranger的输出文件,可以在R中将三个未经过滤的的10X文件转为h5文件,然后在linux的conda终端中运行cellbender
值得注意的是,与CellRanger相比,CellBender会保留许多遗漏的低UMI计数细胞,但是也会遗漏大量具有相对较高的UMI计数的液滴,因此需要在后续进行仔细的QC。
decontX
在R中运行,可以自行设定阈值
2、去除双细胞
COMPOSITE
Scrublet
3、线粒体/核糖体/红细胞过滤
4、基因和细胞数过滤
5、计算细胞周期
归一化(Normalization)+ 选择高可变基因
normalize_total + log1p
使用omicverse
降维、整合与批次校正
仅用PCA降维,不去批次
scVI
CellANOVA
原始代码:
Omicverse中调用:
Harmony
scanpy函数
Omicverse调用:
BBKNN
scAtlasVAE
不同整合方式的比较
可以从生物保留性、批次效应消除、以及簇同质性三个维度对不同方法进行评价(https://mp.weixin.qq.com/s/DK91JN-hsYSZW0BaMeetxw)
(https://mp.weixin.qq.com/s/CJq1WJ2EMi2z9RDT5axPAg)
聚类分群
计算neighbors + leiden分群
phenograph分群
GMM(Gaussian mixture model)分群
cNMF
确定合适的分群resolution
cluster tree和 marker gene AUC值
ROGUE:评估细胞亚群纯度
UMAP及其优化
基础绘图(Scatter plot)
结合PAGA或使用force atlas layout
UMAP密度图
等高线图(Contour plot)
细胞注释+寻找marker基因
手动注释
自动注释
迁移注释
与参考注释集计算相关性
寻找细胞亚群差异基因
sc.tl.rank_genes_groups:使用没有矫正的数据做差异表达分析
scVI差异分析:使用模型标准化后的值做差异表达分析
COSG差异分析
常用细胞marker
T细胞marker
肿瘤细胞推断
InferCNV
细胞比例/差异丰度分析
绝对比例和相对比例
scCODA
milo
Ro/e
差异及富集分析
Scanpy差异分析 + gseapy富集分析
Seurat::FindMarkers + 富集分析
pseudobulks
SEACells/Metacell 差异分析
Memento
通路打分
scanpy.tl.score_genes
AUCell
ov.single.pathway_enrichment
AddModuleScore
singleseqgset富集分析
GSVA富集分析
irGSEA:整合多种算法分析
DecoupleR:整合多种算法分析
富集通路网络图
拟时序分析
Diffusion Map
CytoTrace2
Monocle
PAGA
scTour
RNAvelocity
scVelo
Cell2fate
细胞通讯
CellPhoneDB
CellChat
CellChat细胞通讯数据库通过整合KEGG和文献,构建了细胞通讯数据库cellchatDB,数据库主要包括三部分,(1)旁分泌、自分泌的信号互作。(2)胞外基质-受体互作。(3)细胞直接互作。在这些直接互作的蛋白外,cellchat还将可溶性激动剂、拮抗剂等互作引子考虑在内。
iTALK
NicheNet
MultiNicheNet
转录因子分析
Last updated