前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[GSEAPY] 在Python里进行基因集富集分析

[GSEAPY] 在Python里进行基因集富集分析

作者头像
生信技能树
发布于 2023-02-27 13:47:21
发布于 2023-02-27 13:47:21
1.8K00
代码可运行
举报
文章被收录于专栏:生信技能树生信技能树
运行总次数:0
代码可运行

前言

在生物信息学数据分析中,许多分析软件都是基于R开发的。这里介绍一个可以在Python 中进行基因富集分析的Python 软件 GSEAPY (Gene Set Enrichment Analysis in Python)

GSEApy is a python wrapper for GESA and Enrichr. It’s used for convenient GO enrichments and produce publication-quality figures from python.

GSEAPY

安装

可以通过condapip 进行安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# if you have conda
$ conda install -c conda-forge -c bioconda gseapy

# or use pip to install the latest release
$ pip install gseapy

pip 安装要是遇到这样的报错

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    data = self.read(amt=amt, decode_content=decode_content)
  File "/opt/conda/lib/python3.9/site-packages/pip/_vendor/urllib3/response.py", line 541, in read
    raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
  File "/opt/conda/lib/python3.9/contextlib.py", line 135, in __exit__
    self.gen.throw(type, value, traceback)
  File "/opt/conda/lib/python3.9/site-packages/pip/_vendor/urllib3/response.py", line 443, in _error_catcher
    raise ReadTimeoutError(self._pool, None, "Read timed out.")
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.

可以使用清华镜像,进行安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pip install gseapy -i https://pypi.tuna.tsinghua.edu.cn/simple

富集分析

背景信息

  • gene set, 指一组具有相同特征的基因。如一个GO term 对应的多个基因,一个kegg pathway对应的多个基因
  • gene set library,多个相关的gene set 。如所有GO term组成一个gene set library.
  • enrichment analysis, gene set library 作为注释基因集合,已知的先验知识。对于一个输入基因集合,富集分析通过计算分析哪些注释gene set 显著存在于输入基因集合中。例如:GO 富集分析中,查看哪些GO terms 显著存在于输入基因列表中。

有多种基因集富集分析策略,我们常说的GO/KEGG 富集分析 应该大多数指over represent analysis(ORA)。还有个常用富集方法叫GSEA(Gene Set Enrichment Analysis), 翻译过来也是基因集富集分析。下文GSEA,特指这种策略。

ORA

测试数据,可以从GSEApy/tests/data下载。富集的函数是enricher.

先展示一下,富集的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gene_list="./gene_list.txt"
gene_sets='KEGG_2016'
gene_sets=['KEGG_2016','KEGG_2013']

enr = gp.enrichr(gene_list=gene_list,
                 gene_sets=gene_sets,
                 organism='Human', # don't forget to set organism to the one you desired! e.g. Yeast
                 description='kegg',
                 outdir='test/enrichr',
                 # no_plot=True,
                 cutoff=0.5 # test dataset, use lower value from range(0,1)
                )

运行完后,'test/enrichr'目录下存放着会有富集的图片以及文本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(base) jovyan@95c3096ad9ae:~$ ll test/enrichr
-rw-r--r-- 1 jovyan users  22003 Dec 26 14:59 KEGG_2013.Human.enrichr.reports.pdf
-rw-r--r-- 1 jovyan users  22130 Dec 26 14:59 KEGG_2013.Human.enrichr.reports.txt
-rw-r--r-- 1 jovyan users  25722 Dec 26 14:59 KEGG_2016.Human.enrichr.reports.pdf
-rw-r--r-- 1 jovyan users  48458 Dec 26 14:59 KEGG_2016.Human.enrichr.reports.txt

查看KEGG_2016.Human.enrichr.reports.pdf,图片只显示了前10个,这是由参数top_term=10,所决定的

同时,富集结果也保存在enr.results里,如查看前五个数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
enr.results.head(5)

输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Gene_set Term Overlap P-value Adjusted P-value Old P-value Old Adjusted P-value Odds Ratio Combined Score Genes
0 KEGG_2016 Osteoclast differentiation Homo sapiens hsa04380 28/132 3.104504e-13 7.885440e-11 0 0 6.659625 191.802220 LILRA6;ITGB3;LILRA2;LILRA5;PPP3R1;FCGR3B;SIRPA...
1 KEGG_2016 Tuberculosis Homo sapiens hsa05152 31/178 4.288559e-12 5.446470e-10 0 0 5.224941 136.763196 RAB5B;ITGB2;PPP3R1;HLA-DMA;FCGR3B;HLA-DMB;CASP...
2 KEGG_2016 Phagosome Homo sapiens hsa04145 28/154 1.614009e-11 1.366528e-09 0 0 5.490501 136.437381 ATP6V1A;RAB5B;ITGB5;ITGB3;ITGB2;HLA-DMA;FCGR3B...
3 KEGG_2016 Rheumatoid arthritis Homo sapiens hsa05323 19/90 2.197884e-09 1.395656e-07 0 0 6.554453 130.668081 ATP6V1A;ATP6V1G1;ATP6V0B;TGFB1;ITGB2;FOS;ITGAL...
4 KEGG_2016 Leishmaniasis Homo sapiens hsa05140 17/73 3.132614e-09 1.591368e-07 0 0 7.422186 145.336773 TGFB1;IFNGR1;PRKCB;IFNGR2;ITGB2;FOS;MAPK14;HLA...

