TCGA学习01:数据下载与整理

前言交代

1、学习参考

之前参加了生信技能树花花老师的TCGA数据挖掘试讲课,收获很多,最近整理一下上课笔记,同时参考了老师的简书相关教程。生信入门的朋友也可微信加入生信星球公众号,个人觉得很好的一个学习平台。一起来学习吧~

2、笔记内容

(1)在TCGA公共数据库,下载某一类癌症的某一种RNA的count数据,以及相应的病人临床信息;
(2)根据count数据进行差异分析,结合病人临床信息进行生存分析以及建模预测

课程还介绍有几点更深入的研究,就不记录了,可以参看老师的简书教程。

3、学习目标

TCGA的大致流程;R操作.....

第一步:数据下载与整理

1、下载

1.1 官网下载“脚本”文件
  • (1)进入GDC官网的repository条目https://portal.gdc.cancer.gov/repository

  • (2)先在case选项中分别选择Primary Site(癌症位置)、Programme(选TCGA),还可以再选Project,我这里没选
    出于小样本量考虑,选了testis的site,后来查了下原来是.......

    case
  • (3)基于选择的case,在file选项中选择miRNAcount数据(因为小),注意改下名字,避免冲突,下同。

    miRNA count数据
  • (4)基于选择的case,在file选项中选择病人临床信息数据,注意要是bcr xml格式

    image.png

这里注意一下count矩阵信息有157个样本;临床信息则只有135份,对差异分析应该没影响;不知道会对后面生存分析等会不会有影响,存疑。
还有会注意到上面下载的两个文件只有几十KB大小,因为仅仅是类似下载“脚本”的文件,还需要利用GDC提供的程序下载到本地。

  • (5)下载程序有不同系统版本,在https://gdc.cancer.gov/access-data/gdc-data-transfer-tool选择适合自己系统的,一般window的R中提供的terminal终端使用window版本即可。下载代码如下:

mkdir mirna clinical
head gdc_manifest.2020-05-02.clinical.txt
./gdc-client download -m gdc_manifest.2020-05-02.mirna.txt -d mirna/
# -d表示储存路径
./gdc-client download -m gdc_manifest.2020-05-02.clinical.txt -d clinical/
# 切换到R
length(dir("./clinical/"))  #统计子目录数
length(dir("./mirna/"))
  • 以上两种数据文件就下载好了,但需要整理成我们想要的表达矩阵与临床信息的文件类型。

老师教程还提供了另外两种下载方式,基于R包实现的。但GDC下载还是比较常用的。

2、整理

2.1 整理临床信息
library(XML)  #clinical临床信息为xml格式,我们目的转换成df
result <- xmlParse("./clinical/0f133012-23ef-4237-acfd-47b132b99775/nationwidechildrens.org_clinical.TCGA-W5-AA2Q.xml")
rootnode <- xmlRoot(result)
rootsize <- xmlSize(rootnode)  #结果显示有两个节点
print(rootnode[2])  #病人信息在第二部分
xmldataframe <- xmlToDataFrame(rootnode[2])  #转换成df,发现是长长的一行
head(t(xmlToDataFrame(rootnode[2])))
临床信息很多
xmls = dir("clinical/",pattern = "*.xml$",recursive = T)
#目的是取出所有的xml文件,pattern = "*.xml$"用正则表达式匹配;recursive = T表示递归模式。
head(xmls) #是带路径的
head(xmls)
td = function(x){
  result <- xmlParse(file.path("clinical/",x))  #补成全路径
  rootnode <- xmlRoot(result)
  xmldataframe <- xmlToDataFrame(rootnode[2])[c(
    'bcr_patient_barcode',
    'vital_status',
    'days_to_death',
    'days_to_last_followup',
    'race_list',
    'days_to_birth',
    'gender' ,
    'stage_event'
  )]
  return(t(xmldataframe))  #返回每个病人的信息df
}  #编写小函数,批量处理
cl = lapply(xmls,td)  # xmls即为td函数的x,lapply逐个处理,结果储存在cl列表中
do.call(cbind,cl)

cl_df <- t(do.call(cbind,cl))  #将所有病人信息合并
cl_df[1:3,1:3]
class(cl_df) #为矩阵
clinical = data.frame(cl_df)
rownames(clinical) <- stringr::str_to_upper(clinical$bcr_patient_barcode)
clinical <- clinical[,-1]
dim(clinical)
clinical[1:4,1:4]
最终的clinical数据
2.2 整理表达矩阵
length(dir("./mirna/"))   #157
x = read.table("mirna/01b6ce76-61a8-4bc4-b0d7-f69d4ce187d6/3fa67c62-6856-42fe-a9f1-fa6831f42b53.mirbase21.mirnas.quantification.txt"
               ,header = TRUE)
