news 2026/8/4 7:03:23

生信云平台再升级!Galaxy 新增工具 PyDESeq2,RNA-seq 差异分析一键搞定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
生信云平台再升级!Galaxy 新增工具 PyDESeq2,RNA-seq 差异分析一键搞定

差异基因分析是转录组下游分析的第一步,我们前面写了目前最流行的 3 个差异分析软件的介绍:

差异表达分析三剑客:DESeq2、edgeR、limma 到底该怎么选?

目前可以说,DESeq2 是差异分析的金标准,因此我之前专门写了一篇文章详细介绍了这个软件在平台的用法:

任何新手小白都可以使用这个差异基因分析神器:DESeq2 | 零代码,无需编程

不过,目前平台 R 语言版本的 DESeq2 工具的使用个人觉得还是略显复杂。它主要以每一个样本的原始计数文件作为输入,这有一个问题,就是当我们要分析的样本很多时,这就有些不方便了。

转录组上游分析完成后,通常会将所有样本的表达量数据合并到一个表格,得到表达量矩阵。那么,为什么不直接以这个表达量矩阵为输入,再指定要比较的分组情况,事情不更简单吗?

鉴于平台已经有 R 版本的 DESeq2 了,并且目前它也运行良好,似乎没必要对其进行升级。我们干脆新增一个 Python 版的 DESeq2 - PyDESeq2,这样平台 R 和 Python 版本的差异分析工具都有了。

进入网站

https://usegalaxy.cn

测试数据

测试数据位置:库 / Libraryies / RNA-seq / pasilla,找到两个文件,并将它们添加到历史记录中:

  • • pasilla_gene_counts.tsv,表达量矩阵

  • • pasilla_sample_annotation.csv,样本注释信息


找到工具

在平台搜索:pydeseq2,找到工具:


开始分析

需要输入两类信息:

  • • 表达量矩阵:行为基因,列为样本,Tab 键隔开。普通转录组表达量矩阵默认就是这个格式。

  • • 实验设计信息:可以手工输入,或者通过元数据表输入。

简单模式 - 手动输入样本名

这种模式针对样本量不多的情况,直接将样本名称粘贴到对应的文本框中就好了,名称之间可以用空格、制表符或换行进行分隔。

当样本比较多、设计比较复杂时,可以使用下面介绍的高级模式。

高级模式 - 使用元数据表

  • 元数据表 (Metadata File):这种模式你先得制作一个表,将样本的相关信息填写在其中,记得保存为 csv 文件(英文逗号分隔)。

sample,condition,type treated1,treated,single treated2,treated,paired treated3,treated,paired untreated1,untreated,single untreated2,untreated,single untreated3,untreated,paired untreated4,untreated,paired
  • 设计公式 (Design Formula):condition

  • 比较因子 (Contrast Factor):condition

  • 测试组水平 (Test Level):treated

  • 基准组水平 (Base Level) :untreated

上述演示了单因素设计的情形,如果是多因素设计,可以这样书写设计公式:

注意你最关心的因子要写在最后,比如最关注 condition,就将它放到最后。

不管是单因素设计,还是多因素设计,都需要指明最终用于计算 foldChange 以及 pvalue 等值的分组的情况。简单来说,你希望计算哪一列中,哪两个组的比较情况。

比如要计算 condition 列中:

treated vs untreated

这样最终算出来的变化倍数(foldChange)是 treated 组的均值,除以 untreated 组的均值。

好了,是不是超简单?

结果解读


差异表达结果表 (CSV)包含详细统计结果和标准化表达量的表格。关键列说明如下:

  • baseMean: 所有样本的标准化平均表达量。

  • baseMean(Group): 某一组 (测试组或基准组) 的标准化平均表达量。

  • FoldChange: 线性表达倍数变化 (计算公式为2 ^ log2FoldChange)。

  • log2FoldChange: Log2 转换后的差异倍数。注意: 该值已经过LFC Shrinkage (收缩校正)处理,能够更准确地估算低表达量或高离散度基因的变化,更适合用于排序和绘图。

  • pvalue: Wald Test 统计检验的 P 值。

  • padj: 经 Benjamini-Hochberg 方法校正后的 P 值 (即 FDR)。

  • [样本名]: 表格的最后部分包含每个样本经过 DESeq2 标准化后的具体表达量。

