为什么要学Python?
Python的重要性无需赘言,当然在大型项目上的应用还是不如Java等语言。我个人认为,Python是目前最适合管理科学与工程或其它商科专业同学进行学习的语言,主要基于以下原因:
- 语法简单,容易上手。相比于Java和C等语言,Python的代码平易近人,省却了括号、强制声明变量类型等要求,降低了学习门槛。
- 资料众多,扩展性强。网上有很多教程,照着来能及时评估自己的学习进度,激发学习热情。扩展性强主要体现在其胶水语言的特性,能借助他人的工作快速实现想要的功能,降低了学习的难度。
- 可满足科研需求。商科专业常常涉及到的数据处理和分析、优化算法对比、随机过程和强化学习、网络建模和展示等等科研需求都有许多Python的包可用。这些包久经考验,仍在开源社区中获得不断的改进,是我们提升科研效率的利器。
在我看来,会编程是将来研究生、大学生(甚至高中生)的必备技能,而Python是目前最好的选择(好吧我先加上之一
)。所以,开始学习之旅吧。
搭建Python环境的步骤
- 安装Anaconda。去官方下载地址或者这个网站(如果官网下载比较慢)选择最新版本并下载,一路next即可完成安装。注意,这里涉及到Python版本选择问题,直接选择3.x版本(比如3.7)即可。但是,如果需要用一些商业优化软件比如Cplex、Gurobi,则要关注这些软件的版本是否支持当前Python的版本。比如,Gurobi 8.1支持Python 3.7,但Gurobi 8.0只支持Python 3.6。而Cplex 12.8也不支持Python 3.7,只能用Python 3.6。因为没有亲测,不确定Cplex 12.9是否支持Python 3.7。
- 测试Anaconda是否正常安装的方法是按
Win
键,然后找到Anaconda Powershell Prompt
,点击后输入conda --version
,应当出现正确的Anaconda版本。之后,输入conda upgrade --all
升级所有的包(package)。这个步骤可能会很久,可以同时进行后续步骤。 - 安装编辑器IDE。Anaconda自带了Spyder编写Python程序,其界面和MATLAB很像。但建议安装更好的集成开发环境(IDE,Integrated Development Environment)。在PyCharm下载页面找到免费的Community版本后安装即可。如果你想用Professional版本,则需要用学校邮箱在注册界面申请license。
- 打开PyCharm,新建一个项目,在Location输入名称后点击下面的三角形和
Project Interpreter
,选择New Environment using Conda
后点击Create
。这样就创建了一个空项目,而且是在一个干净的环境中。 在PyCharm里点击File -> New… -> Python File创建一个新的py文件,比如test.py,输入
print('Hello, world!')
然后点击右上角一个绿色的三角形(或者右键点击输入的界面,选择Run ‘test’),即可在下方看到输出结果。至此,你完成了第一个Python程序。
- 配置常用的包。在当前项目中能做的事情不多,因为还有很多重要的包没有导入到这个项目的新环境中,比如
- numpy,矩阵计算,后续很多包都需要这个,必装!
- scipy,内置寻优、积分、差值、回归等各种计算,非常有用
- pandas,主要用于各种(面板、时序)数据统计分析,其DataFrame类非常好用
- matplotlib,用于绘制各种图形
- scikit-learn,用于基本的机器学习
- networkx,绘制网络
- pymysql,用于连接MySQL数据库。当然,也可以采用ORM方式操作数据库。
一次安装这些包只需要在PyCharm界面左下方的Terminal
界面中输入conda install numpy scipy pandas matplotlib scikit-learn networkx pymysql
。查看当前环境已经安装的包可以用conda list
命令,卸载某个包只需输入conda uninstall numpy
。一般而言,在需要一个工具的时候,应当先去检索一下是否已经有人制作了Python的包,从而避免自己从零开始重做“轮子”。
学习Python
一些学生决定学习Python后,就买了或借了很多书籍打算从头开始一点一点学习。根据我自己的惨痛经验,结果很可能是从入门到放弃。相比于书籍,很多软件和网络资源可以提供更直观和全面的学习体验。以下学习途径供参考:
- 利用IDE或学习网站。比如在PyCharm中学习Python是免费的,安装一个EduTools插件即可。更多的一些PyCharm技巧可参考这个网页。
- 依葫芦画瓢。许多有名的包都有详尽的说明和完整的代码,可以直接复制下载运行,并通过修改部分内容加深对代码的理解。比如可以在这个网页找到许多图的代码,很快就能仿制出你所需要的图。
- 实现上课所学算法。比如其他课程里老师可能教了一些算法(比如主成分分析、多属性决策等)或介绍了一些专用软件。如果想加深对这些算法的理解,最好的办法就是自己写代码实现。正所谓纸上得来终觉浅,绝知此事要躬行。
- 学习爬虫。通过爬虫程序,你可以从电商、政府、社交网络等网站上获得一些公开数据、图片、视频。这些数据可能有助于你的研究,练习的爬虫方法也比较实用。但是如果网站有反爬虫手段,建议不要自己去对抗,毕竟对方可能是一个专业的团队,而你没有必要花费太多时间研究爬虫攻防技术。
- 当你入门后,可以去Github找找感兴趣的库,看看自己的代码和这些库的代码之间的差距。如果能吃透一个库,也可以做一些贡献。如果自己有好的想法,也可以新建一个库制造一个好用的轮子。
总而言之,学习一门语言最好的方式还是Learning by doing,边做边学。如果有deadline,那效率就更高了。
安装Gurobi
上面的步骤已经安装好了Python和常用的一些包了。如果需要用到求解线性规划、整数规划等问题,则需要安装Gurobi。
- 去Gurobi官网用学校邮箱注册账号,申请一个academic license,大致为:
grbgetkey abcdabcd-abcd-abcd-abcd-abcdabcdabcd
- 下载最新版的Gurobi optimizer,安装后重启电脑
- 按
Win + R
键,然后输入cmd
回车,将grbgetkey abcdabcd-abcd-abcd-abcd-abcdabcdabcd
复制后回车,保存好license后即完成注册。如果出现错误,一般是因为Gurobi认为电脑的ip地址不是科研单位的ip地址。可发邮件沟通,争取解决这一问题。 - 打开
Anaconda Powershell Prompt
,输入两个命令conda config --add channels http://conda.anaconda.org/gurobi
和conda install gurobi
,将Gurobi安装到Anaconda的base环境中。 - 用PyCharm打开需要Gurobi的项目,在左下方的
Terminal
界面中输入conda install gurobi
即可将base环境中的Gurobi克隆到该项目中。
Python的应用
Python由于轮子多(脑洞大的程序员多),所以很多事情都可以考虑用Python来代劳,尤其是重复性工作。所以,你应该学会从程序员的角度看待各种工作和任务,即从代码复用,转为流程复用。
学过编程的同学都明白代码复用的意义。在科研和未来工作中,你要学会流程复用:梳理自己的工作流,看哪些工作是可以自动化处理的。如果有,分析这种工作的输入和输出,将其标准化,从而为编程处理打下基础。由于Python的强大,即便其中涉及到一些软件处理过程,也许都可以用Python替代。
我举个例子。学科评估需要收集教师信息并将其按照评估表格的格式准备好数据。数据采集使用问卷系统,获得的表格每一行是一个教师,而列的数量能多达8000多列(比如,论文的字段可能有10个,上限20篇,则有200个字段,而学科评估把论文分成了好几类)。我采用Python自动将问卷采集的原始数据处理为评估表格的格式,还能实现按照不同学科分为不同表格,导出为CSV格式,方便后续流程直接复制粘贴。这样的流程同样可以用于固定报告的生成。比如直接处理从Wind等数据库导出的数据,自动按照预定格式生成表格、绘制回归曲线等,基本可以完成从数据到结论的全流程。
此外,Python还可以和后面要介绍的LaTeX、数据库、Git等结合起来,形成一套高效的工作流程。提升效率的需求可能永无止境,但也要平衡好学习成本。