scType的功能又双叒叕更新啦!反卷积算法为空间转录组细胞类型注释赋能!

前言

看到scType是不是有种似曾相识的感觉?没错,几个月前小云带着大家学习过这个R包,不知道大家对之前学习过的scType还有印象吗?没印象的小伙伴们快去翻翻笔记!上次小云带着大家学习了单细胞转录组数据的特定标记组合进行全自动和超快速的细胞类型鉴定,这不还没多长时间,scType的功能又双叒叕更新啦!米特罗·米基宁教授团队又研究了一种称为scType的基于反卷积标记的空间转录组细胞注释方法。这下方便大家了,一个包两个用处!不仅如此,R语言和python都通用哦!开始之前请允许小云打个广告,广告之后更精彩哦!练了十年生信分析的小云对于生信分析知识已经如鱼得水,相信有小云的加持一定能让大家学会!没有时间学习且有生信分析的小伙伴们快来滴滴小云噢!从分析到可视化直到你满意为止!

空间转录组数据处理起来占用内存实在太大了,放过自己的电脑吧!小云在这里给大家送上福利了,有需要服务器的小伙伴们,欢迎大家联系小云,保证服务器的性价比最高哦!

实例教程

1.基于python的空间转录组细胞类型注释

##加载相应的python库

import urllib.request

import scanpy as sc

import numpy as np

import pandas as pd

np.random.seed(100)

# 从URL中获取脚本

url = “https://raw.githubusercontent.com/kris-nader/sc-type-py/main/sctype_py.py”

response = urllib.request.urlopen(url)

script = response.read().decode()

# 执行脚本

exec(script)

加载通过 Scanpy 提供的示例数据。想要数据及代码的私信小云哦!在本教程中,我们将遵循 Scanpy 在其基本分析教程中概述的预处理步骤。 请注意,预处理选项的变化可能会导致不同的注释。此外,如本文所述,在不同的软件包(例如 Seurat 和 Scanpy)之间产生的注释可能会有很大差异。

adata = sc.datasets.visium_sge(sample_id=”V1_Human_Lymph_Node”)

adata.var_names_make_unique()

adata.layers[“counts”] = adata.X.copy()

sc.pp.highly_variable_genes(adata, n_top_genes=2000, flavor=”seurat_v3″,layer=”counts”)

sc.pp.normalize_total(adata)

sc.pp.log1p(adata)

adata.raw = adata

#去批次和运行PCA

sc.pp.scale(adata,max_value=10)

scaled_data = pd.DataFrame(adata.X)

# 更改列索引

scaled_data.columns =adata.var_names

# 更改行索引

scaled_data.index = adata.obs_names

scaled_data=scaled_data.T

sc.tl.pca(adata,zero_center=False,random_state=0)

sc.pp.neighbors(adata, n_neighbors=20, n_pcs=10,use_rep=”X_pca”,random_state=0)

sc.tl.leiden(adata,resolution=0.8,n_iterations=10)

# 使用UMAP可视化聚类

sc.tl.umap(adata,min_dist=0.3)

sc.pl.umap(adata, color=[‘leiden’])

sc.pl.spatial(adata, img_key=”hires”, color=[“leiden”])

现在,让我们运行 sctype 函数。这涉及几个步骤:在HGNC数据库中查询批准的基因符号,计算sctype分数,根据聚类信息汇总这些分数,并将结果叠加到低维空间(如UMAP或t-SNE)上。大家也可以使用自己自定义的标记数据集哦!在此示例中,我们将使用默认的 scTypeDB,其中包含各种健康组织的注释。

scRNAseqData=scaled_data

