14

转一个Python的安利文章咯!

来自于我们生信技能树论坛的超级版主bioinfo.dong的好文一篇,比较符合我博客的思想,就友情转发一下:

原文链接见:http://www.biotrainee.com/thread-379-1-1.html 

刚接触生信的同学大都有个困惑,知道生物信息可能需要编程,可是选择什么语言呢?有人会说perl啊,Python啊,R啊,java啊,等等等等。目的不一样,选择也不一样,你可以说语言都没有区别,达到目的就行,当然没问题。可是我们也要知道每种语言都有其独特优势,你可以用perl倒腾出矩阵运算,也可以画出想要的图,可是没有R专业;你也可以用R的正则表达式处理文本,可是perl或者Python做正则会更方便一些。这不是比较帖,只是从一个Python体验者的角度来说一下为什么选择Python。我目前的编程组合是Python+R+Shell Scripting。

这篇文章比较适合编程初学者,常年用perl的老司机们可以随便看一下,虽说perl和Python很像,有了一门的基础,学另一门就容易多了,可是真让一个用了几年perl的人彻底换Python还是比较困难的,主要还是习惯问题。最初做生信的人大都以perl作为常用脚本语言。我也是从perl开始的,当年为了申请出国读Bioinformatics,认真把小骆驼书看了一遍。来美国之后的第一个导师刚好是教perl的,我又跟着学了一次,看完导师推荐的《Unix and Perl to the Rescue》,算是巩固加第二次入门。之后一年基本都是用perl来处理数据。一个偶然的机会,同学说一起学学Python吧,听说很好用,于是就在网上找了个教程把题目刷了一遍。虽说入了门,可是每次项目赶时间的时候第一个想到的还是用perl来解决,所以入门很久也没啥长进,我亲爱的同学因为perl用的太好,虽然知道Python很好用,可始终没法狠心转过来,而我因为本身perl学得也只是半斤八两,纠结了一段时间也就彻底放弃perl了。

先说用了很长时间perl再用Python觉得不习惯的点。

(1)首先是动物园的书,《learning perl》真是入门的典范。再看《Learning Python》,几千页,那么厚,我到现在也没法认真看下去。
(2)另外perl语句比较简洁,几个符号就可以讲清楚的,Python可能需要几行,比如按行读取,perl只要while(<>)就可以,而最初学Python的时候,光这个问题就困扰了很久。再比如perl正则匹配的$1, Python是match.group(1)。perl的简洁伴随的缺点是可读性较差,自己的代码写完了都不想再看,更不要说别人写的。
(3)perl的正则表达式是真的非常厉害,我已经不记得是怎么厉害的了,就只记得Python的re module刚开始接触不太好用,不过现在已经感觉不出区别了。
(4)通常一个Python脚本需要很多modules,不熟悉之前会觉得很痛苦,perl就比较少用到,我总共也没用几次,一方面说明我的perl确实学得不好,另一方面可能也真是不太好用,看到就觉得麻烦。但Python的modules一旦熟悉了会大大提高工作效率。

重点说一下Python的优点。Python作为编程语言真正的优势比如面向对象编程(OOP),可移植/扩展/嵌入,强大的爬虫功能,APP开发,web开发等都不在讨论范围之内,只从最实用的角度做一下说明:
(1)简单,适合作为入门语言。很多时候觉得读Python的代码像是在读简单的英文,或者觉得pseudocode稍微一改就可以在Python里run了。Python还规范了很好的写作格式,该缩进的必须缩进,这样更增强了可读性。同时提高了代码重复利用的可能(很多时候perl代码写完就不想读了,三个月不用再回来已经看不太懂了,Python的就可以留着慢慢用。。。)
(2)Python社区活跃。有问题可以很容易搜索到解决方案。我perl的老师现在也转教Python了,问他为什么,他说perl的community不活跃,用Python是一种趋势
(3)作为开源语言,Python有很多非常好用的包,可以最大程度让我们避免把时间浪费在重复造轮子上。刚接触Python的时候我就觉得这简直是perl和R的整合,之前提过Python的scipy,numpy,pandas,matlibplot等等packages使其同样拥有了很强大的统计画图功能,我曾一度弃用R,用Python做所有的数据处理,数据分析和画图。不过现在又将这些工作交回了R,实验室本身是做统计的,用R显得入流一点:-)
(4)Python的jupyter notebook!!!这个是要强力推荐的!!!以前叫ipython notebook。用过R的都知道R Studio。jupyter notebook就是Python的Studio。以前写perl或者Python是不是这样的流程:写好了,存成.pl或.py格式,在shell里python xxx.py或者perl xxx.pl。运行完发现不好,有bug,打开文件找找bug在哪,再运行,还不行,唉,反反复复,好累。有了jupyter notebook你就可以边写边跑边改程序。有任何不确定的地方,都可以在notebook里直接测试,有任何bug都可以在notebook里直接改。简直方便到爆。现在用Anaconda安装jupyter还附赠很多包,方便又实惠。
(5)学好Python可以转行!!!跳出生物坑,奔向美好的互联网坑。前面提到的爬虫,APP开发,web编程都是很实用的技能。许多互联网公司也会专门招Python程序员,比如Google,比如Youtube,比如Dropbox。。。

我本专业是Bioinformatics,需要上一些计算机和统计的研究生课程,还记得算法课上老师第一节课就问,java和C++都会吧,如果不会的话Python总会吧,都不会的话这门课的作业写不了。就因为觉得自己还算会一点Python,把一次学习java的好机会浪费掉了

暂时就想到这么多。说的未必对。都是自己的体会吧。希望对初学者有用~

01

生信分析人员数据处理脚本实战

我前面写到了生信分析人员如何入门linux和perl,后面还会写R和python的总结,但是在这中间我想插入一个脚本实战指南。其实在我前两篇日志里面也重点提到了学习编程语言最重要的就是实战了,也点出了几个关键词。在实际生物信息学数据处理中应用perl和linux,可以借鉴EMBOSS软件套件,fastx-toolkit等基础软件,实现并且模仿该软件的功能。尤其是SMS2/exonerate/里面的一些常见功能,还有DNA2.0 Bioinformatics Toolbox的一些工具。如果你这些名词不懂,请赶快谷歌!!! 它们做了什么,输入文件是什么,输出文件是什么,你都可以用脚本实现!

Continue reading