TCGA-數(shù)據(jù)下載整理(二)

加入我們用TCGAbiolinks下載之后我們可以看一下另外一種操作

image.png

data_download_from_gdc
打開后發(fā)現(xiàn)是1208個(gè)文件夾晾捏,為什么是1208個(gè)蒿涎,這跟我當(dāng)時(shí)學(xué)的數(shù)據(jù)有關(guān)系,可以不用管讓 每個(gè)文件夾里面還有個(gè)壓縮文件惦辛,我們現(xiàn)在的任務(wù)就是劳秋,如何把每個(gè)文件夾里面的壓縮文件放置在統(tǒng)一的文件夾中 假設(shè)我們的文件夾是這個(gè),
首先設(shè)置工作目錄到這一文件夾下:
00_data_read_in_one_file
并且他就是創(chuàng)建在 data_download_from_gdc中,所以現(xiàn)在文件夾的總體數(shù)目是應(yīng)該是1208加1就是1209個(gè) 我們在R語言中輸入

length(list.files())

這個(gè)命令中l(wèi)ist.files()的意思就是列舉當(dāng)前工作目錄中文件裙品,length的意思就是有有多少個(gè)俗批,一看,果真是1209個(gè) 其實(shí)

length(dir())

這個(gè)命令也能做這個(gè)事情市怎。 為什么我的文件夾要起一個(gè)這么詭異的名字岁忘? 以00開頭?区匠?

這是因?yàn)槲倚枰屗幱谖募械谝粋€(gè)位置干像,我們來驗(yàn)證一下:

dir()[1]

發(fā)現(xiàn)第一個(gè)文件夾就是他,這樣我就每次循環(huán)訪問后面的1208個(gè)文件夾驰弄,每次都把看到的東西復(fù)制過來就可以了

你說我為什么這么事無巨細(xì)麻汰,因?yàn)槲铱梢院芎啙崳部梢院軉缕莞荩Q于我是否想要?jiǎng)e人聽的懂五鲫。

在R語言里面是可以直接創(chuàng)建文件夾的,鼠標(biāo)右擊也可以

dir.create("00_data_read_in_one_file") #創(chuàng)建新的文件夾,確保文件夾排在第一位

遍歷和復(fù)制,為什么從2開始岔擂,因?yàn)榈谝粋€(gè)文件夾你已經(jīng)知道了

for (dirname in dir()[2:length(dir())]){  
  file <- list.files(dirname,pattern = "*.counts")  #找到對應(yīng)文件夾中的內(nèi)容位喂,pattern可以是正則表達(dá)式
  file.copy(paste0(dirname,"/",file),"00_data_read_in_one_file")  #復(fù)制內(nèi)容到新的文件夾
}

運(yùn)行完了之后,我們可以打開文件夾看一下乱灵,確實(shí)在里面塑崖,這時(shí)候可以全部選擇,

將文件解壓到data_unzip文件夾,解壓數(shù)據(jù)1.42GB痛倚,

我們發(fā)現(xiàn)即使這個(gè)樣子规婆,文件的名稱也是怪怪的
那我們就來轉(zhuǎn)換,轉(zhuǎn)換的信息藏在metadata文件中蝉稳,這個(gè)要去看開始的那個(gè)帖子下載

切換一下工作目錄

setwd("~/skill_practice/BRCA_999")

注意一開始我就建立了 BRCA_999這個(gè)文件夾抒蚜, data_download_from_gdc是他的子文件夾, 00_data_read_in_one_file又是 data_download_from_gdc的子文件夾 metadata是json格式的

讀入json格式的文件,他是一個(gè)1208行耘戚,15列的數(shù)據(jù)框

metadata <- jsonlite::fromJSON("metadata.cart.2017-11-15T09_56_59.722935.json")

我們轉(zhuǎn)換的信息就是兩列filename和associatedentities削锰,我們把它選出來

require(dplyr)
metadata_id <- metadata %>% 
  dplyr::select(c(file_name,associated_entities)) 

我需要的是 file_name和樣本名稱,樣本名稱藏在了 associated_entities 列表中里面包括了 entity_id, case_id, entity_submitter_id, entity_type這四個(gè)項(xiàng)目毕莱,查看第一個(gè)了解一下

metadata$associatedentities[1] [[1]]
 entityid caseid 1 52033f64-1e6f-4657-a4fb-7cfeffc61951 39de7761-e762-4811-b95c-8216b79ae06b entitysubmitterid entitytype 1 TCGA-AN-A0XW-01A-11R-A109-07 aliquot