head(x)
原始每个样本表达矩阵信息
mis = dir("mirna/",pattern = "*tification.txt$",recursive = T)
mis
length(mis)
#同样先取名
ex = function(x){
  result <- read.table(file.path("mirna/",x),sep = "\t",header = TRUE)[,1:2]
  return(result)
}

#批量读取函数
mi = lapply(mis,ex)   #结果是第一列为基因名,第二列为count数的两列数据
mi_df <- t(do.call(cbind,mi))  #合并并转置,因为45个病人所以90行
dim(mi_df)
tmp = mi_df[1:4,1:4]
tmp
tmp
colnames(mi_df) <- mi_df[1,]   #添加列名
mi_df[1:4,1:5]
#奇数列(基因名)是重复多余的,只保留偶数列
mi_df <- mi_df[seq(2,nrow(mi_df),2),]
dim(mi_df)
mi_df[1:4,1:4]
#转为数值型
mi_df <- apply(mi_df, 2, as.numeric)
mi_df[1:4,1:4]
mi_df
  • 表达矩阵基本成形,但会发现致命的缺点--没有行名,即病人信息,目前只知道原始矩阵的文件名(见上head(xmls)图),但不是我们需要的病人ID类型,因此还要回GDC网站下载相应的json文件,里面包含有名称对应关系。

  • 下载方法(如下图):选择count或临床信息时,全选加入购物车,点击购物车,然后点击Metadata即可。这里因为是给表达矩阵加行名,所以选择count数据的157个样本到购物车。

    下载json文件
#接下来利用json文件给表达矩阵加上行名----
dim(mi_df)
meta <- jsonlite::fromJSON("metadata.cart.2020-05-02.157.json")
#观察到associated_entities列中每一格都是一个df,里面存放着病人的各种相关ID;
#其中entity_submitter_id即我们想要的,meta有157行,就对上了
meta$associated_entities[[1]]
meta里的id
entity <- meta$associated_entities
#取第四列,为列表,包含4个元素,每个元素为一个df
class(entity[157])
entity[[157]][4]
class(entity)
jh = function(x){
  as.character(x[4])
}   #取df中的entity_submitter_id,即我们最终想给矩阵加上的样本名
jh(entity[[1]])
ID = sapply(entity,jh)   #取得了所有的病人ID
head(ID)
image.png
options(stringsAsFactors = F)
file2id = data.frame(file_name = meta$file_name,
                     #meta中file_name列即为我们下的mrna的文件名字
                     ID = ID)
#file2id表格157行2列,即储存着我们想要的文件名与ID的对应关系
head(mis)  #mis文件是我们下载mrna的gz文件的递归路径,注意是有顺序的
head(mis)
#注意mis的样本顺序与之前表达矩阵样本顺序相同
mis2 = stringr::str_split(mis,"/",simplify = T)[,2]   #取文件名
mis2[1] %in% file2id$file_name #序列匹配与否
#接下来就要把file2id列表按mis2排序,再把病人ID加到表达矩阵上

#match(A,B)
head(match(mis2,file2id$file_name))
#排序可以验证一下,match返回值的第一个是38,意思mis2的第一个元素是file2id$file_name的第38个元素。
mis2[1] == file2id$file_name[38]
row_tcga = file2id[match(mis2,file2id$file_name),]
#调整file2id行顺序以适应我们下载的miran数据
#如上match(mis2,file2id$file_name)第一个值为4;就把第四行放到第一行
rownames(mi_df) = row_tcga$ID #最后一步
#给mi_df添加行名
mi_df[1:4,1:4]
mi_df[1:4,1:4]
expr = t(mi_df)
dim(expr)
expr = expr[apply(expr, 1, function(x) {
  sum(x > 1) > 9  #过滤掉低表达基因
}), ]
dim(expr)
group_list=ifelse(as.numeric(substr(colnames(expr),14,15)) < 10,'tumor','normal')
# 01转为tumor,大于10转为normal
table(group_list)  #只有tumor样本
# group_list
# tumor
# 157
group_list <- factor(group_list,levels = c("normal","tumor"))  #分组因子
  • 为什么01转为tumor,大于10转为normal呢?参考癌症类型和样本代号详解TCGA一文中,Sample号从01-29的,其中01-09是tumor,也就是癌症样本;其中10-29是normal,也就是癌旁。

    TCGA编号
  • 不过遗憾的是我尝试找的两个小样本癌中都是只有tumor样本(<10),就是说不能做差异分析了,就暂时先用花花老师的数据吧。

save(expr,clinical,group_list,file = "gdc.Rdata")
  • 综上,我们一共得到三个文件,用于接下来的分析

    表达矩阵&样本信息&分组信息
  • 不足之处:(1)表达矩阵与样本信息数量不同;(2)表达矩阵全是tumor样本。

(0)