gs_list=gene_sets_prepare(path_to_db_file=”https://raw.githubusercontent.com/IanevskiAleksandr/sc-type/master/ScTypeDB_full.xlsx” ,cell_type=”Brain”)

es_max = sctype_score(scRNAseqData = scRNAseqData, scaled = True, gs = gs_list[‘gs_positive’], gs2 = gs_list[‘gs_negative’])

unique_clusters = adata.obs[‘leiden’].unique()

# 将该函数应用于每个唯一的亚群,并将结果组合到一个DataFrame中

cL_results = pd.concat([process_cluster(cluster,adata,es_max,”leiden”) for cluster in unique_clusters])

# 分组并根据分数选择最上面一行

sctype_scores = cL_results.groupby(‘cluster’).apply(lambda x: x.nlargest(1, ‘scores’)).reset_index(drop=True)

# 将低置信度群集设置为“未知”

sctype_scores.loc[sctype_scores[‘scores’] < sctype_scores[‘ncells’] / 4, ‘type’] = ‘Unknown’

adata.obs[‘sctype_classification’] = “”

#迭代唯一集群

for cluster in sctype_scores[‘cluster’].unique():

   #过滤当前集群的sctype_scores

    cl_type = sctype_scores[sctype_scores[‘cluster’] == cluster]

    # 获取当前集群的类型

    cl_type_value = cl_type[‘type’].iloc[0]

    # 更新pbmc中的’sctype_classification’。属于当前集群的细胞的对象

    adata.obs.loc[adata.obs[‘leiden’] == cluster, ‘sctype_classification’] = cl_type_value

#用sctype_classification作为标签绘制UMAP

sc.pl.umap(adata, color=’sctype_classification’, title=’UMAP with sctype_classification’)

sc.pl.spatial(adata, img_key=”hires”, color=[“sctype_classification”])

2.基于R语言的空间转录组细胞类型注释

首先,让我们加载一个公开可用的矢状小鼠脑切片,这些切片是使用 Visium v1 化学生成的。这可以通过 Seurat 软件包来完成。我们还将继续加载所有其他必需的包。

##加载R包及数据

lapply(c(“dplyr”, “Seurat”, “HGNChelper”, “openxlsx”), library, character.only = T)

#加载SeuratData来安装小鼠大脑数据集

# devtools:: install_github(” satijalab / secure -data “)

library(SeuratData)

#加载函数

source(“https://raw.githubusercontent.com/kris-nader/sp-type/main/sp-type.R”);

# 加载小鼠大脑演示数据

# InstallData(“stxBrain”)可能无法工作;一个快速的解决方案是使用以下方法:

options(timeout=600) # 将download.packages()的超时限制设置为600秒

InstallData(“stxBrain”)

brain <- LoadData(“stxBrain”, type = “anterior1”)

brain <- SCTransform(brain, assay = “Spatial”, verbose = FALSE)

brain <- RunPCA(brain, assay = “SCT”, verbose = FALSE)

brain <- FindNeighbors(brain, reduction = “pca”, dims = 1:30)

brain <- FindClusters(brain, verbose = FALSE)

brain <- RunUMAP(brain, reduction = “pca”, dims = 1:30)

细胞类型注释:要对样本进行注释,只需将包装器函数应用于Seurat对象即可。默认情况下,该函数使用 scTypeDB。这包括以下组织中细胞类型的阳性和阴性标记物:免疫系统、胰腺、肝脏、眼睛、肾脏、大脑、肺、肾上腺、心脏、肠道、肌肉、胎盘、脾脏、胃、胸腺。用户应在参数known_tissue_type中输入正确的组织

要对样本进行注释,只需将包装器函数应用于修拉特对象即可。默认情况下,该函数使用 scTypeDB。这包括以下组织中细胞类型的阳性和阴性标记物:免疫系统、胰腺、肝脏、眼睛、肾脏、大脑、肺、肾上腺、心脏、肠道、肌肉、胎盘、脾脏、胃、胸腺。用户应在参数known_tissue_type中输入正确的组织

brain <- run_sctype(brain, known_tissue_type=”Brain”, slot=”SCT”)

#可视化

# 在DimPlots上叠加注释

SpatialDimPlot(brain, group.by=”sctype_classification”)

对于尚未包含在 scTypeDB 中的组织,小伙伴们也不要慌哦!该团队也创建了一个函数,用于从参考 scRNA-seq 数据集中选择标记基因。作者正在对 scTypeDB 进行大量更新,以进一步提高其对当前未包含在数据库中的组织的可用性。

标记基因的仔细选择至关重要,因为它是scType的基础。最初的 scTypeDB 经过精心策划,以确保每个标记基因的特异性。

##简而言之,可以通过以下代码行生成标记集:

reference=readRDS(“./reference.RDS”)

Idents(reference)=reference$ground_truth

reference_marker_genes=FindAllMarkers(reference)

marker_genes=retrieve_markers(reference_marker_genes,”Breast”)

writexl::write_xlsx(marker_genes,”./default_settings_marker_gene_set.xlsx”)

小结

scType 的空间应用不需要计算费力的反卷积,也不需要大型单细胞参考图集。scType 能够从 ST 数据中超快速准确地鉴定丰富的细胞类型,尤其是在检测到足够大的一组基因时。此类检测的示例包括 Visium 和 Slide-seq,它们目前在高分辨率和细胞类型注释检测检测到的基因数量之间提供了最佳权衡。最后小云给大家介绍一个云工具!同学们如果觉得自己的代码水平一般,对于很多的参数不知道怎么改,可以体验一下我们的云生信小工具,只需输入数据,即可轻松生成所需图表,字体大小、标题等也可一键更改。感兴趣的小伙伴去云生信(http://www.biocloudservice.com/home.html)体验一下吧!需要代码的也可以联系我们呀。