Bioinformatics Data Skills_tricks_Part I

《Bioinformatics Data Skills》据说是入门生信的必备书之一。最近抽了点时间看,发现里面的确有很多有意思的骚操作和建议。我这里简略地列出一些有意思的地方以及其对应的章节目录,大家感兴趣地可以去对应章节看。当然,时间充裕的话,建议大家读整本书。

Charpter 1

  • Write Code for Humans, Write Data for Computers 即代码要尽可能地写的友好一点,要考虑到以后的你和其他人还看不看得懂。但对应的,你所输出的格式必须要让计算机能够读取,即要符合一定的规范。

    关于代码的规范,作者给出了google的public style guides for many languages 这一编程范式。

  • Make Assertions and Be Loud, in Code and in Your Methods 即我们在写程序的时候,要将报错也考虑在内。这样万一出错的时候,就可以返回报错信息。关于返回报错信息,我们可以尝试用 Assertions

    几乎每个语言都会有自己的assert function。Python里面是assert(),而R里面是 stopifnot()

  • Use Existing Libraries Whenever Possible 即尽量地用现成的库去完成你的任务,因为现成的库已经发表了好久,也有很多人去使用并帮助debug。如果是自己写的话,可能会没有考虑到一些问题。就比如一个简单的核酸转蛋白的程序,我们可能只会考虑ATCG的核酸序列。但实际上,序列中还会存在NYW等。NYW这些字符都是在International Union of Pure and Applied Chemistry(IUPAC)里面的,是一些standard ambiguous nucleotides。

  • Treat Data as Read-Only 即最好你产生的数据都是只读的,你的后续分析都不是去修改数据,而是产生新的文件。这样对以后重新检查、重复分析流程等都会有帮助。

  • Recommendations for Reproducible Research 对于一个可重复的分析来说,document 是至关重要的,即尝试写README。我们应该学会在document加上软件、数据等相关信息。比如说软件的版本,数据是从哪里下的,数据的下载日期。如果可以的话,最好能在分析流程里面将结果图也放上去,便于你或者其他人后续的重复。R’s knitr和iPython 都可以帮助我们做到这一点。

Chapter 2

  • Project Directories and Directory Structures 在写一个脚本的时候,尽量用相对路径。这样,你的脚本不管放哪里,都可以运行了。

    关于相对路径和绝对路径这一点,我觉得是仁者见仁,智者见智的。

  • shell expansion 中有一种brace expansion可以快速地创建结构化的文件

    $ echo dog-{gone,bowl,bark}
    dog-gone dog-bowl dog-bark
    
    $ mkdir -p zmays-snps/{data/seqs,scripts,analysis}
    
    
    $ touch seqs/zmays{A,B,C}_R{1,2}.fastq
    $ ls seqs/
    zmaysA_R1.fastq zmaysB_R1.fastq zmaysC_R1.fastq
    zmaysA_R2.fastq zmaysB_R2.fastq zmaysC_R2.fastq
    
    $ touch zmays{A..C}_R{1,2}.fastq
    $ ls *.fastq
    zmaysA_R1.fastq  zmaysB_R1.fastq  zmaysC_R1.fastq
    zmaysA_R2.fastq  zmaysB_R2.fastq  zmaysC_R2.fastq
    
  • Wildcards(通配符)也是一种shell expansion,通配符最常见的语法是

    • * 代表任意数量的字符(但会忽略 .bashrc 这种点号开头的隐藏文件)

    • ? 代表单个字符

    • [A-Z] 可以匹配方括号里面的任意一个字符(比如[aeiou]),也可以匹配A-Z这26个大写字母([start-end]这种连续范围),也可以匹配0-9这种数字。但需要注意的是,匹配的是含有字母或数字的字符串

      按作者所说,snps_10.txt, snps_11.txt, snps_12.txt 这种是不能用snps_[10-13].txt 来匹配的,如果想要匹配的话,就要用brace expansion来做。即snps_{10..13}.txt 。不过R1,R2,R3这种还是可以正常匹配的。

      $ touch snps_{10..13}.txt
      
      $ ls *.txt
      snps_10.txt  snps_11.txt  snps_12.txt  snps_13.txt
      
      $ ls snps_[10-13].txt
      ls: cannot access 'snps_[10-13].txt': No such file or directory
      
      $ ls snps_{10..13}.txt
      snps_10.txt  snps_11.txt  snps_12.txt  snps_13.txt
      

      关于通配符,发现一篇阮一峰的命令行通配符教程

  • OS 和 linux 系统对于命令的参数数目(更准确来说是命令的长度)实际上是有限制的。这种“Argument list too long” 通常会出现在你用通配符匹配了太多的文件。

    这种解决方法在书的后面也提到了。

  • 我们可以用0021而非21来命名,这样在后续排序的时候会有好处。

    $ ls -l
    -rw-r--r-- 1 vinceb staff 0 Feb 21 21:24 genes-1.txt
    -rw-r--r-- 1 vinceb staff 0 Feb 21 21:24 genes-11.txt
    -rw-r--r-- 1 vinceb staff 0 Feb 21 21:24 genes-12.txt
    -rw-r--r-- 1 vinceb staff 0 Feb 21 21:24 genes-13.txt
    -rw-r--r-- 1 vinceb staff 0 Feb 21 21:24 genes-14.txt
    
    $ ls -l
    -rw-r--r-- 1 vinceb staff 0 Feb 21 21:23 genes-001.txt
    -rw-r--r-- 1 vinceb staff 0 Feb 21 21:23 genes-002.txt
    [...]
    -rw-r--r-- 1 vinceb staff 0 Feb 21 21:23 genes-013.txt
    -rw-r--r-- 1 vinceb staff 0 Feb 21 21:23 genes-014.txt
    

    所以你能看见像一些大的Project比如Ensemble,就是采取这种命名方式:ENSG00000164256

你可能感兴趣的:(Bioinformatics Data Skills_tricks_Part I)