一学就会师妹教你如何用 R 来下载 GEO 的数据
{ 点击蓝字,关注我们 }
了解生信的小伙伴应该都知道GEO数据库,它是生物信息学研究中常用的数据资源之一。GEO数据库中的数据主要来源于高通量基因表达实验,如基因芯片和RNA测序等。这些数据可以用来研究基因调控、生物进化、疾病发生机制等生物学问题。GEO数据库中的数据通常包括原始数据和注释信息,原始数据可以通过生物信息学工具进行预处理和分析,注释信息包括样本信息、实验设计、基因注释等,可以帮助研究者理解数据的来源和特点。
那我们该如何快速的得到GEO数据库中自己想要的数据呢,今天小师妹就来给大家介绍一个R包GEOquery包,GEOquery包是一个R语言中的生物信息学数据读取包,可以方便地读取GEO数据库中的基因表达数据。该包可以读取GEO数据库中的原始数据和注释信息,支持多种数据格式,如CEL、GPR、TXT、CSV等,可以快速读取大量的基因表达数据,支持数据预处理、质量控制和统计分析等功能,提供了丰富的数据可视化功能。
那么接下来就由小师妹来给大家介绍一下这个神奇的R包吧。
一
安装和载入
安装:if (!requireNamespace("BiocManager", quietly=TRUE))
install.packages("BiocManager")
BiocManager::install("GEOquery")
载入:library(GEOquery)
二
相关操作
1. GEOquery 获取数据
getGEO,这一个命令就可以让我们从 GEO 中获取数据,常用的方式是传入 GEO accession,小师妹来举个例子:
> gds <- getGEO(filename=system.file("extdata/GDS507.soft.gz",package="GEOquery"))
>gsm <- getGEO(filename=system.file("extdata/GSM11805.txt.gz",package="GEOquery"))

