跳到正文
百沐一下百沐一下
本节目录

GEO 数据库检索入门

跟完这篇,您能用一条检索式加三个筛选器,在 GEO 里快速锁定符合课题的公共表达数据集;会用网页和命令行两种方式检索,并在动手下载之前就判断出它到底能不能用。

GEO 是什么

GEO(Gene Expression Omnibus)是 NCBI 维护的公共功能基因组学数据仓库,全世界大量已发表研究的原始与处理后数据都存放在这里,免费、可检索、可下载。芯片表达、RNA-seq、ChIP-seq、甲基化等类型都能找到。

您常打交道的其实是三个入口:

GSE / GSM / GPL 三个概念

看懂 GEO,先分清三个前缀。它们是层层包含的关系:

编号全称是什么一句话记住
GSESeries一整项研究您通常要找、要下载的就是它
GSMSample单个样本一个 GSE 里含多个 GSM
GPLPlatform测序仪或芯片平台说明数据是用哪种技术、哪块芯片产生的

三者的关系是:一个 GSE(研究)下面挂着多个 GSM(样本),这些 GSM 都基于某一个或几个 GPL(平台)。举例,一项对比「10 例肿瘤 vs 10 例癌旁」的研究是一个 GSE,里面就有 20 个 GSM;如果都用同一块 Illumina 测序仪测,那它们共享同一个 GPL。

还有一类 GDS(DataSet),是 GEO 早年人工整理过的数据集,覆盖并不全,新数据基本不再收录。实际检索以 GSE 为准即可,遇到 GDS 当作「被整理过的老数据」看待。

检索页怎么用

