首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python单细胞学习笔记-day9(发在Science的celltypist软件注释)

python单细胞学习笔记-day9(发在Science的celltypist软件注释)

作者头像
生信技能树
发布于 2025-03-28 09:04:09
发布于 2025-03-28 09:04:09
34201
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:1
代码可运行

前面的python学习笔记::

今天继续学习视频:学习celltypist细胞注释,单样本和多样本~

0.环境准备

在之前的conda环境中安装新的本次上课需要的几个包:(建议先不要全都安装上,很容易后面出现包导入失败,可以运行到哪个代码缺少模块再开始安装~)

代码语言:javascript
代码运行次数:1
运行
AI代码解释
复制
# bash终端
conda activate sc
# 安装 scikit-learn库
pip install singler -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
pip install singlecellexperiment -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
pip install scranpy -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
pip install celldex -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
pip install celltypist -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
pip install harmonypy -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
pip install loompy -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple    

文件说明:

  • 2.celltypist.ipynb:单样本的单细胞标准分析以及后面的celltypilst细胞注释
  • 4.celltypist_multisamples.ipynb:多样本的单细胞标准分析以及后面的celltypilst细胞注释

1.单样本的celltypist注释

1.1 数据读取

使用用read_10x_mtx读取10x cellranger的三个标准文件,01_data 的文件:'barcodes.tsv', 'genes.tsv', 'matrix.mtx'

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import singlecellexperiment as sce
import scanpy as sc
import os
print(os.listdir("01_data"))

# 读取数据
adata = sc.read_10x_mtx("01_data/")
print(adata.shape)
adata.X

1.2 数据质控

都是常规流程,快速看下数据分布特点决定数据过滤条件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 计算线粒体基因表达比例
adata.var['mt']=adata.var_names.str.startswith('MT-')
sc.pp.calculate_qc_metrics(adata,qc_vars=['mt'],log1p=False,percent_top=None,inplace=True)
# 过滤前数据分布情况
sc.pl.violin(adata,["n_genes_by_counts", "total_counts", "pct_counts_mt"],jitter=0.4, multi_panel=True)

过滤:这里这个数据我不太清楚来自哪里以及是什么组织类型,所以如果是自己的数据需要结合项目背景来看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 确定过滤条件并过滤
# 初始过滤
sc.pp.filter_cells(adata,min_genes=200)
sc.pp.filter_genes(adata,min_cells=3)
adata=adata[adata.obs.n_genes_by_counts>200]
adata=adata[adata.obs.n_genes_by_counts<2500]
adata=adata[adata.obs.pct_counts_mt<5].copy()
# 过滤后数据分布情况
sc.pl.violin(adata,["n_genes_by_counts", "total_counts", "pct_counts_mt"],jitter=0.4, multi_panel=True)
# 过滤后的细胞与基因数
print(adata.shape)

这好像是个过滤了的数据,小提琴过滤前后没啥变化:

1.3 数据标准化、降维聚类分群

还是scanpy的标准代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 数据标准化
sc.pp.normalize_total(adata,target_sum=1e4)
sc.pp.log1p(adata)
adata.raw=adata
# 高变基因
sc.pp.highly_variable_genes(adata,n_top_genes=2000)
# 归一化
sc.pp.scale(adata)
sc.pp.pca(adata)
sc.pp.neighbors(adata,n_pcs=15)
sc.tl.leiden(adata,flavor="igraph",n_iterations=2,resolution=0.5)
sc.tl.umap(adata)
# 可视化
sc.pl.umap(adata,color='leiden')

到这里单细胞的标准分析就做完了,聚类结果如下:

1.4 celltypist自动注释

celltypist软件于2022年5月13号发表在顶刊Science杂志上,文献标题为《Cross-tissue immune cell analysis reveals tissue-specific features in humans》。

与别的自动注释算法不同,CellTypist可以自定义高精度和低精度,即直接注释出细胞的亚群。

这个软件已经训练好的参考模型:https://www.celltypist.org/models

首先下载model:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import celltypist
from celltypist import models

# 第一次使用时,会自动下载所有的参考数据
model = models.Model.load(model='Immune_All_High.pkl') #https://www.celltypist.org/models

