压缩算法的本质
最近碰到一个神奇的现象,一份大小为16GB的xx.vcf.gz
文件,解压之后体积变为600GB的vcf
文件,为什么一份文件经过压缩后体积缩小了这么多?
(work) [bio @ notes 21:29:40 ~/work/20230726/data]
$ ls -lh
总用量 620GB
-rw-rw-r--. bio 16G 7月 26 21:23 xx.vcf.gz
-rw-r--r--. bio 604G 7月 19 14:16 xx.vcf
压缩这个词联想到压缩机,就是把空气进行物理加压,减小占用的体积,这种方法利用的是单个分子之间的可变间隙,像挤海绵一样把一个大东西压缩成小东西。很显然,计算机中的数据肯定不是这种方式。
另外一种方式,通过字典来压缩,比较抽象了,笔者举一个例子:有一本新华字典,理论上每个字都能找到唯一对应的页数+行数+列数,将这个数字用来替代实际的汉字。
接下来,我想压缩一本三国演义全篇小说,只需要用数字替换汉字,就能降低篇幅大小,这样誊抄(类似于复制传输)时就方便很多。这也算是变相的对文字信息进行了压缩,计算机主要是通过这种方式进行压缩。
问题: 为什么vcf文件经过gzip压缩为vcf.gz后文件体积能极大程度的缩小?
原理概述
因为gzip是一种有效的压缩算法,它可以利用重复出现的模式和冗余信息,将数据进行编码和压缩,从而减少数据的存储空间。
重复模式:
在VCF文件中,可能存在大量的重复信息,比如在多个位点上的质量分数或者过滤标记可能会重复出现,gzip能够识别这些重复模式,并使用更短的编码方式来表示它们,从而减少存储空间。
字典压缩:
gzip使用了Lempel-Ziv编码来构建一个字典,用于存储出现过的字符序列。每当发现与字典中的序列匹配时,gzip只需记录一个指向字典中的索引,而不是实际存储相同的字符序列,这进一步减小了数据的体积。
基因组数据特点:
基因组数据中通常包含大量的连续性和相关性,这使得gzip等压缩算法能够更好地发挥压缩效果。基因组的染色体序列以及突变位点等数据具有较高的相似性,使得gzip能够更好地识别并压缩这些信息。
综上所述,gzip能够高效地将VCF文件中的数据进行压缩,从而将文件的体积显著缩小。这对于基因组学研究和大规模数据存储非常有用,节省了存储空间,减少了数据传输时间,并且使数据的备份和传输更加高效。
VCF文件补充介绍
本文中提到的vcf文件是存储基因型变异数据的常用格式,VCF(Variant Call Format)通常用于存储个体或群体的基因组数据,其中包含了多个基因突变位点的信息。VCF文件常见于基因组学研究和生物信息学分析中,特别是在单核苷酸多态性(SNP)、插入/缺失(InDel)等变异的分析中。
基本格式和信息
文件头(Header):
VCF文件以文件头开始,以"#"开头的行为注释行,包含了关于VCF文件本身和数据来源的信息。文件头通常包括样本信息、参考基因组版本、标记信息等。
元数据信息(Metadata):
文件头中可能包含多个元数据信息,用于描述VCF文件的属性、来源和其他相关信息。一些常见的元数据标记包括"fileformat"(指定VCF文件的版本)、"INFO"(用于描述位点的信息)、"FORMAT"(用于描述样本的信息格式)等。
数据区域(Data):
VCF文件的数据区域包含了每个基因突变位点的具体信息,每行对应一个位点。数据区域中的每个字段以制表符(Tab)分隔,字段的顺序和含义由文件头中的元数据定义。
- CHROM:染色体名称或编号。
- POS:位点在染色体上的位置。
- ID:位点的唯一标识符,可以是rs号(对应dbSNP数据库的标识符)或其他独立标识符。
- REF:参考基因组上的碱基。
- ALT:变异的碱基或碱基序列。如果存在多个变异(如多态性位点),则用逗号分隔。
- QUAL:质量分数,表示位点的可靠性或置信度。
- FILTER:过滤标记,表示该位点是否通过了质量控制过滤。
- INFO:包含更多关于位点的附加信息,通常以键值对的形式表示。例如,可能包含关于突变类型、突变功能、频率等信息。
- FORMAT:描述样本数据的格式,通常由一系列字段组成。
- Sample1, Sample2, ...:每个样本的基因型数据,根据FORMAT字段指定的格式进行描述。
以下为一个vcf文件示例:
##fileformat=VCFv4.3
##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT Sample1 Sample2
chr1 1001 rs123 A G 50.0 PASS DP=30 GT 0/1 1/1
chr1 2034 . T C,G 60.0 PASS DP=40 GT 1/2 2/2
在上述示例中,第一个位点在染色体1的位置1001处,具有rs号为rs123,参考碱基为A,变异碱基为G,质量分数为50.0,通过了质量控制过滤。
INFO字段包含了一个键值对"DP=30",表示总深度为30。FORMAT字段指定了样本数据的格式,这里是"GT"(基因型)。接下来的两列分别是两个样本的基因型数据。
常见压缩方法补充介绍
当我们需要传输或存储大量的文件或数据时,压缩算法可以帮助我们将文件体积缩小,从而节省存储空间和传输时间。以下是zip、tar和rar这几种常见压缩算法的通俗介绍以及它们之间的区别:
zip:
原理:zip是一种常见的归档和压缩算法。它将多个文件和目录打包成一个压缩包,并对其中的每个文件进行独立压缩。zip使用Deflate算法,这是一种结合了LZ77和Huffman编码的压缩算法,类似于gzip,但zip支持多个文件的压缩和归档。
特点:zip是跨平台的,几乎在所有操作系统上都可以使用。它是Windows系统上常用的压缩格式。
tar:
原理:tar是一种归档工具,它可以将多个文件和目录打包成一个单一的文件,但并不压缩数据。tar采用顺序地将所有文件和目录串联在一起的方式创建归档文件。
特点:tar通常与其他压缩算法(如gzip或bzip2)结合使用,先用tar打包成一个大的归档文件,然后再使用其他算法对该归档文件进行压缩。
rar:
原理:rar是一种专有的压缩算法,由WinRAR软件开发。它使用了类似于zip的算法,但采用了更加复杂的压缩策略,可以在某些情况下实现更高的压缩率。
特点:rar格式在某些情况下可能比zip格式具有更好的压缩效果,特别是对于大型压缩文件。然而,由于它是专有格式,可能在某些平台或系统上不支持或需要额外的软件。
总结
-
gzip:单个文件压缩,常用于Unix/Linux系统。 -
zip:多个文件压缩和归档,跨平台支持,常用于Windows系统。 -
tar:打包多个文件,但不压缩数据,通常结合其他压缩算法使用。 -
rar:类似于zip,但使用了专有算法,有时可以获得更好的压缩效果。
本文由 mdnice 多平台发布