【r<-包|数据集|公开数据库】UCSCXenaTools包用法介绍——搜索与下载TCGA、GDC、ICGC等公开数据库数据集

96
王诗翔 Db3aaf4f effd 43dc 9137 d6bf7f70211e
0.5 2018.08.07 14:46* 字数 1175

UCSCXenaTools包提供了一个UCSC Xena接口,可以获取一些UCSC Xena存储的信息,包括GDC、TCGA、ICGC、GTEx、CCLE等近10个数据库的上千个数据集。特别是TCGA(hg19版本)的一部分数据UCSC做了非常好的标准化处理,下载即可用。

如果你发现问题或者更新的Xena Hub,不妨通知我。

https://xenabrowser.net/datapages/可以查看目前Xena提供的数据集。

安装

Github上安装,运行下面代码

if(!require(devtools)){
    install.packages("devtools", dependencies = TRUE)
}

devtools::install_github("ShixiangWang/UCSCXenaTools")

最近的v1.1.0在之前的基础上改动了不少,如果使用install.package()可能安装的是老版本,最近半个月推荐使用Github安装的方式。

导入

library(UCSCXenaTools)

使用方法

使用UCSCXenaTools获取Xena数据集数据可以分为5个步骤,分别有函数实现其功能:

  • 生成XenaHub对象 - XenaGenerate()函数
  • 过滤和筛选数据集 - XenaFilter()函数
  • 执行数据下载链接的检索 - XenaQuery()函数
  • 下载数据 - XenaDownload()函数
  • 将数据导入R - XenaPrepare()函数

XenaData 数据框

为了不让用户每次都耗损时间在数据的寻找上,我生成了一个XenaData的数据框,它目前存储了接近1600个数据集的信息。

data(XenaData)

head(XenaData)
#>                         XenaHosts XenaHostNames
#> 1 https://ucscpublic.xenahubs.net     publicHub
#> 2 https://ucscpublic.xenahubs.net     publicHub
#> 3 https://ucscpublic.xenahubs.net     publicHub
#> 4 https://ucscpublic.xenahubs.net     publicHub
#> 5 https://ucscpublic.xenahubs.net     publicHub
#> 6 https://ucscpublic.xenahubs.net     publicHub
#>                                     XenaCohorts
#> 1 Acute lymphoblastic leukemia (Mullighan 2008)
#> 2 Acute lymphoblastic leukemia (Mullighan 2008)
#> 3 Acute lymphoblastic leukemia (Mullighan 2008)
#> 4                   Breast Cancer (Caldas 2007)
#> 5                   Breast Cancer (Caldas 2007)
#> 6                   Breast Cancer (Caldas 2007)
#>                                               XenaDatasets
#> 1    mullighan2008_public/mullighan2008_500K_genomicMatrix
#> 2 mullighan2008_public/mullighan2008_public_clinicalMatrix
#> 3    mullighan2008_public/mullighan2008_SNP6_genomicMatrix
#> 4              Caldas2007/chinSF2007_public_clinicalMatrix
#> 5             Caldas2007/chinSFGenomeBio2007_genomicMatrix
#> 6                   Caldas2007/naderi2007Exp_genomicMatrix

通过对这个数据框进行过滤和筛选,我们只要保留需要下载的子集即可,是不是很方便,很R?

生成XenaHub对象

默认,XenaGenerate()会使用所有XenaData展示的数据集生成XenaHub对象。

XenaGenerate()
#> class: XenaHub 
#> hosts():
#>   https://ucscpublic.xenahubs.net
#>   https://tcga.xenahubs.net
#>   https://gdc.xenahubs.net
#>   https://icgc.xenahubs.net
#>   https://toil.xenahubs.net
#>   https://pancanatlas.xenahubs.net
#>   https://xena.treehouse.gi.ucsc.edu
#>   https://pcawg.xenahubs.net
#>   https://atacseq.xenahubs.net
#>   https://singlecell.xenahubs.net
#> cohorts() (140 total):
#>   Acute lymphoblastic leukemia (Mullighan 2008)
#>   Breast Cancer (Caldas 2007)
#>   Breast Cancer (Chin 2006)
#>   ...
#>   human brain transcriptome (Darmanis PNAS 2015)
#>   mouse cortex and hippocampus (Zeisel Science 2015)
#> datasets() (1646 total):
#>   mullighan2008_public/mullighan2008_500K_genomicMatrix
#>   mullighan2008_public/mullighan2008_public_clinicalMatrix
#>   mullighan2008_public/mullighan2008_SNP6_genomicMatrix
#>   ...
#>   Zeisel/Zeisel_expression_mRNA_log2
#>   Zeisel/Zeisel_expression_phenotype

我们将范围缩小些,比如只要TCGA data hub的数据集。

