python 并不是一种新的程序设计语言,它在1991年就出现了。2000年升级成了python2.0,而在2008年升级成为python 3.0。在国内python并不普及,大学里开设python程序设计课程的也并不多。在国外的大学里,许多非计算机专业开设了python课程。直到最近几年,国内随着人工智能,大数据技术流行起来后, python才受到许多人的关注。
最近,在一些工程师群里提议要学习python语言。我开始思考如何为普通人开设python程序设计课程。下面我谈谈自己的一些想法。供大家参考。
为什么去学习python?
面对热情高涨的学习者,我的第一个问题就是他们为什么学习python语言?网络上经常会有十分脑残的问题,就是学某某是否有前途?会某某薪金是多少?其实程序设计语言只是一个工具而已,关键的是你想使用这个工具去解决什么问题?我不赞成过于功利的学习目的。现在许多人比较浮躁,他们只关心一件事情,是否能赚到钱。其实许多美好的事情并不能以是否能赚钱来评判的。学习python 并不难,需要使用它的人都可能学会。所有仅仅会使用python 程序设计语言的人大概不可能薪金翻番。不过会使用python语言编程的数据科学家或者金融科技人才的工资是非常高的。而要成为一名合格的数据科学家,需要的理论基础和实践经验并非一日之功,需要长期训练和学习。
python 是一种通用程序设计语言,它可以编写各种类型的程序。不过python 比较适合编写网络应用程序和数据科学应用程序。
网络工程师可以选择Python开发网络应用程序,比如纽约时报、Instagram和Pinterest使用python网络架构Django来编写他们的网站。不过网络应用程序毕竟是相对比较专业的领域,而且对于网络应用还有许多中选择,比如java,nodeJS/javascript或者PHP都是用于网络应用的流行的程序设计语言。有时python对于网络应用并不是一个好的选择。对于大多数其它领域的专业人士而言,选择python的主要原因是用于数据科学计算。
近年来,数据科学越来越受到欢迎。一名技术娴熟的企业数据科学家的真正价值,在于利用多种数据视觉化手段,向公司的不同利益相关者有效地传递数据模式和预测。Python以其优良特性,符合高强度科学计算的几乎所有方面要求,这使得它成为在不同的数据科学应用之间进行编程的绝佳选择。
- Python遵循统一的设计哲学,注重可用性、可读性,对于数据科学的学习曲线也较低。
- Python有很高的可扩展性,且与Matlab、Stata等语言相比,运行更加快速。
- 另外,Python生态系统中涌现出更多的数据视觉化库,以及炫酷的应用编程结构,目的是使用图形更好地展现数据分析的结果。Python社区有着诸如Sci-Kit learn、NumPy、Pandas、Statsmodel和SciPy等许多优秀的数据分析库。这些库的数量还在不断增长。
一位有志于成为数据科学家的人,使用python是非常合适的。
我觉得python更像Excel,适合各种数据计算和统计。如果你的工作中需要使用某些科学计算,或者经常会使用Excel 来做一些计算或者图表的话,选择学会python 程序设计是比较好的选择。我遇到一些资深的机械设计工程师,它们使用excel 计算表来进行光学镜头设计和齿轮设计。如果使用python 就会更加得心应手。
我在学习通信理论的时候,希望对信号做快速傅里叶变换,数字滤波器设计,要在电脑上使用C语言来做信号仿真就比较费劲,而现在使用python 来做就非常简单。在控制和传感器应用中,我使用python 编写上位机程序,能够十分方便地显示各种数据曲线。
数学,物理,化学和经济学等非计算机专业应该开设python课程。
我的建议是在决定是否开始学习python 之前,先思考一下,你需要使用python来解决什么样问题。如果你对数值计算感兴趣,那么选择python非常合适。比如python非常适合做矢量和矩阵变换运算,数据统计分析,绘制各种科学曲线也非常方便。进一步地,python也适合神经网络的接口程序,例如google 的tensorfow。
当然,如果你只是一个爱好者,出于好奇去探索一下python 也是值得鼓励的。
如何学习python?
每个人都有适合自己的学习方式,我不太赞成”24小时掌握python”之类的观点。学的快的东西,往往也更容易忘记。
我的建议是和其它课程结合起来一起学比较有效。我在开始学习python 的时候,特意买了《微积分》,《线性代数》和《统计学》。已解决计算数学中的问题为目标来学习。后来我也使用python 来做神经网络的训练,数字信号处理的程序。从做中学,使自己更具有方向。
简单地学习python的语句,语法,子程序等知识是远远不足以应付实际应用的需要的。python之所以强大,是全世界的工程师开发了各种丰富的程序库供大家分享。python为数据科学家提供了大量的数据分析程序库。它们包括:
NumPy
Numpy是使用Python开发的高级(high level)工具的基础。这个库不能用于高级数据分析,但是深入理解Numpy中面向数组的计算,可以帮助数据科学家有效使用Pandas库。
SciPy
SciPy主要用于科学计算,拥有许多不同的模块,可用于特殊函数、图像处理、插值法(interpolation)、线性代数、常微分方程(ODE)求解器以及其他多种用途。这个库还可以与NumPy数组一起使用,实现许多高效的数学运算。
Pandas
Pandas是用于数据再加工最好的库,因为它使得处理遗失的数据、自动数据对齐(data alignment)变得更加简单,它还支持处理从不同的数据源收集而来的索引数据。
SciKit
这个流行的机器学习库拥有多种回归、分类和聚类算法,还支持gradient boosting、向量机、朴素贝叶斯模型和逻辑回归。这个库还被设计成能够与NumPy和SciPy进行交互。
Matplotlib
这是一个二维绘图库,有着交互性很强的特性,生成的图标可以放大、推移,并且能够用于发行刊物印刷出版。而且,还支持多平台的交互环境。
Jupyter Notebook
jupyter Notebook 是一个非常有意思的工具,它将数据科学的python 代码,输出的数据和图表,以及说明和注释等都汇聚在一个文件中,所以它叫做笔记本,能够完整地输出一个数据科学报告,或者一篇科学研究的报告。
同时,jupyter notebook还是一个在线python的编程环境。许多公司提高供了在线jupyter notebook 服务。例如微软的AZure Notbook。(https://notebooks.azure.com)。
如果你是python的初学者, 非常推荐使用在线的Jupyter.利用在线的Jupyter要轻松得多, 只需要有网络连接, 有浏览器就可以了开始使用python了。
如果要我推荐一本书的话,我推荐《Python For Data Analysis》 第二版。第一版有中译本,只是有点内容陈旧了。最好看第二版英文原版。当然网络上也有大量python 的资料可供学习。