前几天在知乎上,我看到了这么一个问题“如何自学生物信息学?”,看了一圈回答后,发现很多答主自己也是初学者,可能还在摸索中,回答也并没有真正抓到重点。作为一个过来人,我觉得这个问题其实还挺重要的,相信也困扰着不少人,因此在这里我想尝试回答一下这个问题。
什么是生物信息学
生物信息学与以往的传统生物学不同,它本身是一个混合体,而且在今天看来它应当还要包含现在的NGS和基因组学。我认为,它重在数据,因此在这个领域中 比较重要的是数学和计算机——计算机我指的是:编程能力和算法设计能力。这是我的切身体会,许多生物知识其实可以往后慢慢学,不必一开始花费大量时间补充生物知识。
但生物信息毕竟还是和生物有关,毫无生物知识其实也说不过去。对于初学者来说,想要进入这个领域,我觉得一开始需要重点搞清楚几个基本概念。比如,什么是基因组,什么是转录组,什么是蛋白组,什么是染色体,什么是基因,什么是染色体重组,什么是进化/演化,什么是表观遗传,什么是变异,变异类型有哪些,NGS技术是什么,测序仪的工作原理是什么,DNA是如何被测出来的等这些东西。因为,你只有真正了解数据是如何来的,才能更好地明白数据该如何处理和分析,以及如何才能有效地挖掘出它背后隐含的生物知识。
至于 分子生物学中诸多涉及细胞机制机理的知识我觉得在刚开始的时候反而可以缓一缓。我本来是学物理的,做生物信息可以说是半路出家,但其实没觉得有什么障碍,后来在实际需要的时候慢慢补上即可。推荐大家买本 《基因X》屯着——这是一本有厚度的基因必读书(曾经是《基因8》),作为参考书,平时有空的时候记得多翻翻。
此外,我觉得尽量避免去看生物信息学导论那类书,很多都太旧了,用处不大是一个方面,关键是还会浪费不少时间。
好奇心、兴趣和目标
这应该是促进我们学习的第一要素。所谓,“知之者不如好之者,好之者不如乐之者”。兴趣的力量是强大的,基本上是你乐于继续下去的动力来源。如果仅是以赚钱为目的的话,那么我觉得还是另择一行吧,有很多其它更适合赚钱的领域。那么话说回来,要培养兴趣的话,我们可以先了解现在整个基因科技行业的发展情况,了解学习这些知识都可以做些什么,能够解决什么问题。然后再定一个目标,完成一个具体的项目,自学最怕没有目的性,在没有他人可以指导的情况下,很容易迷失方向。但如果没条件的话,可以尝试利用现有的数据(比如:千人基因组,GIAB等)复现它们的成果,甚至构建一个分析流程也行,这样子学起来才会比较高效,同时也有利于夯实所学的知识。
使用Google
不要用百度,如果不会翻墙就花点钱买个VPN,与时间比起来,那点钱不算什么。在这个信息时代中信息已经足够多了,使用Google至少可以更快让你找到想要的东西,而学习生物信息,我们经常需要找东西。关于VPN,顺带安利一下,枫叶主机的网络加速套餐就挺不错的(是的,它叫网络加速套餐,不直接叫翻墙VPN,大家意会就好!),一个季度几十块60G流量,足够使用,点击链接注册并选择即可。
在有了上面这些基本的认识和目标之后,我们就可以开始了。
Linux
基因数据分析,极度不推荐在Windows下完成,有很多的工具不支持,而且不利于学习,也不利于我们对数据的理解。因此掌握Linux,特别是直接在Terminal中进行数据分析是必须的。
不过,不用太担心,我们不需要成为Linux专家。对于生物信息研究人员来说,只有了解Linux的文件系统结构,能够在Terminal中灵活运用基本的Linux命令就足够了,不过vi需要掌握——我们编写程序时需要用到它。但要 达成这些目标不需要看大部头的Linux书籍——这个也是我想给所有要学习生物信息的小伙伴们提个醒,这样可以节省很多不必要花的时间,不然等你看完一大本Linux书,恐怕兴趣也都被磨得差不多了,要直奔目标。
我自己使用Linux的时间超过8年,,但是所使用的命令,合起来频度超过99%的竟然不超过20条!基本上就是在接触生信的第一天学会的,而对于聪明如你们的人来说,相信一定可以用更短的时间融汇贯通,对于这几个命令我简单列一下(注意都是在Terminal模式下):
- pwd:列出当前目录的完整路径,明确你在哪;
- cd :跳转到其他目录,两个好用的cd命令,“cd -” 跳回最近一次的目录,“cd ..” 退回上一层目录;
- ls:列出当前目录内容,最好加上 -l -rt 参数,会更加清晰,目的是明确目录下都有什么;
- mkdir:创建目录;
- rm:删除文件或者目录;
- mv:重命名文件或者目录;
- cat:打开文本文件,内容输出到屏幕;
- less -SN:打开文本文件,这个是查看文本文件更合适的方式;
- head -n:查看文件前n行;
- tail -n:查看文件尾n行;
- wc -l:计算文本文件的行数;
- ”|“: 管道操作;
- grep命令;
- awk命令;
- sed命令;
- sort命令;
- du -sh ./: 检查当前目录所占空间大小;
- bc -l:启动Terminal下的计算器,可以在这里进行简单的数学运算,输入"quit"就可以退出;
- chmod:修改文件或者目录权限;
这里推荐看一下”极客学院“中那一篇”一步一步学Linux“的文章,我觉得那篇博文就足够了。值得你多花些时间研究的是Linux中 “|” 管道命令的妙处。另外,掌握基本的grep,sed,awk操作。我之所以推荐这三个命令是因为,它们很适合快速进行简单的文本操作,可以让很多工作直接快速地在命令行上完成,而不需要编写程序。比如抽取一个文本文件特定的几列信息、匹配相关信息、修改输出等,用awk实现起来非常简单。上面这些掌握了之后,你再学习如何利用这些命令和相关执行程序组建简单的shell任务流程,到这个阶段,Linux部分基本就OK了。至于如何在Terminal中编译程序或者安装软件包,一般都有教程,按照教程来就可以了,真碰到问题可以多Google。
至少掌握一门高级编程语言
生物信息是一定离不开程序设计的,而且你不能只会R。我建议先学Python(不推荐Perl),它很容易上手——被称为"可执行的伪代码",社区强大而活跃,碰到问题很容易找到解决办法。而且,支持组学数据分析的工具包也很丰富。还被誉为数据科学第一语言!不但可以进行文本处理,还可以进行统计分析,机器学习,或者作出精美的数据图等等,比起曾经的Perl真的强大很多。
在掌握了Python之后,我推荐的另一门高级语言是C(或者C++),它是难的,我之所以依然觉得有必要,是因为它可以让你具有干大事的能力。
虽然在实际的工作中Python已经足够强大,基本上可以应对项目中的各类大小事宜。但在我看来,如果你希望技术上做得更强,C一定是绕不开的,学会C/C++至少有两个好处:
- 让你理解机器的工作原理,理解你的程序是如何运作的。这非常有助于你以后写出更加优秀的代码;
- 设计高效率的算法模块,往往需要借助C/C++,而且设计出来的模块还可以很方便地包装起来用在Python中。同时,也有很多优秀的组学数据处理包是C/C++写的,比如,SSW、Bamtools和SeqAn——这个包很强大——我们可以用它编写比对算法,变异检测算法等。
另外,我认为R是很容易学的,这里也无意起语言之争,虽然Python比R好。只要你有兴趣,在有了上面的基础之后,可以在很短的时间内学会。
Python教程很多!我这里推荐一下gitbook上的这个《简明Python教程》。另外,廖雪峰的Python教程也不错。
掌握常用的组学数据分析软件
生物信息的工具众多,不过数据分析过程中常用的工具和软件还是可以列出来的,主要是:bwa,samtools,picard,GATK,bedtools,bcftools,vcftools,FastQC,MultiQC,VEP这些。基本都是在构造如WGS、WES这类分析流程的时候需要被用到的。另外,还有关于GWAS的一系列分析工具等,这些其实可以根据后续的具体项目逐步深入。除了工具之外,基本的数据文件格式也必须认识,比如:Fasta,Fastq,BAM,gff,vcf等,我在下文中推荐的《Bioinformatics Data Skills》这本书里面就系统讲了诸多在基因数据分析过程用到的工具和文件格式解析,值得一读。
实践
“书上得来终觉浅,绝知此事要躬行”。实践是必须的,如果没条件的话可以到Rosalind这个网站上做些训练题,这上面有着很多有意义的生物信息题目,从难到易的都有,涵盖的面也比较广(包括RNA,DNA,蛋白),值得一战。另外要积极寻找到大型基因科技公司(比如华大基因)或者基因研究所实习的机会。
构建一个流程,敢于造轮子
在掌握了Linux和编程知识之后,建议利用公开的数据构造一个完整的数据分析流程,比如全基因组数据分析流程或者复现一个项目的全过程。现在最好的一个公开数据来自Genome in a bottle(GIAB) 。你可以用这个数据参考GATK的最佳实践或者不久前我写的一个“从零开始完整学习全基因组数据分析系列”的文章,构造一个WGS数据分析流程。需要注意的是,你在构建、复现甚至重造的时候,要尝试去理解各个环节的意义,不要只是机械地将一个分析过程串接起来,因为你的目的是学习,碰到问题时也尽量自己解决,这样才能真正掌握它。
数理知识
生物信息离不开数学,准确地说是离不开统计学。有太多的数据分析都需要统计学知识的参与,包括常用的假设检验,贝叶斯推断、随机森林,SVM,回归分析,PCA等。因此,在你获得初步的基因数据处理能力之后,更进一步应该去做的就是加强这方面的知识。
多看优秀的组学算法
站在巨人的肩膀上才能看得更远。生物信息领域有一个比较突出的特点,就是绝大多数的东西都是开源的,因此很多优秀的算法和程序你都能够在github上直接找到,比如,比对软件bwa和后缀树算法,Smith-waterman局部比对算法;基因组组装软件SOAPdenovo2的de Bruijn graph;变异检测GATK、freebayse、Platypus应用到的贝叶斯、最大似然、EM、Pair-HMM和高斯混合模型等;变异注释工具VEP,GWAS的一系列方法等。特别是GATK,它的问写的很优秀,因此值得多泡在它的一系列文档中。通过学习它们的源码,不但可以精进你的编程能力、算法设计能力,更重要的是还能让你深刻理解诸多组学数据分析的奥秘!这会在不知不觉中提升你对基因数据的理解,就如同维纳斯的面纱在你面前一点点被揭开了一样,有种豁然开朗的感觉,你不再觉得那堆东西很神秘了。
不要固步自封
最后,一定要紧跟前沿。生物信息学以及现在的基因组学领域,知识的更新迭代可谓一日千里,可能半年不留神就会落后,所以平时一定要多看前沿的文章成果。但那么多杂志应该看哪些呢?我的建议是直接看最顶级的CNNS(Cell,Nature,NEJM,Science)杂志,如果时间不够用那么更加不必看其它的,原因有三个:
- 这些顶级杂志所代表的基本上就是领域的最前沿——也正因此它们才会在CNNS上发表。虽然其它杂志也有可能,但概率低很多,因此不必浪费时间,要看就看最好的;
- 这些杂志上的文章大多都能给你带来新的视角,能够开阔你的眼界。带来看待问题、解决问题的新思路和新想法,这会有助于你做出创新性的工作;
- 我认为多看这类文章,也会有更高的概率在这类杂志上发表成果。
另外,也可以多看看生物探索、奇点网这些公众号,上面每天都会报道很多关于这个领域的前沿信息,当然也别忘了请一定要多!多!关!注!我!(认真脸)另外,加入一些优质的生物信息交流圈,有机会的话参加一些重要的基因组学会议,千万不要关起门来闷头学,一定要看着外面的世界。
书和课程推荐
推荐两本基础的基因数据处理书籍,都是基于Python语言的:
- 来自OReilly《Bioinformatics Data Skills- Reproducible.and.Robust.Research.with.Open.Source.Tools》主要偏重工具的使用和数据文件的处理,虽然讲的不是很深入,但是作为生物信息初学者的入门书来说还是十分有价值的,2015年出版的,也不算旧。
- 第二本是《Bioinformatics with Python Cookbook》这一本相比于第一本来说会难一些,它会侧重于一些主题性质的内容,比如群体遗传学,基因大数据等。
这两本书都有pdf电子版。感兴趣的小伙伴可以在公众号后台回复“入门书籍”这四个字就可以获得了。
最后,再推荐几个在线课程。第一个是Coursera上的一个课程:genomic data science
这是约翰霍普金斯大学组织的一个系列课程,紧扣现在主流的组学数据分析,非常适合于入门学习,是一个精品系列,讲的很好,力荐,但是需要收费,只有7天的免费体验时间。
另外,EMBO上也搞了一个,在这里,不过我认为没有Coursera的系统全面,但它是免费的。
好了,最后,祝你学习快乐。
本文首发于我的个人公众号:helixminer(碱基矿工)