Snakemake是什么?
大多數(shù)生物信息初學(xué)者較早接觸的生物信息分析流程,大多數(shù)是用腳本語言(Perl、shell、R、Python等)將生物信息流程中的各個(gè)功能寫成一個(gè)個(gè)腳本,再用大腳本套小腳本的方式將整個(gè)流程打包封裝。這種方式對編程能力有很高的要求,否則很容易出現(xiàn)流程bug、無法監(jiān)控任務(wù)運(yùn)行狀態(tài)、無法有效查看任務(wù)日志等問題。等實(shí)驗(yàn)室終于出了個(gè)大牛將這些問題都解決了,可能大牛又要畢業(yè)了,新來的生信小白又只能看著層層疊疊的嵌套腳本“望洋興嘆”……
這時(shí)候就需要 Snakemake 閃亮登場了,因?yàn)閟nakemake可能是處理這類問題最簡單、有效的一個(gè)方法了。比如將流程像下圖這樣搭建起來,清晰明了:
PS:這張流程圖也是 snakemake 通過命令自動(dòng)生成的奧,具體命令后面會(huì)有介紹。

snakemake的用法介紹
Snakemake 是基于 Python 的一款工具,所以它也繼承了 Python 語言簡單易讀、邏輯清晰、便于維護(hù)的特點(diǎn),同時(shí)它還支持 Python 語法,非常適合新手用戶。snakemake 的基本組成單位叫“規(guī)則”,即 rule;每個(gè) rule 里面又有多個(gè)元素(input、output、run等)。它的執(zhí)行邏輯就是將各個(gè) rule 利用 input/output 連接起來,形成一個(gè)完整的工作流,當(dāng)檢測到 input,就執(zhí)行相應(yīng) rule;檢測到 output,就跳過相應(yīng)rule,根據(jù)這一規(guī)則,snakemake 還可以實(shí)現(xiàn)斷點(diǎn)續(xù)投。
01操作環(huán)境
本教程全程在Linux環(huán)境下完成,為了順利完成教程內(nèi)容,請準(zhǔn)備一個(gè)Linux環(huán)境。如果是windows用戶,可以安裝一個(gè)虛擬機(jī);如果是win10用戶,可以使用win10自帶的子系統(tǒng)(WSL)安裝Linux系統(tǒng)。
02軟件安裝
這里建議使用conda安裝軟件,可以輕松解決各種依賴問題。同時(shí)建議將本教程中用到的軟件安裝在一個(gè)新的conda環(huán)境中,以避免不同版本軟件間的依賴沖突。由于篇幅有限,conda的安裝方法不再贅述。
該命令創(chuàng)建了一個(gè)名為snakemake_env的conda環(huán)境,并在該環(huán)境中安裝了 snakemake 。
進(jìn)入 snakemake_env 環(huán)境,查看上面要安裝的軟件,可以發(fā)現(xiàn)都已將安裝完成。
如果你的conda安裝很慢或者獲取不了最新版本的軟件,可以使用下面的命令安裝:
03數(shù)據(jù)準(zhǔn)備
我們直接下載官網(wǎng)提供的測試數(shù)據(jù):
解壓后得到一個(gè) data 文件夾,目錄如下:
04創(chuàng)建工作流文件:Snakefile
PS:建議將工作流文件命名為 py 文件,這樣你在寫 Python 代碼時(shí)會(huì)有語法高亮奧。
05創(chuàng)建第一條規(guī)則 bwa
我們繼續(xù) dry run ?一下,可以加上 -p 參數(shù)讓終端打印出 shell 運(yùn)行的命令:
06使用通配符升級規(guī)則
上面的 bwa 規(guī)則僅僅比對了一個(gè)樣本,可是實(shí)際項(xiàng)目中有幾十上百的樣本時(shí),我們就不能這樣直接寫樣本名來運(yùn)行了,這樣很不 pythonic。snakemake 允許使用通配符(wildcard)來批量運(yùn)行命令,示例如下:
其中,我們使用通配符 {sample} 來匹配所有樣品,花括號里的 sample 也可以使用其他字符。然后再次 dry run:
07添加 sort 規(guī)則
比對完成之后需要使用 samtools 進(jìn)行排序,那我們就可以繼續(xù)寫下一個(gè)規(guī)則:
08建立索引
09添加 calling 規(guī)則
前面三步都是各個(gè)樣品批量、并行運(yùn)行同樣的步驟,所以可以全部使用通配符 {sample} 完成匹配;但在變異檢測這一步需要將所有樣本的bam文件傳遞給一個(gè)命令而不再并行,這種方法就不在適用了。針對這種情況,snakemake 有它獨(dú)特的解決辦法:
1. 首先在工作流文件開頭定義一個(gè)變量:
2. 然后使用 snakemake 的內(nèi)置函數(shù) expand:

10調(diào)用自己寫的腳本
11最重要的一條規(guī)則:all
前面我們已經(jīng)講過,snakemake 通過各個(gè)規(guī)則的輸入、輸出來確定執(zhí)行順序和依賴關(guān)系,snakemake 每次默認(rèn)執(zhí)行第一個(gè)規(guī)則之后,會(huì)通過該規(guī)則的依賴關(guān)系(輸入)來決定接下來執(zhí)行哪個(gè)規(guī)則。所以,為了將所有規(guī)則都調(diào)用起來,我們需要在工作流文件最開始寫下第一個(gè)規(guī)則:all 規(guī)則,來調(diào)取各支線最后一條規(guī)則的輸出,這樣層層遞推,就可以將所有關(guān)聯(lián)規(guī)則都調(diào)用起來。示例如下:
12生成可視化流程圖
Snakemake 可以將整個(gè)工作流以流程圖的形式導(dǎo)出(結(jié)合 dot 命令),文件格式可以使png、pdf等。命令如下:
13完整工作流

關(guān)注百邁客云,隨時(shí)隨地學(xué)習(xí)