您现在的位置是:首页 > 编程 > 

单细胞测序数据分析

2025-07-28 09:13:42
单细胞测序数据分析 之前我们分享过单细胞自动注释包GPTtypecell的使用方法。今天我们详细介绍一下细胞类型注释的内容,并且学习手动注释是如何实现的。YEAR-ED SUMMARY单细胞注释简介在单细胞转录组分析(scRA-seq)中,每个细胞都可以测量到大量基因的表达值。为了更好地理解细胞功能和组织组成,需要对每个细胞进行分类并标注其生物学意义,这个过程称为单细胞类型注释。通常,注释是通

单细胞测序数据分析

之前我们分享过单细胞自动注释包GPTtypecell的使用方法。今天我们详细介绍一下细胞类型注释的内容,并且学习手动注释是如何实现的。

YEAR-ED SUMMARY

单细胞注释简介

在单细胞转录组分析(scRA-seq)中,每个细胞都可以测量到大量基因的表达值。为了更好地理解细胞功能和组织组成,需要对每个细胞进行分类并标注其生物学意义,这个过程称为单细胞类型注释。通常,注释是通过结合基因表达数据和先验生物学知识进行的。

单细胞注释的原理主要基于细胞类型特异性基因表达模式。不同类型的细胞会有一组特异性表达的基因(称为标志性基因或Marker基因)。例如:免疫细胞:T细胞通常高表达 CDD,B细胞高表达 CD19。

上皮细胞:高表达 EPCAM。

成纤维细胞:高表达 COL1A1。

神经元:高表达 MAP2 或 RBFOX (eu)。

不过,通过标志基因对细胞类型进行分配有一定的局限性,我们知道B细胞会高表达B细胞表面抗原MS4A1,但是我们所测得的B细胞却有着不同的状态,如幼稚B细胞,成熟B细胞,浆细胞等,甚至还有一些疾病/组织特异性B细胞。故细胞类型的注释并不是绝对的,我们一般会首先获得大类细胞,再从大类细胞中识别细胞类型的"亚型"或"细胞状态"(例如,激活状态与静息状态)。

YEAR-ED SUMMARY

手动注释

建议从一个稍微复杂的数据开始注释,虽然说简单的数据注释流程与复杂的是一样的,但是太过简单的数据会使得我们无法理解细胞亚的含义。这里我们选择了降维完成后的人类骨髓数据进行注释。

加载数据:

配置环境:

代码语言:javascript代码运行次数:0运行复制
import  omicverse  as  ov
print(f'omicverse version: {ov.__version__}')
import scanpy as sc
print(f'scanpy version: {sc.__version__}')
_plot_set()

读取数据

代码语言:javascript代码运行次数:0运行复制

adata = ov.read('s4d8_dimensionality_reduction.h5ad')
adata

聚类

在单细胞测序分析中,先聚类后注释是一个经典流程,而且第一步注释的聚类分辨率不用太高。

代码语言:javascript代码运行次数:0运行复制

sc.(adata, n_neighbors=15,
    n_pcs=0, use_rep='scaled|original|X_pca')
leiden(adata, key_added="leiden_res1", resolution=1.0)
["X_mde"] = ov.(["scaled|original|X_pca"])
ov.(adata,
    basis='X_mde',
    color=["leiden_res1"],
    title=['Clusters'],
    palette=ov.palette()[:],
    show=False, frameon='small',)

基于marker字典的注释

下面列出了一组基于文献的骨髓细胞标记基因,这些基因由研究特定细胞类型及亚型的论文报告。需要注意,蛋白水平上的标记基因(如用于流式细胞术)在转录组数据中可能表现不佳,因此基于RA的标记基因通常更可靠。同时,某些标记基因可能在不同数据集中的表现存在差异,理想情况下应在多个数据集中验证其有效性。最后,与领域专家合作尤为重要,生物学家对组织、生物学特性、细胞类型及标记基因更熟悉,有助于提高注释准确性。对于亚标记基因,应结合多篇文献进行综合分析和验证。

代码语言:javascript代码运行次数:0运行复制