現(xiàn)在的想法是我把filename和 associated_entities中的 entity_submitter_id提取出來器贩,做成一個(gè)數(shù)據(jù)框颅夺,然后我批量對應(yīng)轉(zhuǎn)換

naid_df <- data.frame()
for (i in 1:1208){
  naid_df[i,1] <- substr(metadata_id$file_name[i],1,nchar(metadata_id$file_name[i])-3)
  naid_df[i,2] <- metadata_id$associated_entities[i][[1]]$entity_submitter_id
}

現(xiàn)在把1208個(gè)小文件讀入一個(gè)矩陣文件,并且給每一個(gè)文件加上 filename和 entity_submitter_id 論壇有道題目就是處理的這個(gè)問題

生信編程直播第四題:多個(gè)同樣的行列式文件合并起來

http://www.biotrainee.com:8080/thread-603-1-1.html

我自己也給出了R語言的解法

在R語言中將多個(gè)同樣的行列式文件合并起來

http://guoshipeng.com/2017/11/10/14-R-for-binding-colums/

但是當(dāng)時(shí)不知道蛹稍,TCGA的單個(gè)文件是沒有列名的吧黄,導(dǎo)致無法合并,所以本次要復(fù)雜一點(diǎn)

讀入所有解壓的文件 1208個(gè)

nameList <- list.files("data_unzip/")
location <- which(naid_df==nameList[1],arr.ind = TRUE) ##which函數(shù)有一個(gè)已知value返回坐標(biāo)的功能
TCGA_id <- as.character(naid_df[location[1],2]) ##通過坐標(biāo)唆姐,獲取TCGA_id
expr_df<- read.table(paste0("data_unzip/",nameList[1]),stringsAsFactors = F, header = F) #讀入第一個(gè)文件拗慨,保存為data.frame
names(expr_df) <- c("gene_id",TCGA_id) #給剛才數(shù)據(jù)庫命名

這邊開始批量作業(yè)

for (i in 2:length(nameList)){
  location <- which(naid_df==nameList[i],arr.ind = TRUE)
  TCGA_id <- as.character(naid_df[location[1],2])
  dfnew <- read.table(paste0("data_unzip/",nameList[i]),stringsAsFactors = F,header = F)
  names(dfnew) <- c("gene_id",TCGA_id)
  expr_df <- inner_join(expr_df,dfnew,by="gene_id")
}

晚上走的時(shí)候沒運(yùn)行完,早上來的時(shí)候已經(jīng)完畢奉芦,限速環(huán)節(jié)應(yīng)該是read.table赵抢,早上再來嘗試運(yùn)行一次總是說內(nèi)存不夠 我嘗試了一下fread來解決這個(gè)問題:

require(data.table)
nameList <- list.files("data_unzip/")
location <- which(naid_df==nameList[1],arr.ind = TRUE)
TCGA_id <- as.character(naid_df[location[1],2])
expr_df<- fread(paste0("data_unzip/",nameList[1]))
names(expr_df) <- c("gene_id",TCGA_id)
for (i in 2:length(nameList)){
  location <- which(naid_df==nameList[i],arr.ind = TRUE)
  TCGA_id <- as.character(naid_df[location[1],2])
  dfnew <- fread(paste0("data_unzip/",nameList[i]))
  names(dfnew) <- c("gene_id",TCGA_id)
  expr_df <- inner_join(expr_df,dfnew,by="gene_id")
}

結(jié)果大概2分鐘搞定,速度喜人IΑ7橙础!先巴! 總共60488行,查看最后幾行發(fā)現(xiàn)有5行不是我們要的

tail(expr_df$gene_id,10)

去掉最后五行

expr_df <- expr_df[1:(length(expr_df$gene_id)-5),]

保存數(shù)據(jù)其爵,大概是3個(gè)G左右

save(expr_df,file = "expr_df.Rda")

下面開始id轉(zhuǎn)換,信息在GTF文件中表達(dá)矩陣?yán)锩娴膅ene_id有小數(shù)點(diǎn)伸蚯, 而GTF文件中沒有,調(diào)整一下摩渺,先以“.”分列,在去掉小數(shù)點(diǎn)后的列

require(dplyr)
require(tidyr)
expr_df_nopoint <- expr_df %>% 
  tidyr::separate(gene_id,into = c("gene_id","drop"),sep="\\.") %>% 
  dplyr::select(-drop)
save(expr_df_nopoint,file = "expr_df_nopoint.Rda")
load(file = "expr_df_nopoint.Rda")

下載GTF文件來注釋 ftp://ftp.ensembl.org/pub/release-90/gtf/homo_sapiens