相关推荐

  • TCGA-miRNA批次矫正后数据集介绍

    前段时间,我们对于批次效应有关的东西进行了一些介绍.其中包括 [[批次效应]] [[批次效应去除工具]] 对于经常使用的TCGA数据库而言,同样也有批次效应存在.对于这样的批次,在公布之前也经过一定的 ...

  • ccRCC数据分析-GSE66270-GPL570

    数据集介绍 GEO链接:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE66270 芯片平台:GPL570,  [HG-U133_Plus_ ...

  • 数据挖掘课程能带给你什么收获

    以下是正文 1.R与Rstudio 主要是学习到了会创建project啊,之前不会如此高效整理自己的项目....都是直接复制粘贴代码进去,所以各种报错,唉. 然后自从开了别人的一个文件project之 ...

  • 使用不匹配的gtf版本信息会导致近一半ID无法转化

    太多人有这样的疑问,为什么自己进行ID转换的时候,成功率很低,今天就为你解惑. 当我们遇到了这样一个表达矩阵(其实就是从tcga数据库下载,通过ucsc的xena浏览器啦): dim(exprSet) ...

  • 仅仅是改变了统计学显著性呢?还是说改变了其本性

    然后很多粉丝留言说,如果并不是按照表达量中位值或者平均值分组,而是取巧使用了surv_cutpoint这样的函数,得到的结果并不好解释,认为这样的的数据处理方式简直是黑白颠倒! 我看到了这样的留言,确 ...

  • TCGAbiolinks数据下载TCGA数据

    欢迎来到医科研,这里是白介素2的读书笔记,跟我一起聊临床与科研的故事. TCGAbiolinks数据下载TCGA数据 下载TCGA数据的方法有很多,但比较好用的包我认为就是TCGAbiolinks,T ...

  • TCGA的28篇教程-GTEx数据库-TCGA数据挖掘的好帮手

    长期更新列表: 使用R语言的cgdsr包获取TCGA数据(cBioPortal)TCGA的28篇教程- 使用R语言的RTCGA包获取TCGA数据 (离线打包版本)TCGA的28篇教程- 使用R语言的R ...

  • 手把手教你下载TCGA数据(代码+视频+答疑+服务)

    现在TCGA数据下载的代码满天飞,例如以使用TCGAbiolinks下载为例: if (!requireNamespace("BiocManager", quietly = TRU ...

  • TCGA官方数据挖掘文章教你机器学习or深度学习

    本笔记来源于福建医科大学研究生 前些日子,老师给了我一份大纲并让我重启一下机器学习的系列,但是我看完之后发现,可能是由于老师在写大纲的时间比较早,并且也长时间没更新,导致内容略微有些过时,于是我打算用 ...

  • 转录组学习二(数据下载)

    转录组学习一(软件安装)转录组学习二(数据下载)转录组学习三(数据质控)转录组学习四(参考基因组及gtf注释探究)转录组学习五(reads的比对与samtools排序)转录组学习六(reads计数与标 ...

  • 二年级数学下册 培优课堂01 数据收集整理 P2 人教版

    二年级数学下册 培优课堂01 数据收集整理 P2 人教版

  • TCGA数据下载方式小结

    之前对TCGA做了简单的了解,粗略了解了什么是TCGA,TCGA是做什么的等,接下来肯定是要学会如何下载TCGA数据,毕竟只有下载了数据才能继续学习 官网常规下载 TCGA自2016年改版后,下载方式 ...

  • UCSC xena 浏览器才是最简单的TCGA数据下载途径

    不知道为什么总是有人问我TCGA数据下载这么简单的问题,这问题简单到如何下载人类的hg19.fa这个参考基因组一下,就是http://hgdownload.cse.ucsc.edu/goldenpat ...

  • TCGA的28篇教程- 数据下载就到此为止吧

    长期更新列表: 使用R语言的cgdsr包获取TCGA数据(cBioPortal)TCGA的28篇教程- 使用R语言的RTCGA包获取TCGA数据 (离线打包版本)TCGA的28篇教程- 使用R语言的R ...

  • TCGA数据下载—TCGAbiolinks包参数详解

    TCGA是目前使用最多的肿瘤组学数据库,虽然群主已经录制TCGA系列视频教程: 悄咪咪的上线了TCGA知识图谱视频教程(B站和YouTube直达) 里面也提到了各种下载工具,但是作为学徒的我,学习过后 ...

  • tcga数据下载

    各位科研芝士的朋友,大家好,今天我们继续分享关于TCGA数据下载的专题,之前给大家推出了四个推文,全部是无代码进行数据下载,如果我们想进一步提升自己的水平,那我们从今天开始,开启R语言编程下载TCGA ...

  • TCGA数据下载与ID转换

    咱公众号也不能只做一个系列,所以经过深思熟虑,打算将来慢慢增加一些内容,主要有以下几个系列 TCGA数据分析系列 GEO数据分析系列 "老板给一个基因,我该怎么办"系列 文献阅读系 ...