marker_genes = {'Fibroblast':['ACTA2'],
'Endothelium':['PTPRB','PECAM1'],
'Epithelium':['KRT5','KRT14'],
'Mast cell':['KIT','CD6'],
'eutrophil' :['FCGRA','ITGAM'],
'cDendritic cell':['FCER1A','CST'],
'pDendritic cell':['ILRA','GZMB','SERPIF1','ITM2C'],
'Monocyte' :['CD14','LYZ','S100A8','S100A9','LST1',],
'Macrophage':['CSF1R','CD68'],
'B cell':['MS4A1','CD79A'],
'Plasma cell':['MZB1','IGKC','JCHAI'],
'Proliferative signal':['MKI67','TOP2A','STM1'],
'K/KT cell':['GLY','KG7','KLRD1'],
'T cell':['CDD','CDE'],
}

在我们的数据中仅选择检测到的标记基因。我们将循环遍历所有marker字典里的细胞类型,并仅保留我们在adata对象中发现的基因作为该细胞类型的标记基因。这将在我们开始绘图时防止错误的发生。

代码语言:javascript代码运行次数:0运行复制

smarker_genes_in_data = dict()for ct, markers in small_marker_dict.items():
markers_found = list()    for marker in markers:        if marker in adata.var.index:
markers_found.append(marker)
smarker_genes_in_data[ct] = markers_found#del [] # remove the last markerdel_markers = list()for ct, markers in smarker_genes_in_data.items():    if markers == []:
del_markers.append(ct)for ct in del_markers:    del smarker_genes_in_data[ct]

基于上述字典得到的maker如下:

代码语言:javascript代码运行次数:0运行复制
smarker_genes_in_data
sc.pl.dotplot(
adata,
groupby="leiden_res1",
var_names=smarker_genes_in_data,
dendrogram=True,
standard_scale="var",  # standard scale: normalize each gene to range from 0 to 1)

我们可视化这部分细胞,观察注释的细胞是否连在一起,如果连在一起证明我们注释的正确性,否则注释可能有错误。

代码语言:javascript代码运行次数:0运行复制

# create a dictionary to map cluster to annotation labelcluster2annotation = {     '7': 'K cells', # Germ-cell(Oid)'1': 'K cells', # Germ-cell(Oid)'20': 'K cells',     '0': 'K cells',     '19': 'B cells',     '4': 'B cells',     '8': 'B cells',     '6': 'B cells',     '12': 'B cells',
}
['major_celltype'] = ['leiden_res1'].map(cluster2annotation).astype('category')
ov.(
adata,
basis='X_mde',
color=['leiden_res1', 'major_celltype'],
title=['Clusters', 'Cell types'],
palette=ov.palette()[:], 
wspace=0.55,
show=False, 
frameon='small',
)

基于marker数据库的注释

根据上面的分析,我们也可以直接利用数据库来查特定的细胞类型,我们将使用AUCell来评估每一类细胞的marker基因。

代码语言:javascript代码运行次数:0运行复制
adata_raw = adata._adata()
adata_raw
pathway_dict = ov.utils.geneset_prepare(
'CellMarker_Augmented_', organism='Human'
)

# Assess all pathways
adata_aucs = ov.single.pathway_aucell_enrichment(
adata_raw,
pathways_dict=pathway_dict,
num_workers=8
)

adata_ = adata_raw[adata_.index].obs
adata_m = adata_raw[adata_.index].obsm
adata_p = adata_raw[adata_.index].obsp
adata_aucs

首先从Enrichr中下载CellMarker_Augmented_2021数据库,该库一共包含了1074种细胞类型,并且平均每一种细胞类型有80个基因,我们导入该数据库。然后将原来的obs属性赋予新生成的adata_aucs,使其保持原来的细胞元数据。

与此前计算簇特异性基因的过程一样,在这里,同样计算簇特异的细胞类型。

代码语言:javascript代码运行次数:0运行复制
# adata_aucs.uns['log1p']['base'] = one
rank_genes_groups(
    adata_aucs, groupby="leiden_res1", use_raw=False,
    method="wilcoxon", key_added="dea_leiden_aucs_res1"
)
sc.pl.rank_genes_groups_dotplot(
    adata_aucs, groupby='leiden_res1',
    cmap='RdBu_r', key='dea_leiden_aucs_res1',
    standard_scale='var', n_genes=
)

从图中可以发现簇14主要富集了各类的T细胞,我们验证一下每一个簇的细胞类型。