与 R 语言比较

单因素设计 - Galaxy 平台
gene_id baseMean log2FoldChange lfcSE pvalue padj FBgn0039155 730.6 -4.6 0.17 4.3e-163 0 FBgn0025111 1501.4 2.9 0.13 5.8e-113 0 FBgn0029167 3706.1 -2.2 0.1 2.2e-108 0 FBgn0003360 4343 -3.2 0.15 1.5e-106 0 FBgn0035085 638.2 -2.5 0.14 1.3e-76 0 FBgn0039827 261.9 -4.1 0.23 3.4e-72 0 FBgn0034736 225.9 -3.5 0.21 1.1e-60 0 FBgn0029896 489.9 -2.4 0.15 5.8e-58 0 FBgn0000071 342.2 2.7 0.18 4.1e-49 0
单因素设计 - R 语言
library("DESeq2") pasCts <- system.file("extdata", "pasilla_gene_counts.tsv.gz", package="DESeq2", mustWork=TRUE) pasAnno <- system.file("extdata", "pasilla_sample_annotation.csv", package="DESeq2", mustWork=TRUE) cts <- as.matrix(read.csv(pasCts,sep="\t",row.names="gene_id")) coldata <- read.csv(pasAnno, row.names=1) coldata <- coldata[,c("condition","type")] coldata$condition <- factor(coldata$condition) coldata$type <- factor(coldata$type) rownames(coldata) <- sub("fb", "", rownames(coldata)) all(rownames(coldata) %in% colnames(cts)) cts <- cts[, rownames(coldata)] all(rownames(coldata) == colnames(cts)) dds <- DESeqDataSetFromMatrix(countData = cts, colData = coldata, design = ~ condition) smallestGroupSize <- 3 keep <- rowSums(counts(dds) >= 10) >= smallestGroupSize dds <- dds[keep,] # ------------------------------------------------------------------------- # 单因素设计 # ------------------------------------------------------------------------- dds$condition <- factor(dds$condition, levels = c("untreated","treated")) dds$condition dds$condition <- droplevels(dds$condition) dds <- DESeq(dds) res <- results(dds) resLFC <- lfcShrink(dds, coef="condition_treated_vs_untreated", type="apeglm") results = resLFC[order(resLFC$padj), ] results$baseMean = round(results$baseMean, 1) results$log2FoldChange = round(results$log2FoldChange, 1) results$lfcSE = round(results$lfcSE, 2) results$pvalue = formatC(results$pvalue, format = "e", digits = 1) results$padj = round(results$padj, 4) results write.csv(results, 'pasilla_deg_results.tsv')

可以看到,不说分毫不差吧,也几乎完全一样。

多因素设计 - Galaxy 平台
gene_id baseMean log2FoldChange lfcSE pvalue padj FBgn0003360 4343 -3.1 0.11 1.4e-175 0 FBgn0026562 43909.3 -2.5 0.09 1.6e-171 0 FBgn0039155 730.6 -4.6 0.17 3.6e-170 0 FBgn0025111 1501.4 2.8 0.1 4.1e-166 0 FBgn0029167 3706.1 -2.2 0.1 9.2e-114 0 FBgn0035085 638.2 -2.6 0.13 3.8e-91 0 FBgn0039827 261.9 -4.2 0.21 4.6e-86 0 FBgn0034736 225.9 -3.5 0.2 3.2e-69 0 FBgn0000071 342.2 2.6 0.15 8.6e-64 0
多因素设计 - R 语言
# ------------------------------------------------------------------------- # 多因素设计 # ------------------------------------------------------------------------- ddsMF <- dds ddsMF levels(ddsMF$type) levels(ddsMF$type) <- sub("-.*", "", levels(ddsMF$type)) levels(ddsMF$type) design(ddsMF) <- formula(~ type + condition) ddsMF <- DESeq(ddsMF) resMF <- results(ddsMF) results = resMF[order(resMF$padj), ] results$baseMean = round(results$baseMean, 1) results$log2FoldChange = round(results$log2FoldChange, 1) results$lfcSE = round(results$lfcSE, 2) results$pvalue = formatC(results$pvalue, format = "e", digits = 1) results$padj = round(results$padj, 4) results write.csv(results, 'pasilla_deg_results_multi-factor_designs.tsv')

