答:
在 Scanpy 中进行差异基因分析和通路富集分析与在 Seurat 中的流程有些不同,但是可以达到相似的功能。下面我会给出一个示例代码,演示如何在 Python 中使用 Scanpy 进行差异基因分析和通路富集分析。
import scanpy as sc
from anndata import AnnData
import pandas as pd
from gprofiler import GProfiler
# 读取数据
adata = sc.read("your_expression_data.h5ad")
# 数据预处理
sc.pp.normalize_total(adata, target_sum=1e4)
sc.pp.log1p(adata)
# 进行差异基因分析
sc.tl.rank_genes_groups(adata, groupby='condition', method='wilcoxon')
# 提取差异基因
diff_genes_df = pd.DataFrame(adata.uns['rank_genes_groups']['names'])
# 提取通路富集所需的基因列表
gene_lists = diff_genes_df.iloc[:, :5] # 取前5个基因作为每个组的差异基因列表
# 进行通路富集分析
gp = GProfiler(return_dataframe=True)
enrichment_results = pd.concat([gp.gprofile(gene_list=gene_list, organism='hsapiens') for gene_list in gene_lists])
# 打印通路富集结果
print(enrichment_results)
在这个示例中,首先读取了表达数据,并进行了预处理,包括归一化和对数转换。然后使用 sc.tl.rank_genes_groups() 进行差异基因分析,结果存储在 adata.uns['rank_genes_groups'] 中。接着从差异基因结果中提取了差异基因列表。
在通路富集分析部分,使用了 GProfiler 库进行通路富集分析。我们使用了每个组的前5个差异基因作为输入进行通路富集分析,你可以根据需要调整这个数量。
最后,将通路富集的结果存储在 enrichment_results 变量中,你可以根据需要进行进一步的处理或分析。