前言

什么是生物信息学?

生物学数据正在⻜速增⻓。一段时间一来,GenBank和PDB(Protein Data Bank)等公共数据库都在以指数级别增⻓。随着万维网(World Wide Web)的到来,以及快速的网络连接,在世界上的任意一个地方,都可以快速、简便且廉价地获取到这些数据库中的数据和大量具有特定用途的程序。作为结果,在生物学研究的进步中,基于计算机的工具现在正起着越来越关键的作用。

生物信息学是一个快速发展的学科领域,它应用计算工具和技术来管理并分析生物学数据。生物信息学这个术语还相对较新,在此处的定义,它还包含了“计算生物学”和其他专业术语的含义。在生物学研究中使用计算机,要比生物信息学专业术语的使用早许多年。比如,通过X射线晶体数据来确定蛋白质的3D结构,一直以来都是依赖于计算机分析。在本书中,我把在生物学研究中计算机的使用就看做生物信息学。但是,需要强调的重要一点是,其他人可能会把这些术语严格区分开来。特别的是,当指代对于C.elegans(线虫)、Arabidopsis(拟南芥)和Homo sapiens(人)等物种的全基因组进行大规模测序和分析时的数据和技术时,通常都会使用生物信息学这个术语。

生物信息学能做什么

这是在实际中应用生物信息学的一个简单的例子。假设你发现了一个非常有趣的小鼠DNA的片段,你猜想它可能会为人类的致命脑肿瘤的发生发展提供线索。在对DNA进行测序后,你使用基于网络的序列比对工具,比如BLAST,在GenBank和其他数据资源中进行了检索。尽管你找到了一些相关的序列,但是你并没有找到你猜想的它和脑肿瘤之间联系的直接的证据或其他信息。你知道这些公共的遗传数据库每天都在快速增⻓这。你可能会想每天都进行一次检索,把结果和上一次的检索结果进行比较,来看看在数据库中是不是有新的东西出现。但这每天都会花费一两个小时的时间!幸运的是,你会Python。经过一天的努力,你(使用BioPython等模块)编写了一个程序,可以自动每天对你的DNA序列在GenBank中进行一次BLAST,并把结果和前一天的结果进行比较,如果有任何变换它就会发送邮件给你。这个程序是如此的有用,以至于你开始把它应用在其他的序列上,而你同时也开始使用它。在几个月的时间内,你一天的努力节省了你团队数周的时间。这个例子来源于真实事件。现在你已经可以使用现成的程序来达成你的目的,甚至有网站可以让你提交自己的DNA序列和邮箱地址,它们会为你完成所有的工作!

当你把计算的强大能力应用的生物学问题中时,这只是一个很小的例子。这就是生物信息学。

关于本书

本书是一个指南,直到生物学家如何去编程,并且它是为程序员新手设计的。除了极个别以外,所有的例子和练习题使用的都是生物学数据。本书的目的有两个:教授编程技能,同时把它们应用到感兴趣的生物学领域中。

我想让你快速上手,并且尽快且愉快得进行编程。我会进行简洁的解释,而不会把一切都囊括其中。我不会对编程概念进行严格的定义,因为这可能会喧兵夺主,干扰你的学习。

Python语言使得通过快速编写真实的程序来开始学习称为可能。当你继续阅读本书和在线的Python文档时,你会逐渐补充细节性的知识,在实践中学习,不断提高你对编程概念的理解。

根据你学习⻛格的不同,可能会通过不同的方式找到这些材料。一种方式,就像国王郑重地对爱丽丝说的那样,“从开始的地方开始吧,一直读到末尾,然后停止。”(《爱丽丝漫游仙境》中的这句话常常被用来作为算法的一个诙谐的定义。)作为一本叙述性的教材,本书的材料就是以从头到尾阅读的方式进行组织的。

另一种方式是把程序摘抄下来,放到你的计算机中,运行它们,看看它们都做了什么,可能还尝试一下去改变程序中的某个地方,看看你的修改有什么影响。这种方式可能会和快速浏览各章节的文字结合起来。当程序员学习一个新的编程语言时,这是最常用的一种学习方式。基本上,你通过人造例子进行学习,目的是真实的程序。

任何因为生物信息学而学习python编程的读者,都应该尝试一下大多数章节末尾的练习题。它们基本上是按照由易到难的顺序进行排列的,并且排在后面的一些练习题相当有难度,可能作为课堂项目更加合适一些。因为在Python中处理问题的方法不止一种,所以对于每一个练习题来说都没有绝对正确的唯一答案。如果你是一个程序员新手,你可以尝试尽量用不同的方法来解答一个练习题,那么对于这个练习题你就已经很好的掌握了。对于练习题,我推荐的解答可以在https://github.com/Wy2160640/Beginning-Python-for-Bioinformatics找到。

我希望,本书中的材料不仅仅作为实践性的指南。如果你觉得生物信息学本身是一个前途无限的研究方向或者是正在进行的研究的附属物,它还能引领你编写出研究性的程序。

本书为谁编写

本书是为生物学家编写的实践性编程指南。

在生物学研究和发展中,编程技能现在已经是必需的了。历史上,对于实验室的生物学家来说,编程并不被看做一个关键性的技能。然而,如今生物学的发展趋势使得对于大规模数据的计算机分析成为了许多研究程序的重中之重。本书意在作为繁忙的生物学家手头的一本不算厚的教程,帮助它们获得实践性的生物信息学编程技能。所以,如果你是一个午休要学习编程的生物学家,这本书就是为你编写的。它的目的是教会你快速、愉快地编写有用的实践性的生物信息学程序。