社群交流

如果你有使用问题,就到社群交流吧。


推荐阅读

中国银河生信云平台(UseGalaxy.cn)致力于零代码生信分析。平台拥有海量计算资源、3000 多个生信工具和数十条生信流程,并且为用户提供 200G 免费存储空间。进群交流请先加 usegalaxy 为好友。我们还为进阶用户提供高质量培训课程:

RNA-seq数据分析实战 | 2026年第1期,开启你的生信学习之旅

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/3 11:15:03

AI大模型应用谱系与流行度排名研究

人工智能大模型技术自 2017 年 Transformer 架构诞生以来&#xff0c;经历了从技术突破到商业爆发的快速演进。当前&#xff0c;AI 大模型已成为推动各行业数字化转型的核心引擎&#xff0c;其应用涵盖了从基础的语言理解到复杂的多模态生成等广泛领域。本研究旨在梳理 AI 大模…

作者头像 李华
网站建设 2026/8/3 14:28:22

Kotaemon支持多种Embedding模型切换,灵活性拉满

Kotaemon支持多种Embedding模型切换&#xff0c;灵活性拉满 在构建智能问答系统时&#xff0c;我们常常面临一个现实问题&#xff1a;同一个Embedding模型&#xff0c;很难同时满足高精度、低成本、多语言和低延迟的全部需求。比如&#xff0c;在金融场景中&#xff0c;用户提问…

作者头像 李华
网站建设 2026/8/1 23:57:36

EmotiVoice在语音日记应用中的个性化表达实现

EmotiVoice在语音日记应用中的个性化表达实现 在一个人越来越依赖数字方式记录情绪的时代&#xff0c;写日记早已不再是纸笔之间的私密对话。从早年的博客到如今的语音备忘录&#xff0c;人们渴望的不仅是“被听见”&#xff0c;更是“被理解”。然而&#xff0c;当AI朗读你的文…

作者头像 李华
网站建设 2026/8/2 19:01:45

AOP(面向切面编程)在 JS 中:如何无侵入地通过装饰器添加日志与埋点

AOP(面向切面编程)在 JavaScript 中:如何无侵入地通过装饰器添加日志与埋点 各位开发者朋友,大家好!今天我们来深入探讨一个非常实用又优雅的技术主题:如何在 JavaScript 中使用 AOP(面向切面编程)实现无侵入式的日志记录和埋点功能。 如果你曾经遇到过这样的问题: …

作者头像 李华
网站建设 2026/8/2 6:52:09

防腐层(Anti-Corruption Layer)设计:隔离遗留代码与新架构

防腐层(Anti-Corruption Layer)设计:隔离遗留代码与新架构 大家好,我是你们今天的讲师。今天我们来聊一个在现代软件工程中越来越重要的概念——防腐层(Anti-Corruption Layer, ACL)。如果你正在从旧系统迁移到微服务、模块化架构或云原生应用,那么你一定会遇到这样一个…

作者头像 李华
网站建设 2026/8/2 14:12:01

SQLite Wasm:在浏览器中运行完整的 SQL 数据库并持久化到 OPFS

SQLite Wasm:在浏览器中运行完整的 SQL 数据库并持久化到 OPFS 大家好,欢迎来到今天的专题讲座!今天我们不聊前端框架或状态管理,也不讲 React 或 Vue 的新特性。我们来聊聊一个可能你还没怎么接触过、但非常强大且实用的技术:如何在浏览器中使用 SQLite WebAssembly(Wa…

作者头像 李华