动态日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
🔎 No available models. Downloading...
📜 Retrieving model list from server https://celltypist.cog.sanger.ac.uk/models/models.json
📚 Total models in list: 54
📂 Storing models in /home/zhangj/.celltypist/data/models
💾 Downloading model [1/54]: Immune_All_Low.pkl
💾 Downloading model [2/54]: Immune_All_High.pkl
💾 Downloading model [3/54]: Adult_COVID19_PBMC.pkl
💾 Downloading model [4/54]: Adult_CynomolgusMacaque_Hippocampus.pkl
💾 Downloading model [5/54]: Adult_Human_MTG.pkl
💾 Downloading model [6/54]: Adult_Human_PancreaticIslet.pkl
💾 Downloading model [7/54]: Adult_Human_PrefrontalCortex.pkl
💾 Downloading model [8/54]: Adult_Human_Skin.pkl
💾 Downloading model [9/54]: Adult_Human_Vascular.pkl
💾 Downloading model [10/54]: Adult_Mouse_Gut.pkl
💾 Downloading model [11/54]: Adult_Mouse_OlfactoryBulb.pkl
💾 Downloading model [12/54]: Adult_Pig_Hippocampus.pkl
💾 Downloading model [13/54]: Adult_RhesusMacaque_Hippocampus.pkl
💾 Downloading model [14/54]: Autopsy_COVID19_Lung.pkl
💾 Downloading model [15/54]: COVID19_HumanChallenge_Blood.pkl
💾 Downloading model [16/54]: COVID19_Immune_Landscape.pkl
💾 Downloading model [17/54]: Cells_Adult_Breast.pkl
💾 Downloading model [18/54]: Cells_Fetal_Lung.pkl
💾 Downloading model [19/54]: Cells_Human_Tonsil.pkl
💾 Downloading model [20/54]: Cells_Intestinal_Tract.pkl
💾 Downloading model [21/54]: Cells_Lung_Airway.pkl
💾 Downloading model [22/54]: Developing_Human_Brain.pkl
💾 Downloading model [23/54]: Developing_Human_Gonads.pkl
💾 Downloading model [24/54]: Developing_Human_Hippocampus.pkl
💾 Downloading model [25/54]: Developing_Human_Organs.pkl
💾 Downloading model [26/54]: Developing_Human_Thymus.pkl
💾 Downloading model [27/54]: Developing_Mouse_Brain.pkl
💾 Downloading model [28/54]: Developing_Mouse_Hippocampus.pkl
💾 Downloading model [29/54]: Fetal_Human_AdrenalGlands.pkl
💾 Downloading model [30/54]: Fetal_Human_Pancreas.pkl
💾 Downloading model [31/54]: Fetal_Human_Pituitary.pkl
💾 Downloading model [32/54]: Fetal_Human_Retina.pkl
💾 Downloading model [33/54]: Fetal_Human_Skin.pkl
💾 Downloading model [34/54]: Healthy_Adult_Heart.pkl
💾 Downloading model [35/54]: Healthy_COVID19_PBMC.pkl
💾 Downloading model [36/54]: Healthy_Human_Liver.pkl
💾 Downloading model [37/54]: Healthy_Mouse_Liver.pkl
💾 Downloading model [38/54]: Human_AdultAged_Hippocampus.pkl
💾 Downloading model [39/54]: Human_Colorectal_Cancer.pkl
💾 Downloading model [40/54]: Human_Developmental_Retina.pkl
💾 Downloading model [41/54]: Human_Embryonic_YolkSac.pkl
💾 Downloading model [42/54]: Human_Endometrium_Atlas.pkl
💾 Downloading model [43/54]: Human_IPF_Lung.pkl
💾 Downloading model [44/54]: Human_Longitudinal_Hippocampus.pkl
💾 Downloading model [45/54]: Human_Lung_Atlas.pkl
💾 Downloading model [46/54]: Human_PF_Lung.pkl
💾 Downloading model [47/54]: Human_Placenta_Decidua.pkl
💾 Downloading model [48/54]: Lethal_COVID19_Lung.pkl
💾 Downloading model [49/54]: Mouse_Dentate_Gyrus.pkl
💾 Downloading model [50/54]: Mouse_Isocortex_Hippocampus.pkl
💾 Downloading model [51/54]: Mouse_Postnatal_DentateGyrus.pkl
💾 Downloading model [52/54]: Mouse_Whole_Brain.pkl
💾 Downloading model [53/54]: Nuclei_Lung_Airway.pkl
💾 Downloading model [54/54]: Pan_Fetal_Human.pkl
CellTypist model with 32 cell types and 6639 features
    date: 2022-07-16 08:53:00.959521
    details: immune populations combined from 20 tissues of 18 studies
    source: https://doi.org/10.1126/science.abl5197
    version: v2
    cell types: B cells, B-cell lineage, ..., pDC precursor
    features: A1BG, A2M, ..., ZYX