查看enricher函数帮助文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
help(gp.enrichr)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Help on function enrichr in module gseapy.enrichr:

enrichr(gene_list, gene_sets, organism='human', 
            description='', outdir='Enrichr', 
            background='hsapiens_gene_ensembl', 
            cutoff=0.05, format='pdf', figsize=(8, 6), 
            top_term=10, no_plot=False, verbose=False)
......
......

由帮助文档可知enricher函数所需参数如下:

  • gene_list, 所需查询gene_list,可以是一个列表,也可为文件(一列,每行一个基因)
  • gene_sets, gene set library。该参数,有两种形式:
    • 可以设置enricher自带的gene set library 详细列表可见https://maayanlab.cloud/Enrichr/#libraries。可单个'KEGG_2016',或多个['KEGG_2016','KEGG_2013']
    • 一种自定义gene set library。可以是gmt文件,或者输入一个字典
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gene_sets={'term_A':['gene1', 'gene2',...], 
           'term_B':['gene2', 'gene4',...], ...}
  • organism,支持(human, mouse, yeast, fly, fish, worm), 自定义gene_set 则无影响。
  • description,工作运行描述
  • outdir;输出目录
  • background:背景基因
    • 可以是一个背景基因列表
    • 或者一个背景基因数目
    • 又或者Biomart dataset name.
  • cutoff;pvalue阈值
  • format, 输出图片格式('pdf','png','eps'...)
  • figsize, 图片大小, (width,height). Default: (6.5,6).
  • no_plot:是否不做图

绘图

gseapy 也提供了绘图函数进行绘制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# simple plotting function
from gseapy.plot import barplot, dotplot

# to save your figure, make sure that ``ofname`` is not None
barplot(enr.res2d, title='KEGG_2013',)

image.png

enr.res2d 存储着最近一次查询富集的结果, 上面的例子中, enr.res2d储存的是'KEGG_2013']富集结果,因为它是list最后一个.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gene_sets=['KEGG_2016','KEGG_2013']

enr.results保存着所有的富集结果,所以我么也可以挑选数据可视化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
barplot(enr.results.loc[enr.results["Gene_set"] == "KEGG_2016",], title='KEGG_2016',)

image.png

气泡图也是有的;

image.png

GSEA

Prerank

Prerank 用于已经排好序的数据来做GSEA。如,根据logFC 从大到小排好序后,去做GSEA。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# gsea_data.gsea_data.rnk 是已经排好序的数据
rnk = pd.read_csv("./gsea_data.gsea_data.rnk", header=None, sep="\t")
rnk.head()

0

1

CTLA2B

2.502482

SCARA3

2.095578

LOC100044683

1.116398

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pre_res = gp.prerank(rnk=rnk, gene_sets='KEGG_2016',
                     processes=4,
                     outdir='test/prerank_report_kegg', format='png', seed=6)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pre_res.res2d.head()

image.png

绘图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from gseapy.plot import gseaplot

terms = pre_res.res2d.index
# to save your figure, make sure that ofname is not None
gseaplot(rank_metric=pre_res.ranking, term=terms[0], **pre_res.results[terms[0]])

image.png

