Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >内容更新---单细胞空间差异基因的富集分析(python)

内容更新---单细胞空间差异基因的富集分析(python)

原创
作者头像
追风少年i
发布于 2025-05-22 08:46:44
发布于 2025-05-22 08:46:44
10600
代码可运行
举报
运行总次数:0
代码可运行

作者,Evil Genius

快51了,大家准备去哪里玩?

目前针对全python流程的搭建,不知道各个公司做的怎么样了,不过针对我们课程内容,需要准备完成。

R版本的GO、KEGG富集分析采用了clusterprofiler,来到我们python,采用的是gseapy模块。

我们更新一下这部分内容

前面的基础分析要做到,最好做一下细胞注释,保存出h5ad文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import scanpy as sc
import pandas as pd
import gseapy as gp
import numpy as np
import matplotlib.pyplot as plt
import os

# 创建保存结果的目录
os.makedirs('enrichment_results', exist_ok=True)
os.makedirs('enrichment_plots', exist_ok=True)

# 加载单细胞数据
adata = sc.read("test.h5ad")
####基础分析(需要调整)
sc.pp.filter_cells(adata, min_genes=200)
sc.pp.filter_genes(adata, min_cells=3)
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 = adata[:, adata.var.highly_variable]
sc.pp.regress_out(adata, ['total_counts', 'pct_counts_mt'])
sc.pp.scale(adata, max_value=10)

# 聚类分析
sc.tl.pca(adata, svd_solver='arpack')
sc.pp.neighbors(adata, n_pcs=30, n_neighbors=20)
sc.tl.leiden(adata, resolution=0.5)
sc.tl.umap(adata)

#最好细胞聚类与注释(细胞注释放在celltype列),这里以cluster为例。
sc.tl.rank_genes_groups(adata, groupby='cluster', method='wilcoxon')
# 获取所有cluster ID
clusters = adata.obs['leiden'].cat.categories.tolist()

# 设置富集分析的参数
gene_sets = ['GO_Biological_Process_2023', 'KEGG_2021_Human']
organism = 'human'  ####物种参数

# 循环处理每个cluster
for cluster in clusters:
    print(f"\nProcessing cluster {cluster}...")
    
    # 1. 获取差异基因
    deg_df = pd.DataFrame({
        'names': adata.uns['rank_genes_groups']['names'][cluster],
        'scores': adata.uns['rank_genes_groups']['scores'][cluster],
        'pvals': adata.uns['rank_genes_groups']['pvals'][cluster],
        'pvals_adj': adata.uns['rank_genes_groups']['pvals_adj'][cluster],
        'logfoldchanges': adata.uns['rank_genes_groups']['logfoldchanges'][cluster]
    })
    
    # 筛选显著差异基因 (调整p值<0.05且logFC>0.5)
    significant_genes = deg_df[(deg_df['pvals_adj'] < 0.05) & (abs(deg_df['logfoldchanges']) > 0.5)]
    
    if len(significant_genes) < 5:
        print(f"Cluster {cluster} has too few significant genes ({len(significant_genes)}), skipping...")
        continue
    
    # 取差异最显著的前100个基因
    gene_list = significant_genes.sort_values('scores', ascending=False)['names'].head(100).tolist()
    
    # 2. 执行富集分析
    try:
        # GOKEGG富集分析
        enr_results = gp.enrich(
            gene_list=gene_list,
            gene_sets=gene_sets,
            organism=organism,
            outdir=None,
            cutoff=0.05
        )
        
        # 3. 保存结果
        # 保存差异基因
        deg_filename = f'enrichment_results/cluster_{cluster}_differential_genes.csv'
        significant_genes.to_csv(deg_filename, index=False)
        
        # 保存富集结果
        if enr_results is not None:
            enr_filename = f'enrichment_results/cluster_{cluster}_enrichment.csv'
            enr_results.res2d.to_csv(enr_filename)
            
            # 4. 可视化
            # 绘制并保存前10个富集项
            plt.figure(figsize=(10, 6))
            top_terms = enr_results.res2d.head(10)
            top_terms.plot.barh(x='Term', y='Adjusted P-value', legend=False)
            plt.title(f'Cluster {cluster} - Top 10 Enriched Terms')
            plt.xlabel('-log10(Adjusted P-value)')
            plt.tight_layout()
            plot_filename = f'enrichment_plots/cluster_{cluster}_enrichment.png'
            plt.savefig(plot_filename)
            plt.close()
            
            print(f"Cluster {cluster} analysis completed. Results saved.")
        else:
            print(f"No enrichment results for cluster {cluster}")
            
    except Exception as e:
        print(f"Error processing cluster {cluster}: {str(e)}")

