Fork me on GitHub

生物信息学与GO语言

生物信息学是一门工具性的学科,主要是编写,使用软件去解决生物学问题。换句话说,生物信息学是一门关于数学,统计学,生物学的交叉学科。为了解决具体的生物学问题,目前已经有了许多优秀的生物信息学算法和软件。这些软件有的是使用perl写的,比如Annovar等;有的是使用C/C++写的,比如bwa等;有的是使用Python写的,比如cnvkit等,也有使用Java编写的,如Exomiser等。已有的软件经过了使用者和开发者的测试使用验证,在准确性上都有了很高的保证。
在这种情况下,有的生物信息学分析步骤已经比较成熟了,也已经有了规范,一般我们不需要自己从头开发软件去解决问题,只需要使用脚本语言组合现有的软件搭建合适的流程去解决问题,因为现有的工具已经足够了。但是,同时也有一些方面,现有的软件并不能很好的解决,或者说这个解决问题的方法比较个性化,这个时候就需要我们自己造轮子了。所以,我认为不管是已经有了优秀软件的,还是还没有合适软件的,我们都要尝试自己造轮子,去解决具体的生物学问题,这样对使用生物信息方法解决问题这件事会有自己独特的理解。
我们以最基础的生物信息问题举例,序列比对问题。序列比对,简单来说是一个字符串匹配的问题。一般来说,分为以下几种情况:短序列比对到长序列;短序列比对到一组长序列;多序列比对;长序列比对。解决不同的情况,需要应用不同的算法,即使使用现有的比对软件,也需要使用不同的参数。所以如果不了解其中的具体算法,是很难真正解决一个生物学问题的。
上面也提到了,生物信息软件可以使用各类不同的编程语言,使用较多的应该是perl,python,C/C++.Perl语言在字符串处理方面有独特的优势,且它又是脚本语言,开发速度比较快,在生物信息学中使用广泛。Python语言具有广泛的第三方库,在需要使用一些统计学算法时,不需要从头编写,直接可以使用三方库即可实现,开发速度快且方便,近年来有取代perl的趋势。C/C++主要在解决一些性能要求比较高的问题时需要,但是相对开发速度较慢。
GO语言是由Google开发的编译型语言。语法与C语言类似,学习曲线平缓,容易上手,代码也易读。开发效率和运行效率表现都很好。如果使用GO语言对一些已有的软件进行重构,可能是一件有趣的事情。既可以学习使用GO语言去解决生物学问题,又可以对具体的生物信息学算法有一个全面的认识,我觉得这不失为一种有效的学习方法。下面是我具体的一个计划:

(1)序列比对:

精确比对:NW算法的实现,SW算法的实现
启发式比对:BLAST算法的实现
其他比对:BWT比对算法的实现
多序列比对算法的实现

(2)变异检测:

SNV检测:遗传性变异检测算法的实现,体细胞变异检测算法的实现
Indel检测:重比对检测算法的实现,局部组装检测算法的实现
CNV检测:Exon CNV检测算法的实现,全基因组CNV检测算法的实现
SV/FUSION检测:Split reads重比对检测算法的实现,DNA/RNA分析算法的实现

(3)变异注释:

Annovar软件算法的实现

(4)基因表型分析软件

Exomiser的基本算法介绍

(5)ACMG自动化

SNV/CNV自动化分类

(6)其他:

UPD/LOH检测算法的实现
HLA分型
性别计算
可视化交互界面的实现
流程构建框架
TMB的计算
MSI的分析

以上计划是一个比较庞大的项目,每一个算法,我都会选择一个或多个现有的软件进行分析,在此基础上使用GO语言对算法进行简单重构,主要目的是为了理解算法,当然在理解算法的基础上,能对现有的算法进行优化,那是最好的结果。