如图所示,现在gds 包含了 R 数据结构(GDS 类),表示 GEO 的 GDS507 条目。
2.getGEO介绍
getGEO是R语言中GEOquery包提供的一个函数,用于从GEO数据库中下载基因表达数据。使用getGEO函数可以方便地获取GEO数据库中的数据,并将数据存储为R语言中的对象,以便进行后续的分析和处理。
getGEO(GEO, destdir = ".", AnnotGPL = FALSE, getGPL = TRUE, GSEMatrix = FALSE, AnnotGSE = FALSE, verbose = TRUE)
3.GEOquery 的数据结构
GEOquery包中的数据结构主要包括GSE、GSM、GDS和GPL四种类型,分别对应GEO数据库中的实验集、样本、数据集和芯片平台。
(1)GSM(Gene Expression Sample):GSM是GEO数据库中的样本,对应于实验集中的每个样本。在GEOquery中,GSM数据结构是一个数据框,包含了样本的注释信息和基因表达数据。
(2)GDS(Gene Expression Dataset):GDS是GEO数据库中的数据集,包含了多个样本的基因表达数据。在GEOquery中,GDS数据结构是一个列表,包含了数据集的注释信息和每个样本的基因表达数据矩阵。
(3)GPL(Gene Expression Platform):GPL是GEO数据库中的芯片平台,包含了芯片上探针的注释信息和序列信息。在GEOquery中,GPL数据结构是一个数据框,包含了芯片平台的注释信息和探针序列信息。
(4)GSE(Gene Expression Series):GSE是GEO数据库中的实验集,包括多个样本和其对应的基因表达数据。在GEOquery中,GSE数据结构是一个列表,包含了实验的注释信息和每个样本的基因表达数据矩阵。
下面小师妹将对他们进行简单的介绍,帮助大家理解,先介绍前三种类型。
GSM、GDS、GPL,这三种类型,每一个类都由一个元数据头(与 SOFT 格式头部信息几乎一致)和一个 GEODataTable 组成。GEODataTable 有两个简单的部分: Columns 和 Table,Columns 部分是对 Table 部分的列的描述。此外,每个类还有一个 show 方法。例如我们已经获取的gsm数据:
#查看元数据
> head(Meta(gsm))
$channel_count
[1] "1"
$comment
[1] "Raw data provided as supplementary file"
$contact_address
[1] "715 Albany Street, E613B"
$contact_city
[1] "Boston"
$contact_country
[1] "USA"
$contact_department
[1]"Genetics and Genomics"
#查看与 GSM 相关的数据
> Table(gsm)[1:8,] ID_REF VALUE ABS_CALL
1 AFFX-BioB-5_at 953.9 P
2 AFFX-BioB-M_at 2982.8 P
3 AFFX-BioB-3_at 1657.9 P
4 AFFX-BioC-5_at 2652.7 P
5 AFFX-BioC-3_at 2019.5 P
6 AFFX-BioDn-5_at 3531.5 P
7 AFFX-BioDn-3_at 14950.5 P
8 AFFX-CreX-5_at 27206.6 P
#查看列描述
> Columns(gsm)
Column Description
1 ID_REF
2 VALUE MAS 5.0 Statistical Algorithm (mean scaled to 500)
3 ABS_CALL MAS 5.0 Absent, Marginal, Present call with Alpha1 = 0.05, Alpha2 = 0.065
而GSE 有一个元数据部分,但它没有 GEODataTable,它包含了两个列表,可以使用 GPLList 和 GSMList 方法进行访问,这两个列表分别是 GPL 和 GSM 对象的列表。小师妹拿soft 文件来举个例子:
> gse <- getGEO(filename=system.file("extdata/GSE781_family.soft.gz",package="GEOquery"))
#查看元数据
> head(Meta(gse))$contact_address
[1] "715 Albany Street, E613B"
$contact_city
[1] "Boston"
$contact_country
[1] "USA"
$contact_department
[1] "Genetics and Genomics"
$contact_email
[1] "mlenburg@bu.edu"
$contact_fax
[1]"617-414-1646"
#获取 GSE 中包含的所有 GSM 对象的名称
> names(GSMList(gse)) [1] "GSM11805" "GSM11810" "GSM11814" "GSM11815" "GSM11823" "GSM11827" "GSM11830" "GSM11832"
[9] "GSM12067" "GSM12069" "GSM12075" "GSM12078" "GSM12079" "GSM12083" "GSM12098" "GSM12099"
[17] "GSM12100" "GSM12101" "GSM12105" "GSM12106" "GSM12268" "GSM12269" "GSM12270" "GSM12274"
[25] "GSM12283" "GSM12287" "GSM12298" "GSM12299" "GSM12300" "GSM12301" "GSM12399" "GSM12412"
[33] "GSM12444" "GSM12448"
#获得列表中的第一个 GSM 对象
> GSMList(gse)[[1]]An object of class "GSM"
channel_count
[1] "1"
comment
[1] "Raw data provided as supplementary file"
contact_address
[1] "715 Albany Street, E613B"
contact_city
[1] "Boston"
contact_country
[1] "USA"
contact_department
[1] "Genetics and Genomics"
contact_email
[1] "mlenburg@bu.edu"
contact_fax
[1] "617-414-1646"
contact_institute
[1] "Boston University School of Medicine"
contact_name
[1] "Marc,E.,Lenburg"
contact_phone
[1] "617-414-1375"
contact_state
[1] "MA"
contact_web_link
[1] "http://gg.bu.edu"
contact_zip/postal_code
[1] "02130"
data_row_count
[1] "22283"
description
[1] "Age = 70; Gender = Female; Right Kidney; Adjacent Tumor Type = clear cell; Adjacent Tumor Fuhrman Grade = 3; Adjacent Tumor Capsule Penetration = true; Adjacent Tumor Perinephric Fat Invasion = true; Adjacent Tumor Renal Sinus Invasion = false; Adjacent Tumor Renal Vein Invasion = true; Scaling Target = 500; Scaling Factor = 7.09; Raw Q = 2.39; Noise = 2.60; Background = 55.24."
[2] "Keywords = kidney" [3] "Keywords = renal"
[4] "Keywords = RCC"
[5] "Keywords = carcinoma"
[6] "Keywords = cancer" [7] "Lot batch = 2004638"
geo_accession
[1] "GSM11805"
last_update_date
[1] "May 28 2005"
molecule_ch1
[1] "total RNA"
organism_ch1
[1] "Homo sapiens"
platform_id
[1] "GPL96"
series_id
[1] "GSE781"
source_name_ch1
[1] "Trizol isolation of total RNA from normal tissue adjacent to Renal Cell Carcinoma"
status
[1] "Public on Nov 25 2003"
submission_date
[1] "Oct 20 2003"
supplementary_file
[1] "ftp://ftp.ncbi.nih.gov/pub/geo/DATA/supplementary/samples/GSM11nnn/GSM11805/GSM11805.CEL.gz"
title
[1] "N035 Normal Human Kidney U133A"
type
[1] "RNA"
An object of class "GEODataTable"
****** Column Descriptions ******
Column Description
1 ID_REF =
2 VALUE MAS 5.0 Statistical Algorithm (mean scaled to 500)
3 ABS_CALL MAS 5.0 Absent, Marginal, Present call with Alpha1 = 0.05, Alpha2 = 0.065
****** Data Table ******
ID_REF VALUE ABS_CALL
1 AFFX-BioB-5_at 953.9 P
2 AFFX-BioB-M_at 2982.8 P
3 AFFX-BioB-3_at 1657.9 P
4 AFFX-BioC-5_at 2652.7 P
5 AFFX-BioC-3_at 2019.5 P
22278 more rows ...
怎么样,经过小师妹的介绍是不是对GEO数据库和如何获取其中的数据有了更深层次的了解呢,如果还想继续深入的了解,请继续关注小师妹的文章哦,那小师妹今天的分享就到这里啦,小伙伴们再会。
E
N
D