代码语言:javascript代码运行次数:0运行复制

special_cluster = '14'
degs = sc.get.rank_genes_groups_df(

    adata_aucs, group=special_cluster, key='dea_leiden_aucs_res1'
)
degs = degs.dropna()
print(
    '{}: {}'.format(
        special_cluster, 
        str(
            [:2].tolist()
        ).replace("'", "")
         .replace("[", "")
         .replace("]", "")
         .replace(",", "|")
    )
)
# Loop through clusters
for cluster in adata_aucs.uns['dendrogram_leiden_res1']['categories_ordered']:
    special_cluster = str(cluster)
    degs = sc.get.rank_genes_groups_df(
        adata_aucs, group=special_cluster, key='dea_leiden_aucs_res1'
    )
    degs = degs.dropna()
    print(
        '{}: {}'.format(
            special_cluster, 
            str(
                [:2].tolist()
            ).replace("'", "")
             .replace("[", "")
             .replace("]", "")
             .replace(",", "|")

        )

    )

需要结合上面的点图,去确定相同的细胞类型的簇

代码语言:javascript代码运行次数:0运行复制

# Create a dictionary to map clusters to annotation labels
cluster2annotation = {
        '0': 'K cells',
        '1': 'K cells',
        '2': 'T cells',
        '': 'B cells',
        '4': 'B cells',
        '5': 'T cells',
        '6': 'B cells',
        '7': 'K cells',
        '8': 'B cells',
        '9': 'Monocyte',
        '10': 'T cells',
        '11': 'Erythroid',
        '12': 'Endothelial cell',
        '1': 'Monocyte',
        '14': 'T cells',
        '15': 'Erythroid',
        '16': 'eur',
        '17': 'eur',
        '18': 'Erythroid',
        '19': 'B cells',
        '20': 'K cells'
}

['manual_celltype'] = ['leiden_res1'].map(cluster2annotation).astype('category')

ov.(
        adata,
        basis='X_mde',
        color=["manual_celltype", "major_celltype"],
        title=['Database Cell types', 'Marker Cell types'],
        palette=ov.palette()[:],
        wspace=0.55,
        show=False,
        frameon='small'
)

我们发现两种方法所注释得到的细胞高度相似,唯一的区别是我们使用数据库注释的时候会多出一类EndoThelial细胞。我们检查发现这是簇12所注释出来的细胞类型。我们重新研究发现,此前的marker基因的点图中,簇12位于图的尾端,其实其与B细胞不是完全一致,MS4A1的表达也不是特别高。故我们修正该注释结果为Endothelial细胞。

本文参与 腾讯云自媒体同步曝光计划,分享自。原始发表:2025-01-15,如有侵权请联系 cloudcommunity@tencent 删除数据数据库数据分析cellmarker

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1144010.html

相关标签:无
上传时间: 2025-07-19 10:03:25
留言与评论(共有 17 条评论)
本站网友 赌徒心理
23分钟前 发表
{}'.format( special_cluster
本站网友 肇东二手房
29分钟前 发表
'T cells'
本站网友 社保税
17分钟前 发表
原始发表:2025-01-15
本站网友 脚部穴位图
22分钟前 发表
生物学特性
本站网友 dnf时装模拟器
8分钟前 发表
理想情况下应在多个数据集中验证其有效性
本站网友 杭州天德池
5分钟前 发表
key='dea_leiden_aucs_res1' ) degs = degs.dropna() print( '{}
本站网友 小树不修不直溜
17分钟前 发表
title=['Clusters'
本站网友 平庄贴吧
18分钟前 发表
激活状态与静息状态)
本站网友 最难拔的智齿图
25分钟前 发表
"") .replace("["
本站网友 生殖器官图片
6分钟前 发表
'STM1']
本站网友 为什么什么乐
6分钟前 发表
palette=ov.palette()[
本站网友 电波拉皮
17分钟前 发表
'9'
本站网友 清远城市广场
7分钟前 发表
'cDendritic cell'
本站网友 光耀地产
18分钟前 发表
同样计算簇特异的细胞类型
本站网友 离婚女人的心理
25分钟前 发表
'5'
本站网友 中国人口普查结果
24分钟前 发表
否则注释可能有错误