安裝包:

source("https://bioconductor.org/biocLite.R")
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
biocLite("rtracklayer")
biocLite("SummarizedExperiment")

讀入GTF數(shù)據(jù)

gtf1 <- rtracklayer::import('Homo_sapiens.GRCh38.90.chr.gtf')
gtf_df <- as.data.frame(gtf1)

保存數(shù)據(jù)

save(gtf_df,file = "gtf_df.Rda")

讀入27個(gè)變量剂邮,2612129個(gè)觀測摇幻,測試一下顯示的不錯(cuò)

test <- gtf_df[1:5,]
View(test)

進(jìn)展的很快,我們現(xiàn)在可以提取mRNA的表達(dá)矩陣?yán)玻?以gtf文件中的 gene_biotype為標(biāo)準(zhǔn)挥萌,里面寫 protein_coding的就是編碼基因

首先要把這些基因提取出來绰姻,然后與表達(dá)譜融合,我在這個(gè)例子還提取了 gene_name, gene_id瑞眼,所以最后的時(shí)候,我把三種表達(dá)方式合在了一起 這樣棵逊,以后我無論用什么方式都可以選出我要的基因了

require(dplyr)
require(tidyr)
mRNA_exprSet <- gtf_df %>% 
  dplyr::filter(type=="gene",gene_biotype=="protein_coding") %>% #篩選gene,和編碼指標(biāo)
  dplyr::select(c(gene_name,gene_id,gene_biotype)) %>% 
  dplyr::inner_join(expr_df_nopoint,by ="gene_id") %>% 
  tidyr::unite(gene_id,gene_name,gene_id,gene_biotype,sep = " | ")

得到19688行伤疙,跟我們的認(rèn)知很吻合

保存數(shù)據(jù)

save(mRNA_exprSet,file = "mRNA_exprSet.Rda")

下面進(jìn)行標(biāo)準(zhǔn)化

suppressPackageStartupMessages(library(DESeq2))
suppressPackageStartupMessages(library(edgeR))

本次使用的方法是DESeq2中vst法 至于有哪幾種方法,還有該選什么方法辆影,明天會(huì)有一個(gè)帖子介紹

制作metadata徒像,區(qū)別腫瘤和正常組,這時(shí)候需要對TCGA的id有個(gè)了解蛙讥,從左往右數(shù)數(shù)锯蛀,第14,15上的數(shù)字很重要 其中01-09是tumor,也就是癌癥樣本次慢;其中10-29是normal旁涤,也就是癌旁

metadata <- data.frame(names(mRNA_exprSet)[-1])
for (i in 1:length(metadata[,1])) {
  num <- as.numeric(substring(metadata[i,1],14,15))
  if (num %in% seq(1,9)) {metadata[i,2] <- "T"}
  if (num %in% seq(10,29)) {metadata[i,2] <- "N"}
}

加個(gè)名稱

names(metadata) <- c("TCGA_id","sample")

將sample轉(zhuǎn)化成factor

metadata$sample <- as.factor(metadata$sample)

我們可總結(jié)一下,有112例normal翔曲,1096例腫瘤組織

metadata %>% dplyr::group_by(sample) %>% summarise(n())

保存數(shù)據(jù),我想問一下劈愚,為什么你老是要保存數(shù)據(jù)瞳遍,因?yàn)槲已劾锍:瑴I花

save(metadata,file = "metadata.Rda")

制作countData

mycounts <- mRNA_exprSet
keepGene=rowSums(edgeR::cpm(mycounts[-1])>0) >=2
table(keepGene);dim(mycounts)

這是數(shù)據(jù)維度19668 和1209

dim(mycounts[keepGene,])

剩余19546 1209

mycounts <-mycounts[keepGene,]
構(gòu)建 DESeq對象

dds <-DataSetFromMatrix(countData=mycounts, 
                              colData=metadata, 
                              design=~sample,
                              tidy=TRUE)

標(biāo)準(zhǔn)化vst法,5分鐘

vsd <- vst(dds, blind = FALSE)
mRNA_exprSet_vst <- as.data.frame(assay(vsd))
save(mRNA_exprSet_vst,file = "mRNA_exprSet_vst.Rda")

load(file = "dds.Rda")
下面就是完整的過程

  dds <- DESeq(dds)
  save(dds,file = "dds_DEseq.Rda")
  res <- results(dds, tidy=TRUE) #獲取結(jié)果
  res <- as_tibble(res)
  require(dplyr)
  res <- res %>%
    separate(row,c("symbol","ensemble","genetype"),sep = " \\| ") %>%
    dplyr::select(- c(ensemble,genetype)) %>%
    arrange(desc(abs(log2FoldChange))) %>% #排序菌羽。為了去重
    distinct(symbol,.keep_all = TRUE) %>%
    arrange(desc(log2FoldChange))#再次按照log2FoldChange從大到小排序
  save(res,file = "result.Rda")