这是默认的下载目录:

下载的models:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
predictions = celltypist.annotate(adata, model = model, majority_voting = True)
print(predictions.predicted_labels)

预测结果:这里使用第三列的结果作为细胞类型注释结果majority_voting

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                         predicted_labels over_clustering majority_voting
AAACATACAACCAC-1          T cells              40         T cells
AAACATTGAGCTAC-1          B cells              14         B cells
AAACATTGATCAGC-1          T cells              10         T cells
AAACCGTGCTTCCG-1        Monocytes               6       Monocytes
AAACCGTGTATGCG-1              ILC              22             ILC
...                           ...             ...             ...
TTTCGAACTCTCAT-1        Monocytes               1       Monocytes
TTTCTACTGAGGCA-1     Plasma cells              14         B cells
TTTCTACTTCCTCG-1          B cells               8         B cells
TTTGCATGAGAGGC-1          B cells               8         B cells
TTTGCATGCCTCAC-1          T cells              34         T cells

整理一下预测结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adata2 = predictions.to_adata()
print(adata2.obs)

# 修改一下预测的细胞名字,个人习惯,也可以不改
# 去掉名字冲的cells
adata2.obs.majority_voting = adata2.obs.majority_voting.str.replace(' cells', '', regex=False)
# 把monocytes改为Mono
adata2.obs.majority_voting = adata2.obs.majority_voting.str.replace(' monocytes', ' Mono', regex=False)
adata2.obs.majority_voting

整理之后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AAACATACAACCAC-1            T
AAACATTGAGCTAC-1            B
AAACATTGATCAGC-1            T
AAACCGTGCTTCCG-1    Monocytes
AAACCGTGTATGCG-1          ILC
                      ...    
TTTCGAACTCTCAT-1    Monocytes
TTTCTACTGAGGCA-1            B
TTTCTACTTCCTCG-1            B
TTTGCATGAGAGGC-1            B
TTTGCATGCCTCAC-1            T

umap可视化看一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sc.tl.umap(adata2)
sc.pl.umap(adata2, color = 'majority_voting',legend_loc="on data")

2.多样本的celltypist注释

这里与单样本的区别在于数据的读取和合并,先来读取一下:读取的数据为02_data,这里我也没有获取到数据的背景信息(数据是什么组织,如何取样,以便了解里面可能包含的细胞类型,这是做细胞类型注释必须了解的内容,后面celltypist的模型选择也会有参考),所以这里就看看代码就好了。

02_data的目录下有三个样本,'TD1', 'TD2', 'TD3',每个样本下面是标准的三个文件:'barcodes.tsv.gz', 'features.tsv.gz', 'matrix.mtx.gz'

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import scanpy as sc
import os
import pandas as pd
from scipy.io import mmread
import anndata

# 列出目录下的文件有哪些
path1='02_data/'
os.listdir(path1)
os.listdir('02_data/TD1/')

关于python读取单细胞,各种格式,可以看我们前面的帖子:python版读取不同的单细胞数据格式(单样本与多样本)

多样本读取:用for循环批量读取数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 用for循环批量读取数据
adata = {}
for i in range(len(os.listdir(path1))):
    data = sc.read_10x_mtx(path1 +os.listdir(path1)[i], var_names="gene_symbols", cache=True)
    data.var_names_make_unique()  
    adata[os.listdir(path1)[i]] = data
    print([f'{os.listdir(path1)[i]}:done']+list([data.shape]))
    
# 把多个数据拼接到一起,成为一个大的anndata对象
adata = sc.concat(adata,label='sample')
adata.obs_names_make_unique()
adata

# 每个样本里的细胞数量
adata.obs.sample.value_counts() 

然后是质控:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sc.pp.filter_cells(adata,min_genes=300)
sc.pp.filter_genes(adata,min_cells=5)
#计算线粒体基因比例
adata.var['mt']=adata.var_names.str.startswith('MT-')
# 计算核糖体基因比例
adata.var['ribo']=adata.var_names.str.match('^RP[SL]')
# 计算红血细胞基因比例
adata.var['hb']=adata.var_names.str.match('^HB[^(P)]')
sc.pp.calculate_qc_metrics(adata,qc_vars=['mt','ribo','hb'],percent_top=None,log1p=False,inplace=True)
# 可视化细胞的上述比例情况

sc.pl.violin(adata,['n_genes_by_counts','total_counts'],groupby='batch',jitter=False)

质控前的小提琴图:

过滤细胞:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adata = adata[adata.obs.n_genes_by_counts < 6000, :]
adata = adata[adata.obs.pct_counts_mt < 18, :].copy()

又是常规的降维聚类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sc.pp.normalize_total(adata,target_sum=1e4)
sc.pp.log1p(adata)
adata.raw = adata.copy()
#celltypist包需要的数据是log normlize之后的数据,会使用这里的adata.raw。
sc.pp.highly_variable_genes(adata)
sc.pp.scale(adata)
sc.tl.pca(adata,use_highly_variable=True)
sc.external.pp.harmony_integrate(adata,'batch')
#聚类
sc.pp.neighbors(adata,use_rep='X_pca_harmony',n_pcs=15)
sc.tl.umap(adata)
sc.tl.leiden(adata, flavor="igraph", n_iterations=2,resolution=0.5)
sc.pl.umap(adata,color='leiden',legend_loc='on data')

注释:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import celltypist
from celltypist import models
model = models.Model.load(model='Immune_All_High.pkl') #https://www.celltypist.org/models
model
predictions = celltypist.annotate(adata, model = model, majority_voting = True)
print(predictions.predicted_labels)
adata2 = predictions.to_adata()
print(adata2.obs)
adata2.obs.majority_voting = adata2.obs.majority_voting.str.replace(' cells', '', regex=False)
adata2.obs.majority_voting = adata2.obs.majority_voting.str.replace(' monocytes', ' Mono', regex=False)
adata2.obs.majority_voting
sc.tl.umap(adata2)
sc.pl.umap(adata2, color = 'majority_voting',legend_loc="on data")

注释结果如下:

软件的原理,后面会在单独分享一次细节~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Scanpy 单细胞分析:Pearson残差处理计数数据
本系列讲解 使用 Scanpy 分析单细胞(scRNA-seq)数据 教程[1],持续更新,欢迎关注,转发!
数据科学工厂
2025/08/13
1060
Scanpy 单细胞分析:Pearson残差处理计数数据
使用 CellTypist 进行免疫细胞类型分类
该笔记通过从内置 CellTypist 模型或用户训练的自定义模型中检索最可能的细胞类型标签来展示 scRNA-seq 查询数据的细胞类型分类。
生信技能树
2021/12/29
8.4K0
使用 CellTypist 进行免疫细胞类型分类
单细胞——从降维聚类分群、细胞命名、到批量富集分析,一文打通GSE104154博来霉素小鼠模型单细胞数据
注意:这个数据使用了ensemble id作为基因名,后续需要换为gene symbol
生信菜鸟团
2023/09/09
3.6K0
单细胞——从降维聚类分群、细胞命名、到批量富集分析,一文打通GSE104154博来霉素小鼠模型单细胞数据
🤩 scanpy | 超高速完成单细胞分析!~(一)(预处理与聚类)
看现在的趋势,未来python可能才是未来,R再不做出改变就要被取代了。🙂‍↕️
生信漫卷
2025/05/04
9520
🤩 scanpy | 超高速完成单细胞分析!~(一)(预处理与聚类)
单细胞测序最好的教程(六):细胞类型注释
作者按 本教程将是本系列教程中最重要的一章,我们后续所有的单细胞分析,都要基于准确的细胞类型注释。本系列教程首发于“[单细胞最好的中文教程](single_cell_tutorial Readthedocs[1])”,未经授权许可,禁止转载。 全文字数|预计阅读时间: 4500|5min ——Starlitnightly
生信菜鸟团
2023/08/23
1.9K0
单细胞测序最好的教程(六):细胞类型注释
scanpy和Seurat单细胞分析对比
尝试把曾老师的单细胞seurat分析的代码转换成scanpy版本的,包括样品读取,质控,harmony去除批次效应,降维聚类,marker鉴定。
生信技能树
2023/11/16
2K0
scanpy和Seurat单细胞分析对比
单细胞测序最好的教程(十):万能的Transformer与细胞注释
迁移注释实际上是自动注释的一类,与我们在3-4中介绍的自动注释不同,迁移注释需要我们有一个已经注释好的单细胞测序数据文件,而不是训练好的模型或者marker。我们需要使用这个已经注释好的单细胞测序数据文件来训练一个新的模型,例如Cell-Blast或者是Tosica等。
生信技能树jimmy
2023/09/09
1.7K0
单细胞测序最好的教程(十):万能的Transformer与细胞注释
单细胞Scanpy流程学习和整理(单样本10X数据读取/过滤/降维/聚类)
新手上路写的很繁琐,多多包涵,本次用的IDE是Visual studio code。
凑齐六个字吧
2024/09/25
1.8K0
单细胞Scanpy流程学习和整理(单样本10X数据读取/过滤/降维/聚类)
单细胞分析的 Python 包 Scanpy(图文详解)
线粒体基因的转录本比单个转录物分子大,并且不太可能通过细胞膜逃逸。因此,检测出高比例的线粒体基因,表明细胞质量差(Islam et al. 2014; Ilicic et al. 2016)。
白墨石
2021/07/16
5.5K1
单细胞分析的 Python 包 Scanpy(图文详解)
Xenium数据分析 | 数据预处理、单细胞降维聚类、细胞类型定义
上节我们下载10x官方数据后,使用spatialdata框架进行数据读取,这节我们拿到单细胞数据后,使用常规单细胞数据分析流程,进行数据质控、低质量细胞删除、降维聚类、筛选特征基因、参考文章细胞类型marker进行细胞类型定义。
生信大杂烩
2025/05/29
1400
Xenium数据分析 | 数据预处理、单细胞降维聚类、细胞类型定义
单细胞注释记不住marker怎么办--让AI帮你解释差异基因
众所周知,单细胞数据分析最磨人的环节就是确定不同的单细胞亚群的生物学名字,而且每个领域都有自己的特殊性,所以我们耗费了大量的时间做了一些亚群及其对应的marker的整理,如下所示;
生信技能树
2024/11/21
3440
单细胞注释记不住marker怎么办--让AI帮你解释差异基因
单细胞转录组实战03: 使用celltypist注释细胞
图片上一步得到了质控和整合后的数据,这一步需要聚类分群和细胞注释from pathlib import Pathimport refrom io import StringIOimport matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport scanpy as scimport seaborn as snsimport celltypistOUTPUT_DIR='output/02.Cell_Type'Path(OUTPUT
生信探索
2023/02/11
1.8K0
python读取空间转录组数据
上一期我们学习了使用python读取不同的单细胞数据:python版读取不同的单细胞数据格式(单样本与多样本),今天来看看使用python读取空间转录组的数据。
生信技能树
2025/03/06
2000
python读取空间转录组数据
单细胞Scanpy流程学习和整理(分析簇间差异基因/细胞注释/数据保存)
上一篇推文介绍了Scanpy流程中的10X数据读取/过滤/降维/聚类步骤,这次笔者将学习一下差异分析/细胞注释/数据保存。
凑齐六个字吧
2024/09/26
1.3K0
单细胞Scanpy流程学习和整理(分析簇间差异基因/细胞注释/数据保存)
python单细胞学习笔记-day6
https://cf.10xgenomics.com/samples/cell/pbmc3k/pbmc3k_filtered_gene_bc_matrices.tar.gz
生信技能树
2025/02/05
1950
python单细胞学习笔记-day6
Scanpy进行单细胞分析及发育轨迹推断
最近看文献,发现越来越多的单细胞测序使用scanpy进行轨迹推断,可能因为scanpy可以在整体umap或者Tsne基础上绘制细胞发育路径,图片也更加美观,但是Scanpy是基于python开发的,下面整理下Scanpy官网给出的流程,按照官网流程跑一遍PBMC的数据。
生信技能树jimmy
2020/12/24
4.3K0
基于python的scanpy模块的乳腺癌单细胞数据分析
这次我们来复现一篇单细胞的文章。这篇我们只来复现细胞图谱和拟时序分析 像细胞通讯,还有富集分析还是很简单的。大家可以继续走下去,然后我们来交流讨论! 这篇全篇基于python复现。
生信技能树
2021/10/12
4.1K1
scanpy分析单细胞数据
scanpy和seurat是最常用的分析的单细胞的工具,seurat基于R,而scanpy基于python。 linux下用pip安装scanpy
生信编程日常
2020/12/21
2.2K0
scanpy分析单细胞数据
单细胞最好的教程(四):降维
上周的教程中,我们讲解了使用omicverse进行单细胞测序数据的预处理的一些思想。关于omicverse的使用文档与安装教程可以参考我们的readthedocs(https://omicverse.readthedocs.io/).
生信技能树jimmy
2023/08/31
1.2K0
单细胞最好的教程(四):降维
课前准备---HD数据结合图像识别获取真实的空间单细胞级数据
追风少年i
2024/07/03
2580
课前准备---HD数据结合图像识别获取真实的空间单细胞级数据
推荐阅读
相关推荐
Scanpy 单细胞分析:Pearson残差处理计数数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验