XenaGenerate(subset = XenaHostNames=="tcgaHub")
#> class: XenaHub 
#> hosts():
#>   https://tcga.xenahubs.net
#> cohorts() (38 total):
#>   TCGA Acute Myeloid Leukemia (LAML)
#>   TCGA Adrenocortical Cancer (ACC)
#>   TCGA Bile Duct Cancer (CHOL)
#>   ...
#>   TCGA Thyroid Cancer (THCA)
#>   TCGA Uterine Carcinosarcoma (UCS)
#> datasets() (879 total):
#>   TCGA.LAML.sampleMap/HumanMethylation27
#>   TCGA.LAML.sampleMap/HumanMethylation450
#>   TCGA.LAML.sampleMap/Gistic2_CopyNumber_Gistic2_all_data_by_genes
#>   ...
#>   TCGA.UCS.sampleMap/Pathway_Paradigm_RNASeq_And_Copy_Number
#>   TCGA.UCS.sampleMap/mutation_curated_broad

XenaHostNamesXenaData的列名之一,其他列也可以用于筛选。

除此之外,UCSCXenaTools引入了管道符号,所以,也可以用下面的方式:


library(dplyr)

XenaData %>% 
    filter(XenaHostNames == "tcgaHub", grepl("BRCA", XenaCohorts), grepl("Path", XenaDatasets)) %>%
    XenaGenerate()
#> class: XenaHub 
#> hosts():
#>   https://tcga.xenahubs.net
#> cohorts() (1 total):
#>   TCGA Breast Cancer (BRCA)
#> datasets() (4 total):
#>   TCGA.BRCA.sampleMap/Pathway_Paradigm_mRNA_And_Copy_Number
#>   TCGA.BRCA.sampleMap/Pathway_Paradigm_RNASeq
#>   TCGA.BRCA.sampleMap/Pathway_Paradigm_RNASeq_And_Copy_Number
#>   TCGA.BRCA.sampleMap/Pathway_Paradigm_mRNA

这里结合了dplyr操作、模式匹配,使用非常方便。

过滤

上一部分已经讲了怎么筛选自己想要的数据集,但如果已经生成了XenaHub对象,XenaFilter()还是提供了修改的可能,而且支持模式匹配。

我们先抓取所有的临床数据:

(XenaFilter(xe, filterDatasets = "clinical") -> xe2)
#> class: XenaHub 
#> hosts():
#>   https://tcga.xenahubs.net
#> cohorts() (37 total):
#>   TCGA Acute Myeloid Leukemia (LAML)
#>   TCGA Adrenocortical Cancer (ACC)
#>   TCGA Bile Duct Cancer (CHOL)
#>   ...
#>   TCGA Thyroid Cancer (THCA)
#>   TCGA Uterine Carcinosarcoma (UCS)
#> datasets() (37 total):
#>   TCGA.LAML.sampleMap/LAML_clinicalMatrix
#>   TCGA.ACC.sampleMap/ACC_clinicalMatrix
#>   TCGA.CHOL.sampleMap/CHOL_clinicalMatrix
#>   ...
#>   TCGA.THCA.sampleMap/THCA_clinicalMatrix
#>   TCGA.UCS.sampleMap/UCS_clinicalMatrix

然后只选择肺癌的看看:

XenaFilter(xe2, filterDatasets = "LUAD|LUSC|LUNG") -> xe2

上面的操作也可以直接使用管道符号:

xe %>% 
    XenaFilter(filterDatasets = "clinical") %>% 
    XenaFilter(filterDatasets = "luad|lusc|lung")
#> class: XenaHub 
#> hosts():
#>   https://tcga.xenahubs.net
#> cohorts() (3 total):
#>   TCGA Lung Adenocarcinoma (LUAD)
#>   TCGA Lung Cancer (LUNG)
#>   TCGA Lung Squamous Cell Carcinoma (LUSC)
#> datasets() (3 total):
#>   TCGA.LUAD.sampleMap/LUAD_clinicalMatrix
#>   TCGA.LUNG.sampleMap/LUNG_clinicalMatrix
#>   TCGA.LUSC.sampleMap/LUSC_clinicalMatrix

检索下载

选好了数据,接下来是获取下载链接,该步骤使用XenaQuery()实现。

xe2_query = XenaQuery(xe2)
#> This will check url status, please be patient.
xe2_query
#>                                                                                                hosts
#> https://tcga.xenahubs.net/download/TCGA.LUAD.sampleMap/LUAD_clinicalMatrix https://tcga.xenahubs.net
#> https://tcga.xenahubs.net/download/TCGA.LUNG.sampleMap/LUNG_clinicalMatrix https://tcga.xenahubs.net
#> https://tcga.xenahubs.net/download/TCGA.LUSC.sampleMap/LUSC_clinicalMatrix https://tcga.xenahubs.net
#>                                                                                                           datasets
#> https://tcga.xenahubs.net/download/TCGA.LUAD.sampleMap/LUAD_clinicalMatrix TCGA.LUAD.sampleMap/LUAD_clinicalMatrix
#> https://tcga.xenahubs.net/download/TCGA.LUNG.sampleMap/LUNG_clinicalMatrix TCGA.LUNG.sampleMap/LUNG_clinicalMatrix
#> https://tcga.xenahubs.net/download/TCGA.LUSC.sampleMap/LUSC_clinicalMatrix TCGA.LUSC.sampleMap/LUSC_clinicalMatrix
#>                                                                                                                                                      url
#> https://tcga.xenahubs.net/download/TCGA.LUAD.sampleMap/LUAD_clinicalMatrix https://tcga.xenahubs.net/download/TCGA.LUAD.sampleMap/LUAD_clinicalMatrix.gz
#> https://tcga.xenahubs.net/download/TCGA.LUNG.sampleMap/LUNG_clinicalMatrix https://tcga.xenahubs.net/download/TCGA.LUNG.sampleMap/LUNG_clinicalMatrix.gz
#> https://tcga.xenahubs.net/download/TCGA.LUSC.sampleMap/LUSC_clinicalMatrix https://tcga.xenahubs.net/download/TCGA.LUSC.sampleMap/LUSC_clinicalMatrix.gz

