3.基于python的scRNA-seq细胞类型注释-自动注释

对于经验不够丰富的人员,手动注释是不可行的。因此现在自动注释变得更容易让人接受。自动注释分为统计模型和深度学习模型。

参考:
[1] https://github.com/Starlitnightly/single_cell_tutorial
[2] https://github.com/theislab/single-cell-best-practices

基于统计模型的SCSA

SCSA是早期的一个细胞类型自动注释工具,可以根据簇特异性marker,查询数据库中每一种细胞类型的marker,选出吻合度最高的一类细胞,如果差异性不够大,被认为是Unknown细胞。

首先,加载数据:

import omicverse as ov
import scanpy as sc
ov.ov_plot_set()

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

聚类,这里把resolution设置为2,用于识别更多细胞小类。聚类结果如下:
fig1
SCSA有两个数据库可以选择:CellMarker和panglaodb。在omicverse中,SCSA具有以下参数:

  • foldchange:每个簇相对于别的簇的差异倍数,一般设置为1.5,值越大,使用的marker越少
  • pvalue:与foldchange对应,在计算差异倍数的时候会进行统计学差异显著性分析,一般为0.01
  • celltype:该参数包括了normal和cancer两个参数,当设置为cancer,会注释出来自cancersea数据库的12种肿瘤细胞亚型
  • target:要使用的数据库,目前SCSA支持CellMarker和panglaodb,其实也包括cancersea
  • tissue:可以使用scsa.get_model_tissue()列出所有支持的组织,默认是使用全部tissue
  • model_path:设置数据库的本地存放路径

使用CellMarker数据库

初始化方式如下:

scsa=ov.single.pySCSA(adata=adata,
                      foldchange=1.5,
                      pvalue=0.01,
                      celltype='normal',
                      target='cellmarker',
                      tissue='All',
                      model_path='./database/pySCSA_2023_v2_plus.db'                    
)

正式的注释环节涉及三个参数:

  • clustertype:注释依据的簇名,存放在adata.obs
  • cluster:需要注释的簇,默认是all
  • rank_rep: 是否需要重新计算差异表达基因,如果在注释之前已经运算了sc.tl.rank_genes_groups,我们可以设置成False

我们使用SCSA注释细胞,并打印簇的类型:

adata.uns['log1p']['base']=10
res=scsa.cell_anno(clustertype='leiden_res1',
               cluster='all',rank_rep=True)

# 自动打印注释结果
scsa.cell_anno_print()

# 注释结果添加到adata
scsa.cell_auto_anno(adata,clustertype='leiden_res1',
                    key='scsa_celltype_cellmarker')

Cluster:0 Cell_type:Natural killer cell|T cell Z-score:13.328|9.099
Nice:Cluster:1 Cell_type:B cell Z-score:17.324
Cluster:2 Cell_type:Natural killer cell|T cell Z-score:12.711|7.851
Nice:Cluster:3 Cell_type:B cell Z-score:12.564
Nice:Cluster:4 Cell_type:Natural killer cell Z-score:11.75
Nice:Cluster:5 Cell_type:B cell Z-score:17.695
Nice:Cluster:6 Cell_type:Natural killer cell Z-score:14.859
Nice:Cluster:7 Cell_type:T cell Z-score:12.816
Cluster:8 Cell_type:T cell|Naive CD4+ T cell Z-score:5.584|3.975
Cluster:9 Cell_type:T cell|Natural killer cell Z-score:8.559|5.724
Nice:Cluster:10 Cell_type:Monocyte Z-score:14.734
Nice:Cluster:11 Cell_type:B cell Z-score:15.721
Cluster:12 Cell_type:Monocyte|Natural killer T (NKT) cell Z-score:14.965|12.388
Cluster:13 Cell_type:T cell|Natural killer cell Z-score:10.451|8.418
Nice:Cluster:14 Cell_type:Natural killer T (NKT) cell Z-score:16.389
Cluster:15 Cell_type:Natural killer T (NKT) cell|T cell Z-score:13.173|11.666
Cluster:16 Cell_type:Natural killer cell|T cell Z-score:7.567|7.555
Cluster:17 Cell_type:Natural killer T (NKT) cell|B cell Z-score:16.351|14.131
Nice:Cluster:18 Cell_type:Red blood cell (erythrocyte) Z-score:12.859
Nice:Cl

