GEO数据库-ID转换系列

作者:jzhang Update:2020-07-12 Emali:jzhang910@qq.com

前言:我们都知道很多人在进行GEO数据库挖掘的时候,首先遇到的第一个痛点就是探针ID转换成gene symbol的问题,gene symbol因为被大家熟悉所以得到广泛采用。针对此问题,我进行了一个总结贴。

一般ID转换分为以下几个办法:

1.GEO官网

使用ftp地址下载

# 以下网址存在一些特点
https://ftp.ncbi.nlm.nih.gov/geo/platforms/GPL15nnn/GPL15207
https://ftp.ncbi.nlm.nih.gov/geo/platforms/GPL14nnn/GPL14951
https://ftp.ncbi.nlm.nih.gov/geo/platforms/GPL15nnn/GPL15314

R代码版本

options('download.file.method.GEOquery'='auto')
options('GEOquery.inmemory.gpl'=FALSE)
library(GEOquery)
library(Biobase)

# Download GPL file, put it in the current directory, and load it:
gpl <- getGEO("GPL16699", destdir=".")
colnames(Table(gpl))
head(Table(gpl)[,c(1,10,13)])
probe2symbol <- Table(gpl)[,c(1,13)]
2.芯片官网

根据芯片名字搜索得到注释文件。

3.注释包
3.1 bioconductor
library(hgu133plus2.db)

# 查看有哪些对应关系
ls("package:hgu133plus2.db")

# 得到对应关系
probe2symbol2 <- toTable(hgu133plus2SYMBOL)
probe2symbol2[1:6,]

probe2entrezid <- toTable(hgu133plus2ENTREZID)
probe2entrezid[1:6,]

probe2id <- merge(probe2symbol2,probe2entrezid,by="probe_id")
3.2 idmap1

idmap1解决了bioconductor包下载困难的问题,是整合全部的bioconductor里面的芯片探针注释包。

library(devtools)
devtools::install_github("jmzeng1314/idmap1")

library(idmap1)
ids1 <- idmap1::getIDs("gpl570")
head(ids1)

# 你想知道我们支持哪些平台吗,当然是可以看的
# 查看一个数据集合中有哪些数据集
data(package="idmap1")
data(p2s_df)
gpl <- unique(p2s_df[,3])
3.3 idmap2

idmap2解决了GPL平台的soft文件下载困难,把全部表达芯片的soft文件下载好后,提前它们的芯片和基因symbol对应关系并存储好。不同的gpl平台的soft信息不一样,一般来说,大家关心的其实就是探针的ID,以及基因的symbol列。

library(devtools)
devtools::install_github("jmzeng1314/idmap2")

library(idmap2)
ids2 <- idmap2::get_soft_IDs("gpl570")
head(ids2)

# 你想知道我们支持哪些平台吗,当然是可以看的
data(gpl_list)
gpl <- unique(gpl_list$gpl)
3.4 idmap3

idmap3解决了那些并不提供探针的注释信息的平台,大量的GPL平台的soft文件并不提供基因注释信息。是下载全部的GPL的soft文件里面的探针碱基序列比对后重新注释的包。
比如:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL21827
能拿到的信息就探针序列,所以是idmap1和idmap2都是无法注释的,这个时候就需要我们的idmap3啦!

library(devtools)
devtools::install_github("jmzeng1314/idmap3")

library(idmap3)
ids3 <- idmap3::get_pipe_IDs("GPL21827")
head(ids3) 

# 你想知道我们支持哪些平台吗,当然是可以看的
data(gpl_list)
gpl_list[,2:1]
3.5 AnnoProbe

整合了前面三个包的内容,根据type参数分为bioc对应bioconductor的注释包,soft对应GEO的soft格式的芯片注释文件,pipe对应重新注释的文件。

library(devtools)
devtools::install_github("jmzeng1314/AnnoProbe")

# 仅仅是一句话,就拿到了这个平台的探针的注释信息。需要注意的是,这个函数的type参数,其实是有3个选择,这里我演示的是选择soft这个来源的基因注释信息。
library(AnnoProbe)
ids <- AnnoProbe::idmap("GPL570",type = "soft")
head(ids)

