专栏名称: 生信媛
生信媛,从1人分享,到8人同行。坚持分享生信入门方法与课程,持续记录生信相关的分析pipeline, python和R在生物信息学中的利用。内容涵盖服务器使用、基因组转录组分析以及群体遗传。
目录
相关文章推荐
51好读  ›  专栏  ›  生信媛

学习生信必须掌握的技能-第一部分

生信媛  · 公众号  · 生物  · 2019-08-21 15:56

正文

请到「今天看啥」查看全文


《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 可以快速地创建结构化的文件

    
         


  1. $ echo dog -{ gone , bowl , bark }

  2. dog - gone dog - bowl dog - bark


  3. $ mkdir - p zmays - snps /{ data / seqs , scripts , analysis }



  4. $ touch seqs / zmays { A , B , C } _R { 1 , 2 }. fastq

  5. $ ls seqs /

  6. zmaysA_R1 . fastq zmaysB_R1 . fastq zmaysC_R1 . fastq

  7. zmaysA_R2 . fastq zmaysB_R2 . fastq zmaysC_R2 . fastq


  8. $ touch zmays { A .. C } _R { 1 , 2 }. fastq

  9. $ ls *. fastq

  10. zmaysA_R1 . fastq zmaysB_R1 . fastq zmaysC_R1 . fastq

  11. 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这种还是可以正常匹配的。

    
         

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


    1. $ touch snps_ { 10. . 13 }. txt


    2. $ ls *. txt

    3. snps_10 . txt snps_11 . txt snps_12 . txt snps_13 . txt


    4. $ ls snps_ [ 10 - 13 ]. txt

    5. ls : cannot access 'snps_[10-13].txt' : No such file or directory


    6. $ ls snps_ { 10. . 13 }. txt

    7. snps_10 . txt snps_11 . txt snps_12 . txt snps_13 . txt


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


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


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

      
           


    1. $ ls - l

    2. - rw - r -- r -- 1 vinceb staff 0 Feb 21 21 : 24 genes - 1.txt

    3. - rw - r -- r -- 1 vinceb staff 0 Feb 21 21 : 24 genes - 11.txt

    4. - rw - r -- r -- 1 vinceb staff 0 Feb 21 21 : 24 genes - 12.txt

    5. - rw - r -- r -- 1 vinceb staff 0 Feb 21 21 : 24 genes - 13.txt

    6. - rw - r -- r -- 1 vinceb staff 0 Feb 21 21 : 24 genes - 14.txt


    7. $ ls - l

    8. - rw - r -- r -- 1 vinceb staff 0 Feb 21 21 : 23 genes - 001.txt

    9. - rw - r -- r -- 1 vinceb staff 0 Feb 21 21 : 23 genes - 002.txt

    10. [...]

    11. - rw - r -- r -- 1 vinceb staff 0 Feb 21 21 : 23 genes - 013.txt

    12. - rw - r -- r -- 1 vinceb staff 0 Feb 21 21 : 23 genes - 014.txt

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

    阅读原文体验更加







    请到「今天看啥」查看全文


    推荐文章
    程序员大咖  ·  打造自己的Python编码环境
    8 年前
    七台河网  ·  黑龙江有谁认识酒桌上这位大哥?
    8 年前
    娜姐的光影笔记  ·  从你等他回复开始,就是网恋了
    8 年前