#vcf #数据分析 #命令行工具 #csv #gz #字段 #转换

bin+lib tidyvcf

将 VCF 文件转换为制表符/逗号分隔表的命令行工具

10 个不稳定版本 (3 个破坏性更新)

0.4.0 2023 年 8 月 28 日
0.3.0 2023 年 8 月 28 日
0.2.5 2023 年 8 月 27 日
0.2.4 2023 年 5 月 15 日
0.1.1 2021 年 11 月 22 日

#7 in #gz

每月 34 次下载

MIT/Apache

115KB
327

#+title: tidyVCF #+author: Jamie D Matthews

=tidyVCF= 是一个小工具,用于将 VCF 文件转换为整洁的制表符/逗号分隔表,非常适合使用 R 的 =tidyverse= 或 Julia 的 =DataFrames= 生态系统进行下游分析。默认情况下包含所有字段,使命令行保持简单。=tidyVCF= 使用纯 Rust 编写,依赖于 [[https://github.com/zaeleus][@zaeleus]] 和其他贡献者开发的优秀的 =noodles-vcf= crate。

警告:/基于不稳定 API 构建,缺乏适当测试,在 VCF 规范轻微违规时容易出错。

** 安装 *** Cargo

#+begin_example cargo install tidyvcf #+end_example

*** 预构建的二进制文件

待定。

*** Docker

#+begin_src bash docker pull registry.gitlab.com/jdm204/tidyvcf:latest #+end_src

  • 用法 ** 基本用法

使用 =-c= / =--csv= 输出 CSV,默认为 TSV

#+begin_example tidyvcf -i test.vcf -c -o test.csv #+end_example

通过文件扩展名检测 BGZF 压缩的 VCF 文件并自动处理

#+begin_example tidyvcf -i test.vcf.gz -o test.tsv #+end_example

如果处理来自 =stdin= 的压缩数据,请使用 =--bgzip= 标志

#+begin_example cat test.vcf.gz | tidyvcf --bgzip -o test.tsv #+end_example

要写入压缩 TSV,请为 =--output= 文件使用 .gz 扩展名或传递 =-z= / =--out-gz= 选项。

#+begin_example tidyvcf -i test.vcf.gz --csv -o test.csv.gz #+end_example

** 多个样本:堆叠或笛卡尔

通常会对几个相关的样本一起进行变异调用,这会产生包含多个 '基因型' 或 =FORMAT= 字段集的 VCF 文件,每个样本一个。默认情况下,=tidyvcf= 将样本名称连接到格式字段名称,使用下划线 ('_') 字符 - =S1_GT S1_DP S2_GT S2_DP...=。

=--format-delim= 选项允许更改样本-格式字段分隔符

#+begin_example tidyvcf -i test.vcf --format-delim '~' -o test.tsv #+end_example

此行为违反了 [[https://r4ds.had.co.nz/tidy-data.html][整洁数据]] 原则——为了避免这种情况,我们可以将样本堆叠到行中,但这会重复每个样本的静态和 =INFO= 列。

堆叠样本

#+begin_example tidyvcf -i test.vcf --stack -o test_stacked.tsv #+end_example

** 信息前缀

为了避免 =INFO= 和 =FORMAT= 列的字段名冲突,默认情况下 =INFO= 字段名称使用字符串 "info_" 作为前缀——此行为可以通过 =--info-prefix= 选项进行调整

#+begin_example tidyvcf -i test.vcf --info-prefix 'i' -c -o test.csv #+end_example

** VEP =CSQ= 信息字段分割

如果你的VCF文件已经通过Ensembl的变异效应预测器进行了注释,你可以使用=-v=或=--vep-fields=标志来将这些字段提取到单独的列中。

#+begin_example tidyvcf -i vep.vcf.gz --vep-fields -o vep.tsv #+end_example

默认情况下,输出VEP列名以"vep_"为前缀,以避免名称冲突(例如=CSQ/VAF=和=FMT/VAF=)。此字符串可以通过=--vep-prefix=选项进行自定义。

#+begin_example tidyvcf -i vep.vcf.gz --vep-fields --vep-prefix '.' -o vep.tsv #+end_example

注:只有每个记录的第一个注释转录本会被分割,其他的会被打包到名为=CSQ_other_transcripts=的额外列中。

** 不符合规范的VCF文件

noodles rust库在这样一个生态系统中强调正确性,而在这种生态系统中,这并非总是标准,因此实际上它拒绝了许多不符合规范的变异调用器生成的VCF文件。=tidyvcf=附带=-l=或=--lenient=选项,该选项在转换之前尝试使用硬编码的替换规则修复不符合规范的标题。目前,此选项足以转换由=octopus=等生成的VCF文件。如果您发现此选项对其他不符合规范但基本良好的VCF文件没有帮助,请随时提出问题。

** 在Snakemake工作流程中

以下是一个使用容器的示例规则。请注意,必须使用=--use-singularity=调用=snakemake=才能在容器中运行规则。

#+begin_src python rule tidyvcf: input: "some.vcf", output: "some.tsv", params: "--lenient -v" container: "docker://registry.gitlab.com/jdm204/tidyvcf:latest", shell: "tidyvcf -i {input} -o {output} {params}" #+end_src

  • 与其他软件的比较 :PROPERTIES: :CUSTOM_ID: comparison-with-other-software :END: | 功能 | =tidyVCF= | =rbt vcf-to-txt= | =bcftools -f= | =gatk VariantsToTable= | |----------------------------------------+------------+---------------------------------------------+------------------------+------------------------| | 包含所有字段 | 默认 | 个别指定;目前没有=FILTER= | 个别指定 | 个别指定 | | 包含字段子集 | ❌ | 个别指定;目前没有=FILTER= | 个别指定 | 个别指定 | | 长格式 | =--stack= | ❌ | ❌ | ❌ | | 可管道 | ✓ | ✓ | ✓ | ❌ | | 压缩输入无外部工具 | ✓ | ❌ | ✓ | ? | | bcf输入 | ❌ | ❌ | ✓ | ? |

依赖关系

~6MB
~106K SLoC