Snakemake
前段时间参与整了个命令行和R语言转换的工具,发paper时被审稿人怼说snakemake比咱的更好,气得我连夜学习。
发现确实比我的好😅
1. 简介
Snakemake 是一种基于 Python 的工作流管理系统,用于构建可复现、可扩展的科学计算流程。比如要对一众数据集进行一系列同种操作,可以把操作流程打包,给所有数据集集体应用,就不必一个个重复操作。
2. 用法
创建一个文件 Snakefile(没有后缀):
# 规则1:最终目标
rule all:
input:
"final_report.txt"
# 规则2:下载数据
rule download_data:
output:
"raw_data.txt" # 这个规则会生成 raw_data.txt
shell:
"echo '假设这里是原始数据' > {output}" # 模拟下载数据
# 规则3:处理数据
rule process_data:
input:
"raw_data.txt" # 需要 raw_data.txt 作为输入
output:
"processed_data.txt" # 会生成 processed_data.txt
shell:
"echo '处理后的数据' > {output}"
# 规则4:生成报告
rule make_report:
input:
"processed_data.txt"
output:
"final_report.txt" # 最终目标
shell:
"echo '最终报告' > {output}"
要运行,则输入:
snakemake --cores 1
--cores 参数用来限制整个工作流同时使用的CPU核心总数。
rule的执行顺序:download_data → process_data → make_report
- Snakemake 看到
rule all 需要 final_report.txt
- 找哪个规则能生成
final_report.txt?找到 rule make_report
make_report 需要 processed_data.txt
- 找哪个规则能生成
processed_data.txt?找到 rule process_data
process_data 需要 raw_data.txt
- 找哪个规则能生成
raw_data.txt?找到 rule download_data
download_data 不需要任何输入,开始执行!
3. rule的结构
规则大致结构为:
rule 规则名:
input: "输入文件"
output: "输出文件"
shell: "要执行的命令"
input:这个规则需要什么文件才能运行
output:这个规则会生成什么文件
shell:实际要执行的命令行命令
这里的shell表示运行shell命令。此外还有:
script: "scripts/myscript.py"表示运行现有脚本,支持:
notebook: "notebooks/plot-histogram.py.ipynb"表示jupyter笔记
run:后面直接写要运行的python语句