### 单细胞RNA测序数据分析的Python实现 #### 数据预处理 为了有效处理和分析单细胞RNA测序(scRNA-seq)数据,在Python中通常会使用`scanpy`库,这是一个专门用于单细胞基因表达数据分析的强大工具。下面是一个典型的数据预处理过程: ```python import scanpy as sc import pandas as pd # 加载AnnData对象中的scRNA-seq数据集 adata = sc.read_10x_h5(&#39;filtered_gene_bc_matrices.h5&#39;) # 进行基本的质量控制过滤操作 sc.pp.filter_cells(adata, min_genes=200) sc.pp.filter_genes(adata, min_cells=3) # 计算质量度量指标并可视化QC结果 adata.var[&#39;mt&#39;] = adata.var_names.str.startswith(&#39;MT-&#39;) sc.pp.calculate_qc_metrics(adata, qc_vars=[&#39;mt&#39;], percent_top=None, log1p=False, inplace=True) sc.pl.violin(adata, [&#39;n_genes_by_counts&#39;, &#39;total_counts&#39;, &#39;pct_counts_mt&#39;], jitter=0.4, multi_panel=True) # 基于总计数和线粒体比例去除低质量单元格 adata = adata[adata.obs.pct_counts_mt < 10, :] ``` 上述代码展示了加载数据、执行初步筛选以及计算质量评估参数的过程[^1]。 #### 细胞注释自动化 对于自动化的细胞类型标注任务,可以依赖预先训练好的模型或是通过降维后的特征空间来进行聚类分类。这里展示了一个简单的K-means聚类例子作为概念证明: ```python from sklearn.cluster import KMeans # 对原始矩阵标准化并对高变基因进行PCA变换 sc.pp.normalize_total(adata, target_sum=1e4) sc.pp.log1p(adata) sc.pp.highly_variable_genes(adata, min_mean=0.0125, max_mean=3, min_disp=0.5) adata.raw = adata adata = adata[:, adata.var.highly_variable] sc.tl.pca(adata, svd_solver=&#39;arpack&#39;) # 应用kmeans算法完成无监督学习下的初始分群 km = KMeans(n_clusters=8).fit(adata.obsm[&#39;X_pca&#39;]) adata.obs[&#39;cell_type_kmeans&#39;] = km.labels_.astype(str) ``` 此部分实现了对细胞类型的初步划分,并将其存储到观测属性表内以便后续访问。 #### 差异表达分析 考虑到scRNA-seq特有的零膨胀现象(`dropout`),采用伪批量(pseudo-bulk)策略能够提高统计检验效能。以下是基于Scanpy框架下的一种实践方式: ```python def pseudo_bulk_aggregation(groupby_col): """Aggregate single-cell data into pseudo-bulks.""" agg_df = (adata.to_df() .groupby([groupby_col]) .mean()) return ann.AnnData(X=agg_df.values, obs=pd.DataFrame(index=agg_df.index), var=adata.var.copy()) pb_data = pseudo_bulk_aggregation(&#39;cell_type_kmeans&#39;) sc.tl.rank_genes_groups(pb_data, groupby=&#39;cell_type_kmeans&#39;, method=&#39;wilcoxon&#39;) results = pb_data.uns[&#39;rank_genes_groups&#39;] markers = [results[&#39;names&#39;][i][0] for i in range(len(results[&#39;names&#39;]))] print(f&#39;Top marker genes per cluster:\n{markers}&#39;) ``` 这段脚本定义了一种函数用来创建伪批量样本集合,并运用Wilcoxon秩和测试找出各簇间显著差异表达的标记物[^2]。 #### 动态变化建模 最后介绍一种描绘转录组随时间演变趋势的技术——RNA速率估计及其延伸应用。借助`scvelo`包可轻松获取这一信息: ```python import scvelo as scv scv.pp.moments(adata, n_neighbors=30, use_rep="X_pca") scv.tl.velocity(adata, mode=&#39;stochastic&#39;) scv.tl.velocity_graph(adata) # 可视化动态路径预测图谱 scv.pl.velocity_embedding_stream(adata, basis=&#39;umap&#39;) ``` 以上命令序列完成了从准备输入至最终绘图整个流程的操作指南[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值