# 你可以指定ID_type,目前只能是选择 "ENSEMBL" or "SYMBOL",然后这个函数就会为你进行ID转换及坐标,还有基因类型的注释。
library(AnnoProbe)
IDs <- c("DDX11L1", "MIR6859-1", "OR4G4P", "OR4F5")
ID_type = "SYMBOL"
annoGene(IDs, ID_type)
annoGene(IDs, ID_type,out_file ='tmp.html')
annoGene(IDs, ID_type,out_file ='tmp.csv')
4.实战-重注释

针对只有探针序列的GPL平台芯片,进行重注释 https://mp.weixin.qq.com/s/mrtjpN8yDKUdCSvSUuUwcA

芯片注释

比如芯片GPL21827,Agilent-079487 Arraystar Human LncRNA microarray V4 在GEO里面仅仅是提供了探针序列

GPL21827
4.1 得到探针文件的fasta序列格式文件
## part1:得到探针序列的fa格式文件
# 这个包需要注意两个配置,一般来说自动化的配置是足够的。
options('download.file.method.GEOquery'='auto')
options('GEOquery.inmemory.gpl'=FALSE)
library(GEOquery)

# 首先下载序列
gset <- getGEO("GPL21827", destdir="../Analysis/data-GPL-anno" )

# 保存到本地
save(gset,file="../Analysis/data-GPL-anno/GPL21827_eSet.Rdata")   

# 载入数据
lname <- load("../Analysis/data-GPL-anno/GPL21827_eSet.Rdata")  
lname
colnames(Table(gset))

# 得到探针和序列
probe2seq <- Table(gset)[,c(1,4)]

# 保存成fasta格式
all_recs <- paste(apply(probe2seq,1,function(x) paste0('>',x[1],'\n',x[2])),collapse = '\n')
write.table(all_recs,file = "../Analysis/data-GPL-anno/GPL21827.fasta",row.names = F,col.names = F,quote = F)
4.2 比对得到bam文件并提取比对好的坐标
# 比对并排序
index=/teach/database/genome/Ensembl/Homo_sapiens/GRCh38_release95/Homo_sapiens.GRCh38_release95.genome
fa=/teach/project/GPL-anno/GPL21827/fasta/GPL21827.fasta

# 比对
hisat2 -p 4 -x $index  -f $fa  -S GPL21827.Hisat_aln.sam

# 排序
samtools sort -@ 3 -o GPL21827.Hisat_aln.sorted.bam GPL21827.Hisat_aln.sam

# 比对好的bam文件映射到对应参考基因组的注释信息
bam=GPL21827.Hisat_aln.sorted.bam

# -F 4 过滤掉没有mapping上的reads
samtools view -F 4  $bam | awk  'BEGIN{OFS="\t";}{print $3,$4-60,$4+60,$1,$5,$6}' |perl -alne '{print unless $F[0] =~ /v1/}' >GPL21827_human_align.bed
4.3 根据参考基因组的gtf文件提取已知注释坐标
# 格式化gff文件
wget -c ftp://ftp.ensembl.org/pub/release-95/gff3/homo_sapiens/Homo_sapiens.GRCh38.95.gff3.gz

zcat Homo_sapiens.GRCh38.95.gff3.gz |perl -alne  '{next unless $F[2] eq "gene";/gene_id \"(.*?)\";.*?gene_name \"(.*?)\";.*?gene_biotype \"(.*?)\";/;print "$2\t$3\t$1\t$F[0]\t$F[3]\t$F[4]"}'  >Homo_sapiens.GRCh38.95.gff3.txt

## 制作bed文件
# 编码蛋白基因的bed
grep -w protein_coding Homo_sapiens.GRCh38.95.gff3.txt |awk  'BEGIN{OFS="\t";}{print $4,$5,$6,$1,$2,$3}' >human_pro.bed

# 非编码蛋白的基因bed
grep -v -w protein_coding Homo_sapiens.GRCh38.95.gff3.txt |awk 'BEGIN{OFS="\t";}{print $4,$5,$6,$1,$2,$3}' >human_non.bed

# 全部的bed
cat  Homo_sapiens.GRCh38.95.gff3.txt |awk 'BEGIN{OFS="\t";}{print $4,$5,$6,$1,$2,$3}' >human_all.bed
4.4 提取交集得到探针注释信息
bedtools  intersect -a GPL21827_human_align.bed -b human_all.bed -f 1 -wa -wb  >GPL21827_human_anno.bed

最后注释结果为:

GPL21827芯片注释结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354