简易tcga下载脚本

NGS学习笔记

Posted by zd200572 on January 2, 2018

如果你不懂代码,不懂网站规则,那么最简单的就是UCSC xena 浏览器啦!!!网站;https://xenabrowser.net/datapages/

看到jimmy总结的如此有规律的下载地址链接,我尝试用python写几句脚本下载一下tcga数据。

1.尝试用爬虫获得所有疾病条目

尝试写爬虫发现网页需要javascript,暂时没有搞定,于是偷个懒把内容从https://xenabrowser.net/datapages/?host=https://tcga.xenahubs.net复制下来保存为TCGA_names.txt。一共是39 Cohorts, 903 Datasets。

TCGA Acute Myeloid Leukemia (LAML)
TCGA Adrenocortical Cancer (ACC)
......

2. 把这些文本解析一下,变成下载地址

https://gdc.xenahubs.net/download/TCGA-LAML/Xena_Matrices/TCGA-LAML.htseq_counts.tsv.gz
https://gdc.xenahubs.net/download/TCGA-ACC/Xena_Matrices/TCGA-ACC.htseq_counts.tsv.gz

绝大部分文件的下载地址中,网址的规律是:https://gdc.xenahubs.net/download/TCGA-疾病名称/Xena_Matrices/TCGA-疾病名称-下载文件.tsv.gz

基本思路就是定义了两个函数完成这个事。第一个函数get_name()是用来从文本中获取疾病名的缩写,也就是这三十几种,因为下载地址就是用的缩写,利用split()函数获得。

import os

def get_name(file_in):
	name_list= []
	for line in file_in:
		if 'TCGA' in line:
			name_list.append(line.strip().split('(')\ [1].split(')')[0])
		return name_list

第二个函数是把下载地址补充完整,实现下载过程。首先看你需要的数据是哪几类,把网址里的文件名放在一个列表里。这里数据文件名和含义的对应关系是:

  • gene expression RNAseq(HTSeq)–htseq_counts
  • survival–survival
  • phenotype–GDC_phenotype
  • miRNA Expression Quantification–mirna
  • copy number–masked_cnv
  • MuSE Variant Aggregation and Masking–muse_snv
  • MuTect2 Variant Aggregation and Masking–mutect2_snv

然后是利用格式化字符串,实现网址的自动补全。最后,利用os.system()函数,调用wget命令完成,-c参数以实现断点续传。

def download_files(name_list):
	for name in name_list:
		file_list = ['htseq_counts', 'survival','GDC_phenotype', 'mirna', 'masked_cnv''muse_snv', 'mutect2_snv'] 
		for i in range(len(file_list)):
			cmd = 'wget -c https://gdc.xenahubs.net/download/TCGA-%s/Xena_Matrices/TCGA-%s.%s.tsv.gz' % (name, name, file_list[i])
			os.system(cmd)

最后,调用两个函数,完成下载过程。

file_in = open('TCGA_names.txt')
name_list = get_name(file_in)
download_files(name_list)

3.做个简陋的shiny控件

在循循善诱的群主启发下第一次学着用shiny,有点赶鸭子上架,哈哈。就参考着shiny的官方教程,做了个能有多简单就多简单的。

UI代码,就是按照官方示例框架,加上了内容:

# Define UI for miles per gallon application
shinyUI(pageWithSidebar(
  
  # Application title
  headerPanel("TCGA download url tool"),
  
  sidebarPanel(
    selectInput("variable", "Select One Caner:",
                list("Acute Myeloid Leukemia" = "LAML", 
                     "Adrenocortical Cancer" = "ACC",
                     ......
                 )),
    selectInput("var", "Select One Data:",
                list("gene expression RNAseq(HTSeq)" = "htseq_counts", 
                     "survival" = "survival", 
                     ......)),
    
    checkboxInput("outliers", "Show outliers", FALSE)
  ),
  
  mainPanel(
    textOutput("text1")#这个text1是和server代码相对应的变量名。
  )
))

Server端代码就是同样把地址拼接了一下,同样是简单修改自模板,开始空格问题没搞定,后来百度了个解决方案,但是提示语却也不能有空格了,只好用下划线代替:

library(shiny)

# Define server logic required to plot various variables against mpg
shinyServer(
  function(input, output)
    {
  output$text1 <- renderText( 
    gsub("([N ])", "", paste("Download_url_is:\nhttps://gdc.xenahubs.net/download/TCGA\
    -", input$variable,"/Xena_Matrices/TCGA\
    -",input$variable,".",input$var,".tsv.gz")) )  
  
}
)

最后来看看简陋的效果:

完整代码见github:https://github.com/zd200572/tcga_downloader