保姆級(jí)教程??!GEO數(shù)據(jù)集芯片數(shù)據(jù)的探針I(yè)D轉(zhuǎn)換!!
小伙伴們得到GEO數(shù)據(jù)集原始數(shù)據(jù)后,發(fā)現(xiàn)密密麻麻的基因表達(dá)信息不知道從哪里下手。而且基因表達(dá)信息往往有很多我們不需要的信息,并且基因表達(dá)譜數(shù)據(jù)往往也是層次不齊。在這里小云自己整理了一份代碼,可以把基因表達(dá)譜整理出來,并且把探針I(yè)D也轉(zhuǎn)換完成,把數(shù)據(jù)也歸一化處理。
接下來跟著小云去學(xué)習(xí)一下吧!
在這里小云使用實(shí)例數(shù)據(jù)GSE63514,平臺(tái)為GPL-570。小伙伴可以自行在GEO數(shù)據(jù)庫中下載。
不過,小云教大家一個(gè)小技巧: 在官網(wǎng)搜到自己需要的GEO數(shù)據(jù)集后,可以在
這個(gè)選項(xiàng)中選擇查看一下這個(gè)數(shù)據(jù)集中含有那些樣本:
此外,在
當(dāng)我們點(diǎn)擊GPL平臺(tái)后會(huì)出現(xiàn)一些信息在這里:
如果這個(gè)平臺(tái)信息含有
那么我們處理數(shù)據(jù)起來就會(huì)很方便,利用Gene?Symbol就可以轉(zhuǎn)換ID得到我們想要的基因名稱。小伙伴們一定要注意,如果沒有這個(gè)Symbol信息(有的平臺(tái)可能只會(huì)顯示Symbol),小云這里的代碼可能不太使用。接下來我們就進(jìn)入正題吧! 我們得到這個(gè)原始數(shù)據(jù)集,先導(dǎo)入它們: setwd("E:\\生信果") Sys.setlocale('LC_ALL','C') #讀取GPL文件 GPL_table = read.table('E:\\生信果\\GPL570-55999.txt',sep = "\t", ???????????????????????????????????????????????????comment.char = "#", stringsAsFactors = F, ???????????????????????????????????????????????????header = T, fill = TRUE, quote = "")? #讀取GSE文件 GSE4100 <- read.table('E:\\生信果\\GSE63514_series_matrix.txt',sep = "\t", ???????????????????????????????????????????????????comment.char = "!", stringsAsFactors = F,header = T, fill=TRUE)#43931 #導(dǎo)入文件,我們可以查看一下導(dǎo)入的數(shù)據(jù)形式。
細(xì)心的小伙伴會(huì)發(fā)現(xiàn),ID這一列不是我們想要的Gene名,這就需要我們吧ID轉(zhuǎn)化一下。 接下來: ID_Sybmol = GPL_table[,c(1,11)] #GPL對(duì)應(yīng)ID列 colnames(ID_Sybmol)[2]="Symbol" #更改名稱為Symbol,主要是為了對(duì)其求平均函數(shù) c(1,11)這里的11是GPL平臺(tái)表格里面,代表第11列,小云這里GeneSymbol是11列,所以這里是11,小伙伴們需要數(shù)一下自己數(shù)據(jù)Symbol在第幾列。 接下來: #合并ID與基因列 Exp = merge(ID_Sybmol,GSE4100,by.x = "ID",by.y = "ID_REF",all=T)?#45782個(gè) Exp = Exp[,-1] View(Exp)#查看一下數(shù)據(jù)集
這樣一來就得到我們想要的基因名稱了,但是又出現(xiàn)一個(gè)新的問題,基因名有重復(fù)的,而且有個(gè)基因含有多個(gè),這該怎么辦呢,小云再教一招。對(duì)數(shù)據(jù)過濾: #數(shù)據(jù)過濾,對(duì)多余的基因進(jìn)行刪除 Exp = Exp[Exp$Symbol != "",] # Exp = na.omit(Exp)??# ? #去除多余的基因, Exp1 = data.frame(Exp[-grep("/",Exp$"Symbol"),]) #去一對(duì)多,grep是包含的意思,-就是不包含 write.table(Exp1,"Exp1.txt",row.names = F,quote = F,sep="\t") 那么這里 就得到干凈的基因表達(dá)譜
但是,有的小伙伴他的基因表達(dá)譜中數(shù)據(jù)有的異常的大,那么就需要對(duì)數(shù)據(jù)歸一化。 接下來小云在繼續(xù)教大家如何把數(shù)據(jù)集做平均值處理,這里需要用到for循環(huán)處理數(shù)據(jù)。 #求平均值 ?meanfun <- function(x) { ????x1 <- data.frame(unique(x[,1])) ????colnames(x1) <- c("Symbol") ?????for (i in 2:ncol(x)){ ?????????x2 <- data.frame(tapply(x[,i],x[,1],mean)) ?????????x2[,2] <- rownames(x2) ?????????colnames(x2) <- c(colnames(x)[i], "Symbol") ?????????x1 <- merge(x1,x2,by.x = "Symbol",by.y = "Symbol",all=FALSE) ?????} ?????return(x1) ?} ?Exp2 <- meanfun(Exp1)
數(shù)據(jù)就會(huì)變規(guī)整很多。
我們使用柱狀圖展示數(shù)據(jù)形式 # 查看數(shù)據(jù) ?par(cex = 0.7) ?n.sample=ncol(Exp2[,-1]) ?if(n.sample>40) par(cex = 0.5) ?cols <- rainbow(n.sample*1.2) ?boxplot(Exp2[,-1], col = cols,main="expression value",las=2) ? ?write.table(Exp2,"Exp_Original.txt",row.names = F,quote = F,sep="\t") ? ??row.names(Exp2) = Exp2[,1] ?Exp2 = log(Exp2[,-1])? ? ???par(cex = 0.7) ?n.sample=ncol(Exp2) ?if(n.sample>40) par(cex = 0.5) ?cols <- rainbow(n.sample*1.2) ?boxplot(Exp2, col = cols,main="expression value",las=2) ? ?Symbol = row.names(Exp2) Exp_test = cbind(Symbol,Exp2) ? write.table(Exp_test,"Exp.txt",row.names = F,quote = F,sep="\t") 最終得到的數(shù)據(jù)集就是我們想要的基因表達(dá)譜了,小伙伴可以使用得到的基因表達(dá)譜做后續(xù)的分析啦!
小云這里提醒一下,有的數(shù)據(jù)集不需要做歸一化處理,小伙伴要清楚自己想要得到那個(gè)基因表達(dá)譜。