科学家编程,选择Python


周不润, NeuroTimes   |   March 24, 2016


Credits: Project Twins


编译自:Programming: Pick up Python
作者:Jeffrey M. Perkel

上个月,Adina Howe得到了爱荷华州立大学的一个教职。从职务上看,她是农业与生物工程的助理教授。然而,她的工作并不在温室里,而是在键盘上。从工作性质上看,Howe更像是一个程序员。她的部分工作是做一名“数据教授”,开发编程课程体系,教给学生们科学编程的技巧。

Howe并没有计算机专业学位,也没有经过正规计算机培训。她的博士学位是环境工程,当她加入密歇根州立大学Titus Brown实验室的时候,最拿手的工作是进行酶活性测定。可是Titus Brown专门从事生物信息学的研究,用电脑从基因组数据中提取信息。Howe只好随着Titus Brown的方向,尽力转向了计算。而Brown给她的建议是,学会Python。

对科学家来说,Python是所有可选编程语言中越来越值得推荐的语言。它是由荷兰程序员Guido van Rossum于1991年首次发布的,始终免费,语法简单,在线资源丰富,有大量科学相关的工具包,重视社区生态系统。

Hello, world

随着“大数据”概念的爆炸性增长,在如生物信息学、神经科学、天文学等许多学科中,编程技能变得越来越重要。会用Python写代码的研究人员,无论在整理数据、分析数据方面,还是最后的数据可视化方面,工作效率都更高。而其他的一些科学领域常用的编程语言,例如MATLAB和R,更注重数学和统计运算。相比之下,Python是一种更通用的语言,更类似C语言和C++这一类在商业软件和操作系统中被广泛运用的语言。因此,它也许更复杂,但能力也更强大。它可以自动化一些小的指令集,可以建网站,也可以构建成熟的科学或商业应用。加州大学伯克利分校的心理学博士生Jessica Hamrick介绍说,她从2008年开始使用Python,如今在研究的所有阶段都会用到。例如,在她探索人们如何操纵脑内几何形状的研究中,她创建了很多不同的几何形状出来,呈现给被试者,并记录他们的选择,然后分析数据。在这些步骤里她都用到了Python。

Python的通用性很高,新手学习Python的痛苦也更少。容易入门这个特性来自于Python语言本身的功能,也来自于围绕Python建立的众多资源。例如,Python中的执行命令是交互式的,输入一个命令就能获得响应。而在C语言中,还需要一个编译的步骤,将代码转为可执行文件,对初学者来说这样的过程实在是太复杂了。Python代码写起来也更容易,用户没有必要先定义一个变量是数字还是文字。例如,要想把经典的“Hello, world!”打印出来,在Python里不能更简单了,只需要在命令行中输入print(“Hello, world!”),轻敲回车就搞定了。Brown谈到为什么要选择Python时说,教新人做事的时候,Python比C语言或者C++简单得多。因此Python成为了编程入门的热门选择。

社区因素对Python的普及也发挥了很大作用。只有用户在各种环境下使用某种编程语言,这种编程语言才能流行起来。大规模的使用创造了一种良性循环,新用户把Python扩展到新的领域,Python又吸引了这个领域内更多的人。

Python社区也特别鼓励女性尝试Python,有很多以女性为中心的可用资源,例如旧金山的Hackbright Academy,加拿大的非营利组织Ladies Learning Code,以及全球性的指导小组PyLadies,都有很多针对女性的Python教学。Emily Irvine是加拿大麦吉尔大学的硕士生,她选择用Python来分析她的神经电生理数据。她说被Python吸引是因为“语法简单”和“网上资源多”,而Python社区的氛围也同样重要。例如蒙特利尔PyCon会议的氛围就非常温馨,尤其对女性和科学家非常友善。

Python的教育资源也比比皆是。基金会Software Carpentry Foundation在很多地方开了为期两天、主题为科学编程(scientific programming)的研讨会,它的教育资源同样可以在网上找到。在线教育平台Coursera和edX也有很多Python相关的课程。此外,Codecademy等在线平台也有一些简单的初学者动手教程。Irvine是在网络课程中自学的Python,遇到问题了就去编程问答网站stackoverflow.com里请教别人。她说,如今她的水平介于新手和中级程序员之间,用Python专业主语来说是“pythonista”,一个会用Python的人。

完整体验

当然,如果用户不能用一种编程语言实现自己想要的功能,那么这种编程语言再容易学、再友好也没有意义。这时就能看出Python的包(package)的巨大优势了,它们扩展了Python的功能。Python的开发哲学里有一条,有点像买回新电子产品里“内含电池”一样,它的内置功能很容易上手使用。但它同样有非常成熟的生态系统,任何你想要写代码来解决的问题,可能都有人想到了而且写了库(libraries),让你直接就可以使用,不用自己再去写代码。

科学领域的程序员,无论是什么学科,都有一些经常要用到的核心工具包。例如NumPy(数学阵列),SciPy(线性代数,微分方程,信号处理等),SymPy(符号数学),matplotlib(绘图),Pandas(数据分析)。另一种流行工具Cython,解决了Python执行速度相对较慢的问题。Cython优化了Python的一部分代码,如出了名慢的'for'循环(用来指定一部分代码反复运行)。韩国首尔大学的理论物理学家Paul Nation说,用Cython后速度快了1000倍。

IPython Notebook是另一个流行的包。Howe认为这是一个程序员的实验室笔记本,允许用户把数据、代码和说明文字或笔记在一个浏览器页面中同时呈现出来,而不用把它们分开放在不同的文件里。

除了这些核心软件包,几乎所有科学领域都有可以用的软件包,例如机器学习的scikit-Learn,生物信息学的Biopython,心理学和神经科学的PsychoPy,天文学的Astropy。Thomas Robitaille是Astropy项目的协调员,也是德国马普天文研究所的研究员。他说,Astropy建立的目的是为了减少研究组的重复劳动。它为用户提供了一组核心功能,例如把一个坐标系从一个天文数字测绘系统转到另一个,为不同格式的文件提供统一的读写接口,处理图像并进行计算。另一个Python软件包QuTip能让量子力学的研究者定义一个系统,并模拟它的运行。该项目是2010年日本理化研究所启动的,目的是将他们原先使用的MATLAB软件包改编为Python。

类似这样的软件包正是良性循环的推动者。研究人员其实可以在工作中使用任何编程语言,只要他们肯花时间去学习(实际上很多语言都可以使用其他语言写的算法,包括Python,这样就可以使用旧代码)。Brown介绍说,学习编程的困难之处在于基础,一旦研究者入了门、搞定了基础,适应新的语言不过是重新学一点语法的问题。在学习早期,最重要的事情之一是有好的支持网络。Brown建议不用拘泥于Python,研究者可以选择一个身边人用的最多的编程语言开始入门。但是,选Python来入门的趋势越来越明显了。

Python工具箱
安装Python:通过Anaconda或者Enthought Canopy安装,在Python软件基金会可以找到说明文档。
初学者课程:Software Carpentry; Learn Python the Hard Way; Codecademy; Think Python
其他在线资源:MIT的Python课程; 马普研究所的课堂笔记; 广泛推荐的教程essay from Google's head of research
科学领域开源软件包可以在SciPy.org找到。
编程指导、遇到问题:Ladies Learning Code; Stack Overflow; PyCon.org列出了世界各地关于Python的会议。




分享到


© 2014-2015 NeuroTimes