GEO数据库数据下载与解析:公共数据挖掘入门
726 字
4 分钟
GEO数据库数据下载与解析:公共数据挖掘入门
GEO(Gene Expression Omnibus)是全球最大的基因表达公共数据库。截至 2025 年已收录超过 600 万样本。对生信新手来说,GEO 是练手的最佳数据来源——数据量适中、格式统一、免费。
实测环境:Debian 12,R 4.x + GEOquery。
1. GEO 数据层级
GPLxxxx (Platform 平台) — 测序芯片/测序仪型号 └── GSExxxx (Series 数据集) — 一个研究项目的数据集合 └── GSMxxxx (Sample 样本) — 单个样本的表达数据你要下载的最小单位是 GSE 编号。
2. 安装 GEOquery
if (!require("BiocManager")) install.packages("BiocManager")BiocManager::install("GEOquery")library(GEOquery)3. 下载与解析
# 下载GSE数据集gse <- getGEO("GSE183947", GSEMatrix = TRUE, getGPL = FALSE)
# 如果返回list(多个平台),取第一个if (inherits(gse, "list")) { eset <- gse[[1]]} else { eset <- gse}
# 提取表达矩阵expr <- exprs(eset)head(expr[, 1:5])
# 提取样本注释pheno <- pData(eset)head(pheno[, c("title", "geo_accession", "source_name_ch1")])4. 解析样本信息
GEO 的样本注释通常藏在 characteristics_ch1 列里,需要手动解析:
library(tidyverse)
# 提取分组信息sample_info <- pheno %>% select(title, geo_accession, characteristics_ch1) %>% mutate( condition = str_extract(characteristics_ch1, "condition: (.*)"), tissue = str_extract(characteristics_ch1, "tissue: (.*)") ) %>% mutate(across(c(condition, tissue), ~ str_remove(.x, ".*: ")))5. 批量下载多个GSE
gse_list <- c("GSE183947", "GSE150910", "GSE164690")
for (gse_id in gse_list) { cat("Downloading:", gse_id, "\n") gse <- tryCatch( getGEO(gse_id, GSEMatrix = TRUE, getGPL = FALSE), error = function(e) { cat("ERROR:", e$message, "\n"); return(NULL) } ) if (!is.null(gse)) { saveRDS(gse, paste0(gse_id, ".rds")) } Sys.sleep(2) # 礼貌延迟,避免被NCBI限速}6. GEO2R 替代方案
NCBI 的在线工具 GEO2R 功能有限。用 R 本地做差异分析替代:
library(limma)
# 构建设计矩阵condition <- factor(c(rep("Control", 3), rep("Treatment", 3)))design <- model.matrix(~ 0 + condition)colnames(design) <- levels(condition)
# limma差异分析fit <- lmFit(expr, design)contrast <- makeContrasts(Treatment - Control, levels = design)fit2 <- contrasts.fit(fit, contrast)fit2 <- eBayes(fit2)results <- topTable(fit2, number = Inf, adjust.method = "BH")
# 筛选差异基因sig <- results %>% filter(adj.P.Val < 0.05, abs(logFC) > 1)7. 国内下载加速
NCBI GEO 服务器在美国。getGEO 默认走 HTTPS 下载,国内可能极慢:
# 方案1:用代理Sys.setenv(http_proxy = "http://127.0.0.1:7890")
# 方案2:手动下载后本地读# 从 https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE183947# 底部 "Download family" → Series Matrix File(s)# 下载后用:gse <- getGEO(filename = "GSE183947_series_matrix.txt.gz")
# 方案3:用GEOmirror包(国内镜像,不保证最新)# remotes::install_github("jmzeng1314/GEOmirror")8. 踩坑
坑1:getGEO 报 cannot open URL——网络问题。换代理或手动下载。
坑2:表达矩阵已经是 log2 转换的——GEO 上的数据很多已经 log2 过了,别再次 log2。
坑3:多个平台的数据——一个 GSE 可能包含不同芯片平台(GPL)的数据。getGEO 返回 list,每个元素对应一个平台。要用 sapply(gse, function(x) annotation(x)) 查看并选择合适的。
坑4:characteristics_ch1 列格式不统一——每个研究者写法不同,有的用 condition: Cancer,有的用 group: Tumor。需要人工看,没法完全自动化。
坑5:样本量太小做差异分析——GEO 上很多数据集 n=2 或 n=3,用 limma 或 DESeq2 跑差异分析 power 极低。先用 PCA 看看是否能分开,再决定是否做差异分析。
本文于 2025-06-10 实测。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
GEO数据库数据下载与解析:公共数据挖掘入门
https://fg.ink/posts/geo-data-download-geoquery/ 相关文章 智能推荐
1
SRA数据下载:SRA-toolkit与国内镜像加速
技术 NCBI SRA数据库的下载全流程,覆盖prefetch断点续传、fasterq-dump转换和国内镜像加速方案。
2
生物信息学数据库全景:序列/表达/功能/变异
技术 生信必备免费数据库全景整理,按序列、表达、功能、变异和表观五大类别梳理NCBI、Ensembl、GEO等15个核心资源。
3
ENSEMBL BioMart批量数据导出:REST API与biomaRt
技术 ENSEMBL BioMart基因注释批量导出指南,覆盖REST API与biomaRt两种方式获取GO、KEGG和同源基因信息。
4
热图可视化:pheatmap与ComplexHeatmap
技术 pheatmap与ComplexHeatmap的热图绘制实操,覆盖数据标准化、配色调色板、行列注释和高级拼图布局。
5
ggplot2学术绘图:配色方案、主题、多图拼接
技术 ggplot2学术级图表绘制指南,覆盖CNS期刊配色方案、统计标注、多图拼接和300dpi矢量图导出。
随机文章 随机推荐