查看原文
其他

Perl还是Python或者R

2018-01-29 基因学院 基因学苑

编者按

从事生物信息工作,至少要一门编程语言,那么到底该选择哪门编程语言呢?已经记不清被多少次问这个问题了,作为同时对这三门语言了解一二三四五六七八九十的人,今天我就来说一下自己的看法。


我曾经一直在纠结,高圆圆,刘诗诗,范冰冰这三人我到底该选择谁呢,后来结果大家都知道了,现在李冰冰也不剩下了,在纠结下去恐怕连萨顶顶都没了。当然,这只是个玩笑,告诉大家不要太纠结,选择越多反而越犹豫了。

吾尝终日而思矣,不如须臾之所学也。



对于该选择学习哪么语言,我的答案就是:都学习就完了,根本不用取舍。

这看上去很不可思议。但事实上就是这样,我见过非常多的人同时精通Python,Perl,R,甚至java,C等。这其实是非常合理的,掌握的知识越多,学习新知识越容易。当知识点累积到一定阶段之后,就好像被打通了任督二脉,一通百通,学习什么编程语言都不难了。而且这三门语言其实并不是相互矛盾的,而恰恰相反,他们是相辅相成的,精通一门之后在学习其他语言事半功倍。如果你精通python,我相信你一周之内肯定能精通perl语言。


假如我们把文本处理比作语文,科学计算比喻成数学,数据可视化比喻成绘画三门学科。

语文成绩:Perl  >  Python > R

数学成绩:R  >  Python > Perl

绘画成绩:R  >  Python > Perl


Perl 一般被称为“实用报表提取语言”(Practical Extraction and Report Language)。直观来说就是用来生成报告的语言,最开始的时候,是用来处理计算机产生的大量日志文件,这些日志文都是纯文本文件,里面的的内容杂乱无章,这种数据现在我们称为“非结构化”数据,目前互联网产生的很多数据都是这种类型,与之对应的有整齐格式的文件称为“结构化数据”,perl具有强大的正则表达式,可以从中提取出任意模式的内容,进行统计分析,比如从日志文件中,筛选出来自”Beijing“和”Shanghai“关键字的内容,并输出对应的IP地址。这样perl就从杂乱无章的数据仓库中筛选出指定内容,并生成结构化数据结构的“实用报表”。生物大数据大多以文本模式存储,而且同样属于非结构化数据,所以,perl自然被大量用在生物数据处理中,有很多生物软件就是用perl语言写的,例如rnamer,nucmer等,很多生物软件安装包中提供一些附加小工具也是用perl写的。

另外,Perl根植于Linux shell,可以与shell进行很好的配合,比shell编程要更强大,可以替代shell完成很多自动化和批 47 31804 47 15046 0 0 4329 0 0:00:07 0:00:03 0:00:04 4328量化的操作。

Perl擅长文本处理,但是并不擅长科学计算。


Python:

Python显然比Perl更强大,除了可以处理纯文本文件,还可以通过numpy,scipy等重要的包进行科学计算,利用matplotlib进行绘图。Python是大数据挖掘中的优等生,没有明显的短板,可以完成数据挖掘整个环节。从数据抓取,数据清洗过滤,数据统计,数据挖掘,数据可视化等都可以操作。如果想要只精通一门语言,显然python是首选。除此之外,python还可以用于编写桌面应用程序,比如音乐播放器,视频播放器等,这并不是perl擅长的,而R是几乎完成不了的任务。

作为Google的官方语音,而且随着数据科学的发展,Python现在越来越流行。前段时间看一个小广告,面向12岁以上小朋友培训Python语言。想想自己12岁时还是追风少年(像风一样自由),如果12岁就会了Python,是不是1999年也开发出了Google,越想越遗憾。

Perl的设计者为拉里·沃尔(Larry Wall)是一名语言学家,而pythoh的作者是Guido van Rossum,是一名数学家。虽然二者都能完成同样的工作,但是语言风格上却有非常大的差别,Perl是艺术性的而python是富有逻辑性的。

Perl的哲学是:

There's More Than One Way To Do It。

Python中的哲学是:

There should be one-- and preferably only one --obvious way to do it.

所以,perl的语法更自由,可以随便写,perl程序里,有各种各样奇特甚至说奇葩的操作符,这些操作符往往能非常高效解决问题,所以,perl的程序一般看起来非常乱,天马行空,因为解决问题方法不止一种。而python则追求优雅,python的程序看起来非常整洁,语法简洁,格式工整,严格限制空白,便于阅读。因此,选择哪种就看个人喜好了。

R:严格来说R是统计软件,并不是一门编程语言。R的作者之一Robert Gentleman,是生物学家,为了做生物统计,开发了R软件。作为统计软件,R具备了统计学软件几乎所有的功能,数学统计,数据挖掘,数据可视化。与Perl刚好相反,R擅长处理结构化的数据,也就是整齐的表格,一般利用Perl进行前期数据整理,整理成统计表,导入R中进行计算和分析,可视化。从这个角度来说,可以认为Perl+R≈Python。但是目前来看,R的统计和绘图功能要强于python,R具有更多的统计扩展包,使用起来也更方便。例如基因差异表达分析,将数据导入R中,只需要一个函数DEseq()就能完成计算,非常的强大。我们说R不擅长处理非结构化数据,并不是说R不能处理,其实R也支持正则表达式,但是处理起来比较麻烦,所以,各司其职,物尽其用,


决定你能力的并不是你选择学习哪门语言,而是你学习的怎么样。


---------- END ----------

(添加作者微信,备注好单位+姓名)

您可能还会感兴趣的

如何在Linux下优雅的装X

利用R绘制GO条目图

CNV-seq分析介绍

生物学才是终极学科

如何搭建生物信息分析平台

为什么生物信息分析难学?

DNA告诉你,你从哪里来?

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存