3.基于python的scRNA-seq细胞类型注释-自动注释(从参考到查询)

从参考数据集到查询数据集的注释又被称为迁移注释,其实属于自动注释,只不过这里的注释更具有领域特性,因为我们想在指定的参考数据集上训练深度学习模型,然后迁移到查询数据集,这种AI注释方式适合用于自动化注释特定疾病。目前TOSICA是迁移注释的代表方法。

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

加载参考数据集

参考数据需要与查询数据保持一致的预处理方法。归一化一般受到sc.pp.normalize_totaltarget_sum参数的影响,在scanpy中,默认值是自适应的,这是导致注释出错的一个原因,因此,我们固定设置target_sum参数为1e4

在下面的案例中,我们使用omicverse来预处理原始counts,target_sum参数设置为50*1e4

高质量的参考数据集是必要的,这里介绍了Cell Blast的参考数据集,Cell Blast收集了100多个高质量的单细胞带注释数据集,下面我们使用Zheng数据集来注释前面的骨髓数据集。Zheng作为参考数据集:

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

ref_adata = ov.utils.read('./data/Zheng.h5ad')
print(ref_adata)

TOSICA要求参考数据集的细胞数量不能少于30,000个,否则模型训练效果不佳。如果参考数据集的规模为100,000,随机选择30,000个细胞作为训练集也足够保持TOSICA的性能。

因此,我们在Zheng中随机选取30,000个细胞,使用random.sample进行无放回采样:

import random
cell_idx=list(random.sample(ref_adata.obs.index.tolist(),30000))
ref_adata=ref_adata[cell_idx]
print(ref_adata)

注释的细胞类型在cell_ontology_class中查看:

ref_adata.obs['cell_ontology_class'].cat.categories

检查归一化程度:

ref_adata.X.max() # 173.0

这是一个较大的整数,表明是原始counts,因此,我们对它进行预处理:

ref_adata = ov.pp.preprocess(ref_adata, mode='shiftlog|pearson', n_HVGs=
### 单细胞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、付费专栏及课程。

余额充值