美文网首页生物信息数据科学
22.《Bioinformatics-Data-Skills》之

22.《Bioinformatics-Data-Skills》之

作者: DataScience | 来源:发表于2021-06-15 08:53 被阅读0次

    《Bioinformatics-Data-Skills》之检验数据完整性

    检查数据的完整性有以下好处:

    1. 大型数据在传输过程中由于网络波动等问题有可能会出现数据几个bit丢失的情况,检查数据的完整性可以保证数据的一致性;
    2. 通过数据的完整性检查我们也可以确定结果是否发生了变化,确定是否需要重新运行代码;
    3. 通过数据的完整性也有利于研究的可重现,可以使用文件校验和来作为数据版本(git commit ID)。

    这里我们介绍一下数据完整性检验和SHA-1与MD5的使用以及对比文件区别的命令。

    SHA与MD5

    SHA-1与MD5码是非常类似的,前者出现更晚也更倾向于被采用(Github就是使用SHA-1码作为commit ID)。

    相同的内容计算得到的SHA-1码是确定的,即使只有一个字节的不同,计算出来的SHA-1码也会不同。对于任意的内容都可以使用shasum命令生成一个确定性的40位的SHA-1码:

    echo "bioinformatics is interesting" | shasum
    # 724b8c1fb2328b121bfcc7e68cdf31b94f3e7fa3  -
    echo "bioinformatic is interesting"| shasum
    # ea2e3f1ff9a8db12c283cd0e0186bafbb99198dc  -
    

    即使只有一个bit的差别,sha-1码都会不同。

    可以通过如下的方式生成一个文件的SHA-1码:

    shasum zmaysA_R1.fastq
    # 506f25f62a7e5acfb4b5f866a570e78e4efd638a  zmaysA_R1.fastq
    

    对于大量文件,对每个文件分别对比SHA-1码非常麻烦。可以

    1. 将所有文件的SHA-1码存放于一个专门的文件:
    shasum *fastq > fastq_checksum.sha
    
    1. 然后在检查文件的完整性的时候通过-c(check)参数直接调用SHA-1码文件:
    shasum -c fastq_checksum.sha
    
    # zmaysA_R2.fastq: OK
    # zmaysB_R1.fastq: OK
    # zmaysB_R2.fastq: OK
    # zmaysC_R1.fastq: OK
    # zmaysC_R2.fastq: FAILED
    # shasum: WARNING: 1 computed checksum did NOT match
    

    注意:你可能会好奇,SHA-1作为只有40位的16进制数字不可能包括所有文件内容的可能性,是有可能出现不同的文件对应同一SHA-1编码的冲突的。但是理论上来讲SHA-1码冲突的可能性只有1/16^40,远远低于文件出错的概率,所以可以采用这种方式来检验文件完整性。

    diff

    当我们发现两个文件的sha-1码不同的时候,并不清楚这种差别存在多大的影响。此时可以通过diff命令确定结果的差别,此命令的效果与git diff类似。例如比较gene-1与gene-2文件的区别:

    diff -u gene-1.bed gene-2.bed
    
    # --- gene-1.bed  2021-05-27 15:23:06.867475200 +0800
    # +++ gene-2.bed  2021-05-27 15:23:06.867475200 +0800
    # @@ -1,22 +1,19 @@
    #  1      6206197 6206270 GENE00000025907
    #  1      6223599 6223745 GENE00000025907
    #  1      6227940 6228049 GENE00000025907
    # +1      6222341 6228319 GENE00000025907
    #  1      6229959 6230073 GENE00000025907
    # -1      6230003 6230005 GENE00000025907
    #  1      6233961 6234087 GENE00000025907
    #  1      6234229 6234311 GENE00000025907
    #  1      6206227 6206270 GENE00000025907
    #  1      6227940 6228049 GENE00000025907
    #  1      6229959 6230073 GENE00000025907
    # -1      6230003 6230073 GENE00000025907
    # +1      6230133 6230191 GENE00000025907
    #  1      6233961 6234087 GENE00000025907
    #  1      6234229 6234399 GENE00000025907
    #  1      6238262 6238384 GENE00000025907
    # -1      6214645 6214957 GENE00000025907
    #  1      6227940 6228049 GENE00000025907
    #  1      6229959 6230073 GENE00000025907
    # -1      6230003 6230073 GENE00000025907
    #  1      6233961 6234087 GENE00000025907
    #  1      6234229 6234399 GENE00000025907
    # -1      6238262 6238464 GENE00000025907
    #  1      6239952 6240378 GENE00000025907
    
    • -u参数给出结果的展示方式(unified diff format,类似git diff),
    • 前2行给出两个文件的前缀(原始文件为---,修改后文件为+++)与修改时间。
    • 第三行给出两个文件的长度。
    • 第4行之后为内容变动情况,空格1代表没有改变,+1的+号代表添加,-1的-号代表删除,+-号相邻代表此行内容改变。

    相关文章

      网友评论

        本文标题:22.《Bioinformatics-Data-Skills》之

        本文链接:https://www.haomeiwen.com/subject/yloaeltx.html