下载数据

默认,数据会下载到临时目录(因为CRAN政策不允许操作用户的目录)。

xe2_download = XenaDownload(xe2_query)
#> All downloaded files will under directory /var/folders/mx/rfkl27z90c96wbmn3_kjk8c80000gn/T//RtmpmyLO1F.
#> The 'trans_slash' option is FALSE, keep same directory structure as Xena.
#> Creating directories for datasets...
#> Downloading TCGA.LUAD.sampleMap/LUAD_clinicalMatrix.gz
#> Downloading TCGA.LUNG.sampleMap/LUNG_clinicalMatrix.gz
#> Downloading TCGA.LUSC.sampleMap/LUSC_clinicalMatrix.gz

如果数据集下载一半卡死了,使用force=TRUE强制重新下载。

这里另外有一个问题,Xena上面数据集的ID是带目录符号/的,因为不同队列的文件分了不同的目录存放,当前UCSCXenaTools默认也会支持这种目录结构。但有时候我们想要把下载的所有文件都放到同一个文件夹里面,可以将 trans_slash 设置为TRUE,文件路径的所有/都会被转换为__,这样就能实现了(最开始就是默认使用这种方式,不过现在更改了)。

记住该函数是有返回结果的,这个结果可以帮助你讲数据导入R。

导入R

有4种方式可以进行导入,用户根据情况使用。

# way1:  directory
cli1 = XenaPrepare("E:/Github/XenaData/test/")
names(cli1)
## [1] "TCGA.LUAD.sampleMap__LUAD_clinicalMatrix.gz"
## [2] "TCGA.LUNG.sampleMap__LUNG_clinicalMatrix.gz"
## [3] "TCGA.LUSC.sampleMap__LUSC_clinicalMatrix.gz"
# way2: local files
cli2 = XenaPrepare("E:/Github/XenaData/test/TCGA.LUAD.sampleMap__LUAD_clinicalMatrix.gz")
class(cli2)
## [1] "tbl_df"     "tbl"        "data.frame"

cli2 = XenaPrepare(c("E:/Github/XenaData/test/TCGA.LUAD.sampleMap__LUAD_clinicalMatrix.gz",
                     "E:/Github/XenaData/test/TCGA.LUNG.sampleMap__LUNG_clinicalMatrix.gz"))
class(cli2)
## [1] "list"
names(cli2)
## [1] "TCGA.LUAD.sampleMap__LUAD_clinicalMatrix.gz"
## [2] "TCGA.LUNG.sampleMap__LUNG_clinicalMatrix.gz"
# way3: urls
cli3 = XenaPrepare(xe2_download$url[1:2])
names(cli3)
## [1] "LUSC_clinicalMatrix.gz" "LUNG_clinicalMatrix.gz"
# way4: xenadownload object
cli4 = XenaPrepare(xe2_download)
names(cli4)
#> [1] "LUAD_clinicalMatrix.gz" "LUNG_clinicalMatrix.gz"
#> [3] "LUSC_clinicalMatrix.gz"

如果导入的是多个文件,会形成一个列表,每个元素是一个tibble。如果是一个文件,导入就是tibble


这篇文章主要是为了简明地告诉大家如何使用UCSCXenaTools包进行数据集的下载。更多相关的函数和用法可以查看文档(https://shixiangwang.github.io/UCSCXenaTools/articles/USCSXenaTools.html)。

有了这么多公开的数据可以下载,如何挖掘其中的价值呢?为此,我在Openbiox社区创建了一个新的项目——XenaShiny(https://github.com/openbiox/XenaShiny),和5位成员一起创建一个Shiny应用,可以更方便地查看、筛选、操作、下载数据,后续还可以进行一系列分析功能的开发。

欢迎Star、点赞、提需求!

极客RrR<<-数据分析之道
18.8万字 · 18.6万阅读 · 538人关注
用点滴记录成长为极客R。 =================== R语言学习笔记、数据分析与解决方案、文章转载与资料分享。有些内容属于付费,如果大家觉得有用,希望支持一下。 ================= 反馈与交流: 如果文章内容有问题还请指正,在评论区留言。 如果有一些针对性的疑问,请在https://github.com/ShixiangWang/MessageBoard/issues创建issue
Web note ad 1