既然做了差異分析掠械,那對下游基因注釋就是順手 的事情啦,我們沒有選擇注祖,就用Y叔的包猾蒂,clusterprofiler 在這之前我們需要獲得差異基因列表 這一步,就是基本數(shù)據(jù)框的基本操作是晨,按照pvalue和fc來排序肚菠,選擇自己一定數(shù)量的基因,數(shù)量你來定署鸡,最終得到基因列表gene(我沒有演示案糙,需要自己做)

加載包,加載之前確定自己裝了

library(DOSE)
library(GO.db)
library(org.Hs.eg.db)
library(topGO)
library(GSEABase)
library(clusterProfiler)

基因名稱轉(zhuǎn)換靴庆,返回的是數(shù)據(jù)框

gene = bitr(gene, fromType="SYMBOL", toType="ENTREZID", OrgDb="org.Hs.eg.db")
head(gene)

GO分析 細(xì)胞組分

ego_CC <- enrichGO(gene = gene$ENTREZID,
                  OrgDb= org.Hs.eg.db,
                  ont = "CC",
                  pAdjustMethod = "BH",
                  minGSSize = 1,
                  pvalueCutoff = 0.01,
                  qvalueCutoff = 0.01,
                  readable = TRUE)
生物過程

ego_BP <- enrichGO(gene = gene$ENTREZID,
                  OrgDb= org.Hs.eg.db,
                  ont = "BP",
                  pAdjustMethod = "BH",
                  minGSSize = 1,
                  pvalueCutoff = 0.01,
                  qvalueCutoff = 0.01,
                  readable = TRUE)
分子功能:

ego_MF <- enrichGO(gene = gene$ENTREZID,
                  OrgDb= org.Hs.eg.db,
                  ont = "MF",
                  pAdjustMethod = "BH",
                  minGSSize = 1,
                  pvalueCutoff = 0.01,
                  qvalueCutoff = 0.01,
                  readable = TRUE)
作圖

barplot(ego_CC, showCategory=20,title="EnrichmentGO_CC")#條狀圖时捌,按p從小到大排的
dotplot(ego_BP,title="EnrichmentGO_BP_dot")#點(diǎn)圖,按富集的數(shù)從大到小的
KEGG分析

kk <- enrichKEGG(gene = gene$ENTREZID,
                organism ="human",
                pvalueCutoff = 0.01,
                qvalueCutoff = 0.01,
                minGSSize = 1,
                #readable = TRUE ,
                use_internal_data =FALSE)
作圖

barplot(kk)
dotplot(kk)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炉抒,一起剝皮案震驚了整個(gè)濱河市奢讨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焰薄,老刑警劉巖拿诸,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異塞茅,居然都是意外死亡亩码,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門野瘦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來描沟,“玉大人,你說我怎么就攤上這事鞭光±袅” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵惰许,是天一觀的道長席覆。 經(jīng)常有香客問我,道長汹买,這世上最難降的妖魔是什么佩伤? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任聊倔,我火速辦了婚禮,結(jié)果婚禮上畦戒,老公的妹妹穿的比我還像新娘方库。我一直安慰自己,他們只是感情好障斋,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布纵潦。 她就那樣靜靜地躺著,像睡著了一般垃环。 火紅的嫁衣襯著肌膚如雪邀层。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天遂庄,我揣著相機(jī)與錄音寥院,去河邊找鬼。 笑死涛目,一個(gè)胖子當(dāng)著我的面吹牛秸谢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播霹肝,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼估蹄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沫换?” 一聲冷哼從身側(cè)響起臭蚁,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎讯赏,沒想到半個(gè)月后垮兑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漱挎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年系枪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磕谅。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡私爷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怜庸,到底是詐尸還是另有隱情当犯,我是刑警寧澤垢村,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布割疾,位于F島的核電站,受9級特大地震影響嘉栓,放射性物質(zhì)發(fā)生泄漏宏榕。R本人自食惡果不足惜拓诸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望麻昼。 院中可真熱鬧奠支,春花似錦、人聲如沸抚芦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叉抡。三九已至尔崔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間褥民,已是汗流浹背季春。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留消返,地道東北人载弄。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像撵颊,于是被迫代替她去往敵國和親宇攻。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容