解读GEO数据存放规律及下载,一文就够
做生物信息学分析的朋友应该是对GEO数据库耳熟能详了,总会用到公共数据库的,而GEO数据库则是首选,起先只是为表达芯片数据准备的,后期纳入了各种NGS组学数据,文章里面会给出数据地址,GSE ID号,由此我们就可以进入GEO数据库,进而了解它!
https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE84498
GEO数据库基本介绍
其实只需要理解下面的4个概念。
- GEO Platform (GPL)
- GEO Sample (GSM)
- GEO Series (GSE)
- GEO Dataset (GDS)
理解起来也很容易。一篇文章可以有一个或者多个GSE数据集,一个GSE里面可以有一个或者多个GSM样本。多个研究的GSM样本可以根据研究目的整合为一个GDS,不过GDS本身用的很少。而每个数据集都有着自己对应的芯片平台,就是GPL。
使用GEOquery包从GEO数据库下载数据
官网详细用法:https://warwick.ac.uk/fac/sci/moac/people/students/peter_cock/r/geo/ 而且我写了这个软件包的中文用法:http://www.bio-info-trainee.com/bioconductor_China/software/GEOquery.html
而且需要理解所有bioconductor支持的芯片平台对应关系:通过bioconductor包来获取所有的芯片探针与gene的对应关系
首先是下载函数的使用
包的本质就是getGEO
函数,用法列举如下:
1、根据GDS号来下载数据,下载soft文件
gds858 <- getGEO(‘GDS858’, destdir=“.”)
2、根据GPL号下载的是芯片设计的信息!
gpl96 <- getGEO(‘GPL96’, destdir=“.”) ```
3、根据GSE号下载数据,下载_series_matrix.txt.gz
gse1009 <- getGEO(‘GSE1009’, destdir=“.”)
上面的代码下载的文件都会保存在本地,destdir参数指定下载地址。比较重要的三个参数是:GSEMatrix=TRUE,AnnotGPL=FALSE,getGPL=TRUE
然后是了解下载函数返回的对象
1、查看下载GDS后返回的对象
用Table(gds858)
可以得到表达矩阵!
用Meta(gds858)
可以得到描述信息!
具体代码如下:
options(warn=-1)
suppressMessages(library(GEOquery))
gds858 <- getGEO('GDS858', destdir=".")
names(Meta(gds858))
Table(gds858)[1:5,1:5]
然后还可以用 GDS2eSet函数把它转变为 expression set 对象
, expression set这个对象
非常之重要,后续会详细讲解:
eset <- GDS2eSet(gds858, do.log2=TRUE)
2、GSE
直接根据GSE号返回的对象:gse1009,就是expression set 对象
我们的处理函数有:geneNames/sampleNames/pData/exprs
(这个是重点,对expression set 对象的操作函数)
3、GPL
根据GPL号下载返回的对象跟GDS一样,也是用Table/Meta处理!
options(warn=-1)
suppressMessages(library(GEOquery))
gpl96 <- getGEO('GPL96', destdir=".")
names(Meta(gpl96))
Table(gpl96)[1:10,1:4]
一般来说我们下载GPL是为了得到芯片的探针对应基因ID的关系列表,下面这个代码就是芯片ID的基因注释信息
包装成函数
downGSE <- function(studyID = "GSE1009", destdir = ".") {
library(GEOquery)
eSet <- getGEO(studyID, destdir = destdir, getGPL = F)
exprSet = exprs(eSet[[1]])
pdata = pData(eSet[[1]])
write.csv(exprSet, paste0(studyID, "_exprSet.csv"))
write.csv(pdata, paste0(studyID, "_metadata.csv"))
return(eSet)
}
参考链接:http://www.bio-info-trainee.com/1085.html
番外
也可以用GEOmetadb包来获取对应GEO数据的实验信息(得到metadata数据),可以批量得到多个GSE数据集的信息,如下:
GSE1009
GSE10785
GSE1133
GSE11975
GSE121
GSE12409
执行下面代码即可:
library(GEOmetadb)
if(!file.exists('GEOmetadb.sqlite')) getSQLiteFile()
## 取决于网速哦
file.info('/path/GEOmetadb.sqlite')
con <- dbConnect(SQLite(),'/path/GEOmetadb.sqlite'))
#dbListTables(con2)
#dbListFields(con2,'gse')
GeoList = read.table("diabetes.GEO.list")
query = paste("select + from gsm where series_id in
( ' ", gsub(", ", " ', ' ", paste(Geolist[,1], collapse=",")," ')", seq=" ")
query
tmp = dbGetQuery(con2, query)
write.csv(tmp, "diabetes.GEO.meta.csv")
作业
大家可以使用上面介绍的R包及GEO数据库知识,把文中列出的几个GSE数据集探索一下。
或者下面这些:
GSE11072 2009-gastric cancer SBC Human 16K cDNA Microarray
GSE42872 2015-melanoma-vemurafenib HuGene-1_0-st
GSE24673 2015-hub-gene-mcode-retinoblastoma HuGene-1_0-st
GSE22863 2011-NSCLC HuGene-1_0-st
GSE622221, GSE4180414, GSE5140122 A total of 117 samples (54 cases and 63 controls) Affymetrix Human Genome U133 Plus 2.0 Array 2015-HCC
GSE21815 2016-CRC Agilent-014850 Whole Human Genome Microarray 4x44K
- GreenPlum 简单性能测试与分析(续)
- 最终版 Reflector v1.0 (+简单的反流程混淆)
- 性能&分布式&NewLife.XCode对无限数据的支持
- ASP.NET MVC下的异步Action的定义和执行原理
- 包学会之浅入浅出Vue.js:结业篇
- 迈克尔•戴尔:人工智能杀手?技术反乌托邦?不存在的
- 你知道吗?多个类多线程环境下静态构造函数的执行顺序
- 云端架构师养成之三:微信也在用的消息队列服务
- 现在 tensorflow和mxnet 很火,是否还有必要学习 scikit-learn 等框架?
- ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上
- 改进版CodeTimer及XCode性能测试
- 常见测试术语解析
- 秦俊:开放 DevOps 敏捷开发套件,助力开发者驰骋云端
- 开源组件NanUI一周年-使用HTML/CSS/JS来构建.Net Winform应用程序界面
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法