打开 GEO DataSets 检索页(https://www.ncbi.nlm.nih.gov/gds),页面分三块,用起来就照着这个顺序:

  1. 顶部搜索框:输入关键词或检索式,回车。
  2. 左侧筛选栏(facets):物种、研究类型、条目类型等过滤器都在这里,勾一下就即时收窄结果。
  3. 中间结果列表:每一条是一个数据集,显示标题、物种、样本数、平台、编号。点标题进入详情页。

如果一次搜出成千上万条,别急着翻页——先用检索式和左侧筛选把范围压下来,再逐条看,这是最省时间的做法。想拼更精细的条件,搜索框右上角还有 Advanced(高级检索),能按字段一项项搭出检索式。

检索式怎么写(关键词 + 物种 + 研究类型)

一条好检索式一般由三部分组成:主题关键词 + 物种 + 研究类型/平台。用字段标签(写在方括号里)把每个条件钉死,结果最干净。

一个可直接套用的例子——找人类肝癌的 RNA-seq 数据:

hepatocellular carcinoma AND "Homo sapiens"[Organism] AND "Expression profiling by high throughput sequencing"[DataSet Type]

拆开看每一段:

想限定的东西字段标签写法示例
主题(不加标签即在所有字段里搜)无 / [Title]hepatocellular carcinoma
物种[Organism]"Homo sapiens"[Organism]
研究类型[DataSet Type]"Expression profiling by array"[DataSet Type]
条目类型[Entry Type]gse[Entry Type]
样本数区间[Number of Samples]6:500[Number of Samples]
发表时间[Publication Date]2018:2024[Publication Date]

几个写检索式的习惯:

  • 词组用英文双引号包起来,如 "Homo sapiens",否则会被拆成两个词分别搜。
  • AND / OR / NOT 要大写,这是布尔逻辑词;同义词之间用 OR,比如 (NASH OR NAFLD OR "fatty liver")
  • 关键词优先用英文:GEO 的标题、描述几乎都是英文,中文关键词基本搜不到。
  • 平台的限定:如果您在意具体某块芯片或测序仪,把它的 GPL 编号当关键词加进去(例如加上 GPL570)就会筛到用该平台的记录;如果只在乎「是芯片还是测序」,交给下一节的筛选器更省事。

三个关键筛选器(物种 / Study type / Entry type)怎么设

检索式之外,左侧筛选栏里有三个过滤器几乎每次都要设,设好了噪声会少一大半。

1. Organism(物种)。 选定您研究的物种,最常见是 Homo sapiens(人)、Mus musculus(小鼠)。不设的话,人和鼠、甚至细胞系跨物种的结果会混在一起。

2. Study type(研究类型)。 这个筛选器决定了数据是怎么产生的,也直接决定您后面怎么分析。两类最常用:

选项含义后续分析走向
Expression profiling by array表达芯片通常拿到的是归一化后的强度值,走 limma 一类流程
Expression profiling by high throughput sequencing高通量测序(RNA-seq)若能拿到原始 counts,可走 DESeq2 一类流程

注意一个小坑:左侧界面上写的是「Study type」,但在检索式里对应的字段标签叫 [DataSet Type],两个名字指的是同一件事,别被绕晕。

3. Entry type(条目类型)。 强烈建议勾 Series(即 GSE)。因为一个研究会拆成很多 GSM 样本,如果不限定,搜索结果会被成百上千条单样本记录淹没。锁定 Series,一条结果就是一项完整研究,看起来清爽得多。

走一遍:网页版找人类肝癌 RNA-seq 数据

把上面几步串起来实操一次,您就有肌肉记忆了:

  1. 打开 https://www.ncbi.nlm.nih.gov/gds

  2. 搜索框里粘贴检索式,回车:

    hepatocellular carcinoma AND "Homo sapiens"[Organism] AND "Expression profiling by high throughput sequencing"[DataSet Type]
    
  3. 左侧 Entry type 勾选 Series,把结果收窄到研究层级。

  4. 扫一眼结果列表,重点看每条的样本数(Samples)发表年份,挑几个样本量像样、年份较新的点进去。

  5. 进入某个 GSE 详情页,按「怎么判断能不能用」一节的清单逐项核对。

  6. 选定后,记下 GSE 编号,进入下载环节。

整个过程一般三五分钟,就能从「想找肝癌数据」缩到「锁定两三个候选 GSE」。

用命令行可复现地检索(EDirect)

网页点选适合探索,但换台电脑、过段时间就难以复现。NCBI 官方的 Entrez Direct(EDirect) 把同一套检索搬到命令行,一条命令就能把结果落成一份 GSE 清单,方便存档、复现和批量处理。检索式和网页搜索框里写的完全一样,所以上面学到的写法可以直接搬过来。

安装(macOS / Linux,一次即可):

sh -c "$(curl -fsSL https://ftp.ncbi.nlm.nih.gov/entrez/entrezdirect/install-edirect.sh)"

esearch 检索,-db gds 指定 GEO DataSets 这个库:

# 这一步只回一个命中数量,先确认范围合不合适
esearch -db gds -query 'hepatocellular carcinoma AND "Homo sapiens"[Organism] AND "Expression profiling by high throughput sequencing"[DataSet Type] AND gse[Entry Type]'

命中数合理后,把结果接给 efetch 取详情,再用 xtract 抽出您关心的字段,拉成一张表:

esearch -db gds \
  -query 'hepatocellular carcinoma AND "Homo sapiens"[Organism] AND "Expression profiling by high throughput sequencing"[DataSet Type] AND gse[Entry Type]' \
| efetch -format docsum \
| xtract -pattern DocumentSummary -element Accession n_samples title \
> hcc_gse.tsv

hcc_gse.tsv 大致是「编号 + 样本数 + 标题」三列,导进表格软件就能按样本数排序、按关键词筛选,比在网页里一页页翻快得多。

两个小提示:

  • 字段名以实际输出为准:docsum 里到底有哪些字段,先看一眼再决定 -element 抽哪几个——esearch -db gds -query '...' | efetch -format docsum | head -40
  • 想直接拿下载地址:docsum 里的 FTPLink 字段给的就是该 GSE 的 FTP 目录,补充文件都在那儿。

怎么判断一个数据集能不能用

搜到不等于能用。点进 GSE 详情页后,照下面四条逐项核对,任何一条不过关都要谨慎。

1. 样本量与重复数。 看 Samples 列表,数清每组各有几个生物学重复。做差异表达分析,每组至少 3 个生物学重复是常被采用的最低门槛(是常用惯例、按数据调,不是铁律;样本越多结论越稳,临床样本受限时也有更少的,但结果要更保守地看待)。只有 1、2 个重复的组,差异分析的统计力很弱。

2. 分组信息清不清楚。 一份能用的数据,得让您看得出「谁是实验组、谁是对照组」。重点看两处:

  • Overall design(总体设计):作者用一段话描述了实验怎么分组、比什么。
  • 每个样本的 Characteristics(样本特征):分组、处理、时间点等标签是否齐全、写得规整。

如果分组只能靠猜样本名,或关键的临床/处理信息缺失,整理起来会很费劲,甚至没法分组。

3. 平台对不对路。 在详情页的 Platforms 一栏确认技术类型:

  • RNA-seq:更通用,注释也好处理,多数情况下的首选。
  • 表达芯片:也能用,但要注意该平台(GPL)有没有配套的探针到基因注释;老旧或冷门芯片的注释可能难找。

4. 有没有拿得到的表达量数据。 这是最容易翻车的一条。往详情页最下方看 Supplementary files(补充文件),判断您能不能直接拿到可分析的矩阵:

页面上能看到什么意味着好不好用
补充文件里有原始 counts 矩阵(如 GSExxxxx_raw_counts.txt.gzRNA-seq 的原始计数已备好好,可直接接差异分析
只有 Series Matrix File处理后的矩阵(芯片多为归一化强度;测序则看作者放了什么)视情况,需确认里面是不是您要的数值
只有指向 SRA 的原始测序数据(FASTQ/SRA)没有现成矩阵,得自己比对定量能用但工作量大,要额外跑比对流程

一句话总结这条:RNA-seq 优先找有没有原始 counts;只有 SRA 原始数据时,要预留自己比对定量的时间和算力。

用 R 批量核对元数据(可选)

候选多的时候,一个个点详情页很慢。R 的 GEOquery(Bioconductor)能把某个 GSE 的样本表型和矩阵维度一次拉下来,几行就看清分组和样本数:

library(GEOquery)

# 把 GSExxxxx 换成您的编号;getGPL = FALSE 跳过下载平台注释,更快
gse  <- getGEO("GSExxxxx", GSEMatrix = TRUE, getGPL = FALSE)
eset <- gse[[1]]                  # getGEO 返回列表:一个平台对应一个 ExpressionSet

pheno <- pData(eset)              # 样本表型:分组、处理等信息都在这里
dim(exprs(eset))                  # 矩阵维度:基因数 × 样本数
table(pheno$characteristics_ch1)  # 看分组标签是否清楚、每组几个样本

想确认能不能直接拿到表达量文件,先只列出补充文件、别急着下载:

# fetch_files = FALSE 只列清单,不下载,先看看有没有原始 counts
getGEOSuppFiles("GSExxxxx", fetch_files = FALSE)

# 确认后再下载,可用 filter_regex 只取需要的文件
getGEOSuppFiles("GSExxxxx", filter_regex = "counts")

把这四条过一遍,您就能在下载前把「样本太少」「没分组」「拿不到矩阵」这些坑筛掉,避免下完才发现用不了。

在平台上跑一遍

检索和下载在 GEO 完成,但拿到数据之后的整理与分析,在百沐一下不用写代码:把从 GSE 下载到的表达矩阵(或原始 counts)传上来,用一句话说清您想比哪两组、对照是谁,平台会零代码替您核对样本、整理矩阵、接着做差异分析。

从上传到出结果的完整流程见 /docs/omics-agent,或直接开始:https://app.baimuyixia.com

相关