# 收集所有cluster的富集结果
all_enrichments = []

for cluster in clusters:
    try:
        filename = f'enrichment_results/cluster_{cluster}_enrichment.csv'
        if os.path.exists(filename):
            df = pd.read_csv(filename)
            df['Cluster'] = cluster
            all_enrichments.append(df)
    except:
        continue

if all_enrichments:
    # 合并所有结果
    combined_enr = pd.concat(all_enrichments)
    
    # 保存合并结果
    combined_enr.to_csv('enrichment_results/combined_enrichment_results.csv', index=False)
    
    # 找出在多个cluster中富集的通路
    common_pathways = combined_enr['Term'].value_counts().head(20)
    print("\nPathways enriched in multiple clusters:")
    print(common_pathways)
    
    # 可视化共同通路
    plt.figure(figsize=(10, 8))
    common_pathways.plot.barh()
    plt.title('Pathways Enriched in Multiple Clusters')
    plt.xlabel('Number of Clusters')
    plt.tight_layout()
    plt.savefig('enrichment_plots/common_pathways_across_clusters.png')
    plt.close()
else:
    print("No enrichment results to combine")

生活很好,有你更好

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
空间转录组niche通路富集
关于python版本的“hotspot”,参考文章空间转录组niche通路富集与空间“hotspot”
追风少年i
2024/04/07
2720
空间转录组niche通路富集
python 单细胞scanpy流程
这篇推文耗时甚久,主要是学习和跑通官网代码,其次是加了一些自己的细微调整,比如整理marker基因表格,还有可视化的调整等。
用户11414625
2024/12/20
4740
python 单细胞scanpy流程
基于python的scanpy模块的乳腺癌单细胞数据分析
这次我们来复现一篇单细胞的文章。这篇我们只来复现细胞图谱和拟时序分析 像细胞通讯,还有富集分析还是很简单的。大家可以继续走下去,然后我们来交流讨论! 这篇全篇基于python复现。
生信技能树
2021/10/12
4K1
单细胞Scanpy流程学习和整理(分析簇间差异基因/细胞注释/数据保存)
上一篇推文介绍了Scanpy流程中的10X数据读取/过滤/降维/聚类步骤,这次笔者将学习一下差异分析/细胞注释/数据保存。
凑齐六个字吧
2024/09/26
1.1K0
单细胞Scanpy流程学习和整理(分析簇间差异基因/细胞注释/数据保存)
python单细胞学习笔记-day6
https://cf.10xgenomics.com/samples/cell/pbmc3k/pbmc3k_filtered_gene_bc_matrices.tar.gz
生信技能树
2025/02/05
1320
python单细胞学习笔记-day6
scanpy教程:预处理与聚类
scanpy 是一个用于分析单细胞转录组(single cell rna sequencing)数据的python库,文章2018发表在Genome Biology(https://genomebiology.biomedcentral.com/)。其实它的许多分析思路借鉴了以seurat为中心的R语言单细胞转录数据分析生态的,scanpy以一己之力在python生态构建了单细胞转录组数据分析框架。我相信借助python的工业应用实力,其扩展性大于R语言分析工具。当然,选择走一遍scanpy的原因,不是因为它的强大,只是因为喜欢。
生信技能树jimmy
2020/04/08
15.1K2
scanpy教程:预处理与聚类
python单细胞学习笔记-day7
今天继续学习视频:python_day6剩余部分和python_day7视频 !一口气学完吧!
生信技能树
2025/03/17
1390
python单细胞学习笔记-day7
gseapy-python版的富集分析
富集分析分为超几何分布检验(ORA)和基因集富集分析(GSEA)。R语言有clusterprofiler包可以做富集,python是用gseapy。这个包功能强大,既支持两种富集分析,还支持基因集gmt的直接获取。
用户11414625
2024/12/20
3160
gseapy-python版的富集分析
单细胞分析的 Python 包 Scanpy(图文详解)
线粒体基因的转录本比单个转录物分子大,并且不太可能通过细胞膜逃逸。因此,检测出高比例的线粒体基因,表明细胞质量差(Islam et al. 2014; Ilicic et al. 2016)。
白墨石
2021/07/16
5.3K1
单细胞分析的 Python 包 Scanpy(图文详解)
[GSEAPY] 在Python里进行基因集富集分析
在生物信息学数据分析中,许多分析软件都是基于R开发的。这里介绍一个可以在Python 中进行基因富集分析的Python 软件 GSEAPY (Gene Set Enrichment Analysis in Python)
生信技能树
2023/02/27
1.8K0
[GSEAPY] 在Python里进行基因集富集分析
Scanpy进行单细胞分析及发育轨迹推断
最近看文献,发现越来越多的单细胞测序使用scanpy进行轨迹推断,可能因为scanpy可以在整体umap或者Tsne基础上绘制细胞发育路径,图片也更加美观,但是Scanpy是基于python开发的,下面整理下Scanpy官网给出的流程,按照官网流程跑一遍PBMC的数据。
生信技能树jimmy
2020/12/24
4.2K0
单细胞测序最好的教程(六):细胞类型注释
作者按 本教程将是本系列教程中最重要的一章,我们后续所有的单细胞分析,都要基于准确的细胞类型注释。本系列教程首发于“[单细胞最好的中文教程](single_cell_tutorial Readthedocs[1])”,未经授权许可,禁止转载。 全文字数|预计阅读时间: 4500|5min ——Starlitnightly
生信菜鸟团
2023/08/23
1.7K0
单细胞测序最好的教程(六):细胞类型注释
Visium HD 空间转录组分析探索之--基础分析
上节我们完成了Space Ranger分析,在输出结果binned_outputs文件夹内默认生成了2um, 8um, 16um bin的结果,这节我们使用10x文章中推荐的8x8um bin结果进行后续分析。为了演示,我们取P1_CRC样本数据进行后续分析(多样本合并一般都需要进行去批次处理,如果有需要,后续我们会继续分享多样本合并分析步骤)。
生信大杂烩
2025/05/29
1400
Visium HD 空间转录组分析探索之--基础分析
Scanpy 分析 3k PBMCs:寻找 marker 基因
本系列讲解 使用Scanpy分析单细胞(scRNA-seq)数据教程[1],持续更新,欢迎关注,转发!
数据科学工厂
2025/06/09
630
Scanpy 分析 3k PBMCs:寻找 marker 基因
单细胞测序最好的教程(十三):你真的做对过干预后细胞分析吗?
在前面的分析教程中,我们详细研究了“不同处理下细胞的差异表达基因”,“不同处理下细胞的组成变化”。实际上,我们还会关心一个很直接的问题,那就是不同处理下,究竟什么细胞受到的影响最大。可能你会说,观察差异表达基因的数量,或者观察哪一类细胞变多了,又或者是对差异表达基因进行通路富集分析去评价通路变化。这两个思路是都是间接去反映细胞的状态,但我们希望有一个直接的评价指标,去评估不同处理后细胞的影响大小。
生信技能树
2024/01/11
1.9K0
单细胞测序最好的教程(十三):你真的做对过干预后细胞分析吗?
课后补充----关于单细胞空间基础分析的代码部分
追风少年i
2024/08/02
2330
课后补充----关于单细胞空间基础分析的代码部分
scanpy教程:空间转录组数据分析
我们知道没有一个细胞是孤立的,而细胞之间的交流又不能打电话,所以相对位置对细胞的分化发育起着极其重要的作用。在生命的早期,单个细胞的命运是由其位置决定的。长期以来,由于技术的限制我们很难高通量地同时获得组织中的位置信息及其状态。2019年以来,这种情况借助高通量技术得到了商业化的解决。正如我们之前介绍过的:
生信技能树jimmy
2021/01/12
6.5K0
scanpy教程:空间转录组数据分析
单细胞测序数据分析|手动注释
之前我们分享过单细胞自动注释包GPTtypecell的使用方法。今天我们详细介绍一下细胞类型注释的内容,并且学习手动注释是如何实现的。
天意生信云
2025/01/22
3820
单细胞测序数据分析|手动注释
单细胞空间联合分析之SpatialScope
追风少年i
2024/04/15
1830
单细胞空间联合分析之SpatialScope
单细胞测序最好的教程(十):万能的Transformer与细胞注释
迁移注释实际上是自动注释的一类,与我们在3-4中介绍的自动注释不同,迁移注释需要我们有一个已经注释好的单细胞测序数据文件,而不是训练好的模型或者marker。我们需要使用这个已经注释好的单细胞测序数据文件来训练一个新的模型,例如Cell-Blast或者是Tosica等。
生信技能树jimmy
2023/09/09
1.7K0
单细胞测序最好的教程(十):万能的Transformer与细胞注释
推荐阅读
相关推荐
空间转录组niche通路富集
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验