解读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
- Web Fundamentsals学习1-Multiple-Screen-Site
- Vagrant使用
- java 中的异步回调
- 澳大利亚域名管理机构多年敲竹杠?
- ASP.NET中使用HttpWebRequest调用WCF
- scala 学习笔记(06) OOP(下)多重继承 及 AOP
- Angular企业级开发(4)-ngResource和REST介绍
- CSS魔法堂:"那不是bug,是你不懂我!" by inline-block
- scala 学习笔记(03) 参数缺省值、不定个数参数、类的属性(Property)、泛型初步
- Cmd Markdown编辑器简明语法手册
- 如何让spring mvc web应用启动时就执行特定处理
- CSS魔法堂:小结一下Box Model与Positioning Scheme
- jboss EAP 6.2+ 通过代码控制JNDI数据源
- jboss CLI 命令行接口学习(适用JBOSS EAP 6.2+)
- 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 数组属性和方法
- 一道题理解Linux中sort命令的多个参数
- Centos7服务器下启动jar包项目的最佳方法
- JavaScript易错点(长期更新)
- Centos7.5配置java环境安装tomcat的讲解
- CSS3卡片光照效果
- Linux文本查找命令find的用法详解
- Canvas系列(2):曲线图形
- Shell中去除字符串里的空格或指定字符的方法
- 使用‘fsck’修复Linux中文件系统错误的方法
- linux/OSX中“DD”命令制作ISO镜像操作系统安装U盘的方法
- 《高效能程序员的修炼》读书笔记
- linux之centos7防火墙基本使用详解
- Ubuntu安装scrcpy完成手机投屏和控制(Ubuntu用QQ微信的另一种方法)
- CentOS7 systemd添加自定义系统服务的方法
- Linux中sudo、su和su -命令的区别小结