本书把编程作为一个重要的实验室技能,它是一个编程指南,包括了一堆的手册或者编程技术,这些在实验室中都是急需且非常有用的。但是它的初衷还是教授编程,而不是构建一个全面的工具包。

在实验室的实验台和计算机程序之间,确实有一些技能和方法上的相似之处。不管是在一天的课程中,还是在整个的生物学研究职业生涯中,许多人确实都能够从跑胶转到编写Python程序。当然,编程是一个有着自己独特方法和专业术语的独特学科,所以必须以其独特的方式学习特有的术语。但确实有“杂交”存在(如果你能原谅这两个学科之间的隐喻)。

本书的练习题由不同难度的题目组成,因此既可以把它当做课堂教材,也可以用来自学。(几乎)所有的例子和练习都是基于真实的生物学问题,所以本书将对大多数常⻅的生物信息学编程问题和最常⻅的基于计算机的生物学数据进行一个很好的介绍。

本书的网站,https://github.com/Wy2160640/Beginning-Python-for-Bioinformatics,包含了书中的所有程序代码便于下载。

为什么我应该学习编程?

因为许多研究人员把他们的工作描述为“生物信息学”,但它们并不编写程序,而是使用其他人编写的程序,所以你可能会问,“我真的需要学习编程才能做生物信息学吗?”在某种层面上讲,答案是否定的,你并不需要学习编程。使用现成的工具,你可以完成很多的工作,而且有相关的书籍和文档帮助你学习这些工具的使用。但是从另一个更高的层面上讲,答案因问题的不同而异。当你用现成的工具无法完成你要做的东西时会发生什么?当你无法找到一个工具来完成你实际的一个任务、而且你找不到一个人可以为你编写程序时会发生什么?

从这点来看,你需要学习编程。即使你仍然主要依赖于现有的程序和工具,去学习编程从而能够写出小的程序也是值得的。小的程序会令人难以置信的有用。比如,通过一定的练习,你会学会编写程序来运行其他的程序,从而节省你大把的时间,避免你坐在计算机前手动去做这些事情。

许多科学家都是从编写小的程序开始的,然后发现他们真的很喜欢编程。作为一名程序员,你永远都不需要担心找不到满足你需要的合适的工具,因为你可以自己编写它们。本书就是助你起步的。

本书的结构

本书总共包含十三章和两个附录。下面是对它们的一个简短介绍:

第1章

本章涵盖了分子生物学中一些关键性的概念,以及生物学和计算机科学是纠缠在一起的。

第2章

本章向你展示如何让Python在你的计算机上运行起来。

第3章

第三章对程序员完成他们工作的方式进行了概述。解释了一些好的程序员使用的最重要的实践性的策略,并对如何寻找编程过程中遇到的问题的答案进行了详细的规划。通过简短的描述性实例的分析,使这些观点更加具体化,展示程序员是如何针对一个问题寻找解决方案的。

第4章

在第4章中,你开始使用DNA和蛋白质来编写Python程序。编写程序把DNA转录成RNA,把序列片段连接起来,获得DNA的反向互补序列,从文件读取序列数据,等等。

第5章

本章继续示范Python语言的基础,编写程序查找DNA或蛋白质中的基序,实现通过键盘与用户的交互,把数据保存到文件中,使用循环和条件测试,使用正则表达式,以及操作字符串和数组。

第6章

本章在两个方向上拓展了Python的基础知识:一个是子程序,它是进行结构化编程的一种重要的方式,一个是Python调试器的使用,它可以在运行Python程序的时候对其进行详细的检查。

第7章

遗传突变对于生物学来说是最基本的,通过使用Python中的随机数生成器可以把以随机事件对其进行建模。本章使用随机数来生成DNA序列数据集,不断得突变DNA序列。循环,子程序和词汇作用域也会在本章中进行讨论。

第8章

本章演示了如何使用遗传密码把DNA翻译成蛋白质。它还涵盖了Python编程语言的更多内容,比如散列数据类型、排序和未排序的数组、折半查找、关系型数据库、DBM以及如何处理FASTA格式的序列数据。

第9章

本章包含对Python正则表达式的介绍。本章的主要焦点是编写程序来计算一个DNA序列的限制酶切图谱。

第10章

GenBank(Genetic Sequence DataBank)对于现代生物学和生物信息学是非常重要的。在本章中,你会学习如何编写程序从GenBank文件和库中提取信息。你也会制作一个数据库,来创建自己的对于GenBank库的快速访问和检索。

第11章

本章编写一个能解析PDB(Protein Data Bank)文件的程序。在编写这个程序的过程中,会遇到一些有趣的Python技术,比如查找并迭代大量的文件,以及在Python程序中控制其他的生物信息学程序。

第12章

第12章逐步编写一些可以解析BLAST输出文件的代码。此外还会提到BioPython项目与它的BLAST解析器,以及在Python中格式化输出的其他一些方法。

第13章

第13章展望了一些超越本书范畴的主题。

附录A

此处收集的是Python和生物信息学编程的相关资源,比如书籍和网站。

附录B

这是对本书中涉及到的Python知识点的总结,还有一些其他的东西。

原文地址:https://www.cnblogs.com/yahengwang/p/9356712.html