未完待续...

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
(奇怪的问题)使用get展示信息,post却不能展示信息
发现一个问题,使用get开源获取信息,并且开源展示出来,但是使用post信息开源获取,但是却展示不出来?
botkenni
2022/01/10
3700
thinkphp3.2.3代码审计
源码地址:http://www.thinkphp.cn/download/610.html
F12sec
2022/12/30
1.2K0
thinkphp3.2.3代码审计
ztree实现左边动态生成树,右边为具体信息功能
页面原型图: 图片.png 功能需求:点击左边树上的子节点,像后台发送请求,将请求到的信息展示在右边的表单里面 前端代码实现: 引入css文档: <link rel="stylesheet" type
王小婷
2018/06/04
3.4K0
Stimulsoft.Report.net报表简单实用
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Data; 8 using Stimulsoft.Report; 9 using Stimulsoft.Report.Components;
冰封一夏
2019/09/11
9990
完整代码
myHeader组件HTML页面 <div class="header"> <h3>欢迎来到购物车!</h3> </div> myHeader组件css页面 .header{ width: 100%; height: 10%; background-color: #b6ccc8; display: flex; align-items: center; justify-content: center; } 2.app组件HTML页面 <app-my-header></app-my-
生南星
2019/07/22
8030
vue表单案例练习:vue表单创建一行数据及删除数据的实现与理解
数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值==
刘大猫
2024/10/29
1940
jq---方法总结
1. 什么是jQuery 在使用jQuery之前,我们必须先了解什么是jQuery,它能够干什么(不然我们为啥要用它)。 jQuery是一个非常流行的快速、小巧、功能强大的开源JavaScript库。就像官方所宣称的那样——"Write less,do more",它使得我们常用的HTML文档遍历、DOM操作、事件处理、动画效果、Ajax、工具方法等功能代码的实现变得非常简单。更重要的是,它还为我们做了跨浏览器的兼容。绝大多数时候,妈妈再也不用担心我的JS兼容问题了(由于浏览器bug等因素,jQuery也无
小蔚
2019/09/11
3.2K0
ThinkPHP 3.2.3 简单后台模块开发(二)RBAC
RBAC(Role-Based Access Controll)基于角色的访问控制
botkenni
2022/01/10
2.1K0
ThinkPHP 3.2.3 简单后台模块开发(二)RBAC
Thinkphp
thinkphp:mvc模式 1,thinkphp的安装配置 条件 PHP>=5.4.0 PDO MbString CURL PHP Externsion Mysql Apache或Nginx 安装: composer composer config -g repo.packagist composer https://packagist.phpcomposer.com composer create-project --prefer-dist topthink/think think_co
Dean0731
2020/05/11
2.3K0
前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器
一、条件渲染 1.1、v-if 在字符串模板中,如 Handlebars ,我们得像这样写一个条件块: <!-- Handlebars 模板 --> {{#if ok}} <h1>Yes</h1> {{/if}} 在 Vue.js ,我们使用 v-if 指令实现同样的功能: <h1 v-if="ok">Yes</h1> 也可以用 v-else 添加一个 “else” 块: <h1 v-if="ok">Yes</h1> <h1 v-else>No</h1> 1.1.1、template v-if 因为 v
张果
2018/03/30
3.3K0
前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器
【愚公系列】2022年01月 Django商城项目16-用户中心-地址管理之省市三联动功能实现
表结构为: id:主键 name:省市名称 parent_id:自关联主键id
愚公搬代码
2022/01/24
3340
【愚公系列】2022年01月 Django商城项目16-用户中心-地址管理之省市三联动功能实现
Jquery ajax调用后台aspx后台文件方法(不是ashx)
在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下。   (1)通过aspx.cs的静态方法+WebMethod进行处理    简单的介绍下WebMethod方法的用法    1.修饰符主要用public static修饰    2.方法前面加上[WebMethod]属性表明这是WebMethod方法    3.前台html页面(Client端)访问时要使用post方法,和后台.cs文件进行数据交互,否则会返回整个html页面。    4
郑小超.
2018/01/24
7.4K0
select2和模态框结合,去除覆盖不显示问题
<?php use common\models\Order; use imxiangli\select2\Select2Widget; use yii\helpers\Html; use yii\h
botkenni
2022/01/10
1K0
vue课程大全
var app=new Vue({el:"#app",data:{msg:"hello vue!"}})
李才哥
2021/02/20
1.7K0
vue课程大全
创建联系表单页面并通过 Ajax 提交表单请求数据
回顾下上篇教程更新主题后的博客系统,可以看到顶部右上角导航菜单有两个链接,分别指向关于页面和联系表单页面:
学院君
2020/09/11
2.5K0
实战SSM_O2O商铺_31【商品】商品添加之View层的实现
在完成了 实战SSM_O2O商铺_30【商品】商品添加之Controller层的实现之后,我们继续来实现View层的代码部分。
小小工匠
2021/08/17
7890
【AngularJS】 # AngularJS入门
ng-app 指令定义一个 AngularJS 应用程序。 若不声明,将直接显示表达式。
全栈程序员站长
2022/09/15
24.3K0
【AngularJS】 # AngularJS入门
Frontend 入门笔记
仔细想了想,还是不要待在 comfort zone 里,干脆直接学 js 全栈,也可以提高 js 的熟练度。
Clouder0
2022/09/23
5680
Frontend 入门笔记
23 个初级 Vue.js 面试题[每日前端夜话0xF0]
使用渐进式框架的代价很小,从而使现有项目(使用其他技术构建的项目)更容易采用并迁移到新框架。Vue.js 是一个渐进式框架,因为你可以逐步将其引入现有应用,而不必从头开始重写整个程序。
疯狂的技术宅
2019/12/11
5K0
java从入门到精通二十五(vue和element 对项目的改进)
我们之前获取前端表单数据的时候,我们需要进行大量的操作。当前我只是进行了浅显的一些认识。
兰舟千帆
2022/07/16
9190
java从入门到精通二十五(vue和element 对项目的改进)
推荐阅读
相关推荐
(奇怪的问题)使用get展示信息,post却不能展示信息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档