本篇主要內(nèi)容
本篇主要介紹兩種方法稽煤,搜索并批量下載ENCODE數(shù)據(jù)徘层。
方法一:在頁面中搜索并獲取下載地址
-
進(jìn)入ENCODE portal主頁:https://www.encodeproject.org/孵淘。
-
點(diǎn)擊matrix吗讶,在搜索框搜索缸剪。比如“ctcf chip-seq k562” 。同時(shí)可以點(diǎn)擊頁面左方導(dǎo)航欄進(jìn)行過濾息楔。
-
點(diǎn)擊切換到列表模式。
-
點(diǎn)擊頁面中的Download扒披,下載一個(gè)名為files.txt的文件值依。這個(gè)文件的第一行是頁面中所有文件的metadata。從第二行開始就是下載鏈接了碟案。使用wget或者curl可以直接下載愿险。
方法二:寫代碼搜索后批量下載
可以發(fā)現(xiàn)方法一中的files.txt的URL有相同的模式(BASE_URL + QUERY)。
BASE_URL= 'https://www.encodeproject.org'
QUERY = '/files/[accession number]/@@download/[accession number].[format]'
那么對于一個(gè)Experiment价说,我們?nèi)绾潍@取所有原始文件和結(jié)果文件(fastq辆亏,bam,bed等)的下載地址(QUERY)呢鳖目?
舉例來說扮叨,我們點(diǎn)擊方法一中搜索得到第一個(gè)實(shí)驗(yàn)(Experiment),accession number為ENCSR000BNK疑苔,
可以通過在URL后面加上?format=json查看這個(gè)實(shí)驗(yàn)的所有metadata(JSON格式)甫匹,頁面地址為
https://www.encodeproject.org/experiments/ENCSR000BNK/?format=json
我們需要的下載鏈接(QUERY),就是其中的一個(gè)名為href的metadata惦费。
寫代碼搜索下載的實(shí)質(zhì)就是通過RESTful API同ENCODE的metadata數(shù)據(jù)庫交互兵迅,取得我們需要的metadata(以JSON的格式),然后獲取文件下載地址“href”薪贫。
直接上代碼恍箭,使用上述的ENCSR000BNK為例:
import requests, json
# 要求服務(wù)器返回JSON格式數(shù)據(jù)
HEADERS = {'accept': 'application/json'}
# BASE_URL是通用前綴,QUERY是定制的查詢
# type=file 查詢的是file類型的對象
# file_format=bed 指定下載文件內(nèi)容
# dataset=/experiments/ENCSR000BNK/ 指定下載的Experiment accession number
# limit=all 不加這個(gè)參數(shù)只能返回前25個(gè)結(jié)果
# frame=object 獲取object的全部metadata
BASE_URL = 'https://www.encodedcc.org/search/?'
QUERY ='type=file&dataset=/experiments/ENCSR000BNK/
&file_format=bed&limit=all&frame=object'
# 用GET命令向服務(wù)器請求結(jié)果
response = requests.get(BASE_URL+QUERY, headers=HEADERS)
# 將JSON格式轉(zhuǎn)換成python的字典dict格式瞧省。response_json_dict儲存所有的metadata
response_json_dict = response.json()
# 打印查看結(jié)果
print(json.dumps(response_json_dict, indent=4, separators=(',', ': ')))
# 定義下載函數(shù)
def download_file(url):
local_filename = url.split('/')[-1]
r = requests.get(url, stream=True)
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
f.flush()
return local_filename
# 返回href信息并下載
for file_dict in response_json_dict['@graph']:
print(file_dict['href'])
fn = download_file(FILE_URL+file_dict['href'])
# /files/ENCFF002CLT/@@download/ENCFF002CLT.bed.gz
# /files/ENCFF653WEF/@@download/ENCFF653WEF.bed.gz
# /files/ENCFF678TFE/@@download/ENCFF678TFE.bed.gz
# /files/ENCFF001UJN/@@download/ENCFF001UJN.bed.gz
# /files/ENCFF001UJO/@@download/ENCFF001UJO.bed.gz
# /files/ENCFF081QMM/@@download/ENCFF081QMM.bed.gz
# /files/ENCFF036DBK/@@download/ENCFF036DBK.bed.gz
# /files/ENCFF943BRX/@@download/ENCFF943BRX.bed.gz
這樣文件就下載到本地了扯夭。
參考信息:
ENCODE REST API:https://www.encodeproject.org/help/rest-api/
ENCODE DCC github:https://github.com/ENCODE-DCC
注:
這是一個(gè)包含四篇文章的小專欄鳍贾,內(nèi)容分別為:
- 介紹ENCODE計(jì)劃的數(shù)據(jù)體系(data model)
- 批量下載ENCODE portal的數(shù)據(jù)(附示例代碼)
- 學(xué)習(xí)ENCODE的官方數(shù)據(jù)處理流程(pipeline)(附代碼倉庫列表)
- ENCODE項(xiàng)目數(shù)據(jù)分析培訓(xùn)課程的資源(附下載鏈接)