UCSCXenaTools包提供了一个UCSC Xena接口,可以获取一些UCSC Xena存储的信息,包括GDC、TCGA、ICGC、GTEx、CCLE等近10个数据库的上千个数据集。特别是TCGA(hg19版本)的一部分数据UCSC做了非常好的标准化处理,下载即可用。
- UCSC Public Hub: https://ucscpublic.xenahubs.net
- TCGA Hub: https://tcga.xenahubs.net
- GDC Xena Hub: https://gdc.xenahubs.net
- ICGC Xena Hub: https://icgc.xenahubs.net
- Pan-Cancer Atlas Hub: https://pancanatlas.xenahubs.net
- GA4GH (TOIL) Hub: https://toil.xenahubs.net
- Treehouse Hub: https://xena.treehouse.gi.ucsc.edu
- PCAWG Hub: https://pcawg.xenahubs.net
- ATAC-seq Hub: https://atacseq.xenahubs.net
- Singel Cell Xena hub: https://singlecell.xenahubs.net
如果你发现问题或者更新的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
XenaHostNames
是XenaData
的列名之一,其他列也可以用于筛选。
除此之外,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、点赞、提需求!