Primer Python for Quant D01:
Python简介
我之前没怎么想过,我会写一个python教程,毕竟这类教程实在太多了,网上的绝大多数教程都会写得比我好。今天高顿的老师找到我时,一开始我是拒绝的,但是人家非常诚恳地说:给钱。好吧好吧,看在这么多年交情的份上,写一个也行。
但问题是:如何让读者,特别是有志于进入量化行业的人,能从满街都是的python教程中获得与众不同收获,是一个非常难的问题。为此,在大约十五节课的基础教程中,我将杂糅进尽可能多的金融数据的示例。整个教程将以量化交易入门,或者说金融数据分析入门为导向。这份教程的目标学员是 完全没有编程经验的同学 ,因此在课程设计上,我会浅显直白,乃至有些啰嗦的去解释一些基础性的东西。
阅读该教程,建议已有如下的知识储备:
· 识字
· 一台使用windows系统的电脑
· 恒心
1.1 课程安排
我将接下来的课程安排做一个简单的介绍:
D1:课程&Python介绍
课程第一章,简单介绍下编程及python,以及基于anaconda的环境安装;D2:Python基础语法
以hello world程序为例,介绍python的基础语法;D3:基础数据类型
介绍python的基础数据类型;介绍python的基础运算方法与规则;D4:数据结构与字符串
介绍常用的数据结构:列表、元组、字典、字符串等,以及简单操作;D5:控制流程
基础控制:if、循环、嵌套、跳出,以及三个小例子;D6:函数
如何使用、创建一个函数,以及函数参数与返回;D7:类与对象
主要介绍面向对象的编程范式,语法其次;D8:模块
了解python的模块机制,创建使用模块、安装第三方模块;D9:常用内置方法和模块
常用内置函数与模块:sys、os、time、datetime,etc;D10:模块:math
math库的基本用法,以及简单的数学运算;D11:模块:numpy
numpy库的基本用法;D12:模块:pandas
pandas库的基本用法;D13:模块:TA
TA库的基本用法;D14:可视化技术
不讲matplotlib了,更新换代,讲下plotly库的基本用法,以及可视化技巧;D15:编码规范与调试
程序的调试与运行;基于pep8的代码规范;1.2 本教程试图达到的特色
· 数据分析\量化交易指向:
这意味着常规教程中的很多东西我们不会讲。比如,爬虫,自动化运维,自动化办公,以及互联网技术等等。除了此类大型的框架之外,一些细节上我也做了相应的处理。最简单的一句话:在我日常工作中没有用到的东西我一定不会讲;我用到的内容会以量化角度来做删选性的讲。因此,如果你准备从事数据分析或者量化交易工作,请忽略网上的众多教程,因为你会浪费大量的时间在你不需要的知识上。
· 适用于完全的初学者:
在写教程的过程中,我参(chao)考(xi)了众多网上的优秀教程,比如,菜鸟和廖雪峰。我非常认可,绝大多数教程的质量都会超过这一份。然而,有些难以忽视的问题:其中之一就是假设了python的初学者已经掌握了某一门编程语言。因此,很多程序员认为的基本知识并没有做进一步的解释,导致了很多python的初学者对一些术语手足无措。
· 编程优先,python其次:
很多同学向我咨询过一个问题:为什么网上的教程我看不懂。后来我总结了一下,主要原因可能在于,很多教程讲的是语言特性,而没有解释清楚什么是编程。在这篇教程中,python的语言特性会尽可能的被弱化成一个载体,更多地,我希望大家能学会像程序员那样思考。
1.3 Python简介
python是一门计算机编程语言,而计算机编程语言,则是人与电脑都能读懂的一种语言。简单来讲,当你希望你的电脑去做什么事的时候,你必须使用电脑能理解的话来下指令,这个过程就是编程。Python是一种为提高开发速度而设计的高级语言。它拥有大量的库,可用于几乎任何可以想象的计算任务。很个人地讲,当下社会,如果不会python的话,约等于二十年前你不会使用excel。
世界上已经有很多种编程语言了,已经超过了人类语言的数量。那么,为什么我们要选择python呢?因为:
1.3.1 简单
在我使用python很长一段时间,我都将其看作是一种「可执行的伪代码」。这是因为python应该是现有的编程语言中最为简单的一门了。如果你像我一样曾经使用C++来做数据分析的话,你会在第一时间爱上python。根据我的经验,只要保证每天两小时的学习时间,仅仅几周后,一般同学就已经可以非常高效地使用python处理简单问题了。
1.3.2 社群活跃
作为一名程序员,我发觉我很多时间都是用在百度\google上的。无论是新手还是有一定经验的程序员,都不可避免的碰到一系列问题,而一个活跃的社群则为你的工作提供了强大的支持。使用Python的主要原因是它带有一个数量惊人的library。比如:NumPy(向量化操作),SciPy(优化算法),pandas(时间序列分析),statsmodel(统计建模),scikit-learn(统计/机器学习),IPython(交互式开发)和matplotlib(可视化)。
1.3.3 数据友好
适合做数据分析,或者说量化的编程语言有很多种,但是从一个综合的角度来看,python应该是最优选择。在可以看见的几年内,python有可能进一步挤占matlab、sas,包括R的空间,站稳数据科学编程语言的第一位置。在我目前的工作中,python大约承担了100%的数据分析工作,并且在一些低频交易中也有一定的使用。
对于初学者来讲,很难通过纵向对比来了解python的优点。不过这不重要。但是,有两句话我建议大家还是要记一下:
python是一门解释型的编程语言。
用最通俗的话来讲:解释型语言是同声翻译,你的每一行都会实时的被机器所理解。对应的,编译型语言(例如C++)则需要把整个代码文件完全翻译后,机器才能知道自己要做什么。
这为python带来一个显著的优点:即你可以准确的定位到自己的错误代码中,甚至一些错误无法被发觉而使得程序继续运行。
但是,这也有问题:首先是速度,要慢了很多;其次是代码无法被加密,每个发布的python脚本,本质就是发布源代码。当然,这两个小问题我们不在乎。
python是一门面向对象的编程语言。
在python中,很多基础的语法元素都被抽象成一个类,或者说是对象。即使在众多的高级语言之中,python的抽象程度之高也是数一数二的。
然而用python编程非常容易让人困惑:很多教程依旧使用命令行来讲解python,你会觉得python是种指令性的编程语言;python中的函数异常强大,你很容易把python当作一门过程式编程语言;然而,python是实打实的面向对象的。因此在学好python之前,我建议大家深刻记住一句话:万物皆对象。这讲使你的学习曲线更加的平滑,在学习后期的进展更快。
1.4 一些经验性的建议
我没有完整的带过python的课,但是见证过有不少同学,包括公司的实习生,学习python的过程。因此,我想在前面,先给同学们一些学习建议:
· 代码逐字敲出来;代码逐字敲出来;代码逐字敲出来;
重要的事情说三遍。
请记住:编程属于工科,不是理科也不是文科,不是你能看懂教材就能掌握的学科!面对编程第一时间,你要把自己想象成一个技术工,周而复始的从事着重复性的工作。因此逐字敲出代码,是我对众多初学者的第一建议。
· 理解编程而非局限于python
python仅是编程语言的一种,在学会使用python的同时,我更建议大家学会编程思维,即从计算机角度来理解自己的代码是干什么用的。因为无论以后大家是否从事量化工作,或者数据分析工作,编程思维的重要性都要大于单一的编程语言。
· 学会偷懒
一个不争的事实是:程序员都是懒的,能少写代码就少写。这里牵扯到一个问题,就是程序的复用。每个人对编程的理解都不相同,我个人的一个认识是,程序的本质就是为了复用。为此,在个别情况下,我们会尽可能的让代码变得简单,并且,可以应对更多的情况,而非解决某一具体的问题。
其余的一些建议都不是很重要,但是会对你的学习过程中有帮助。例如,买一个好键盘和舒服的显示器(曾经一位同学对我说,她写程序死活写不下去;我用了下她的笔记本电脑,发现我也写不下去);从若干个教程交叉学习,互相印证;找个队友,互相监督等等。这些建议对你的编程有很大的帮助,但不是决定性的。
1.5 基于Anaconda的环境设置
1.5.1 Anaconda的安装
其实以上都是废话,看不看无所谓。
下面咱们来安装python。
请抛弃网上的一些稀奇古怪的python安装教程。 能「双击-下一步」解决的问题,就不用自求麻烦了,纯属脑子有病。我们直接使用anaconda,来安装python,并设置开发环境。
Anaconda是一个python的全家桶。里面包含了大量常用的python库,以及写代码用的编辑器。对于绝大多户数人来说,安装Anaconda就解决了你所面临的python环境问题。Anaconda的官网链接如下:
Anaconda
我不是很确定,不科学上网的话这个网站是否打得开,所以为大家准备了百度网盘的下载:
链接:https://
pan.baidu.com/s/1MxNm5R
IZO6SowKpL4VdTXw
提取码:bgzn
复制这段内容后打开百度网盘手机App,操作更方便哦
请注意这个版本是基于win10位的。下载完之后,请找到:
双击运行,一直下一步即可。
在安装过程中,唯一需要注意的是,你会遇到是否添加环境变量的选择。
环境变量是电脑操作系统使用的一些参数。如果你勾选了下图中的第项个,安装程序会跳出来一个警告,建议你不要自动添加anaconda的path。
但是我们不听它的,勾选,继续下一步。
最后,安装完成。
这个时候,你的电脑的开始文件夹里,会有anaconda出现,如下图所示。
Anaconda安装结束。
让我们确定下python是否安装成功。
点击开始->Anaconda3(64bit)->Anaconda Prompt(Anaconda3),你将启动了一个anaconda的命令行程序。
命令行是你给电脑下指令的最直白的方式,最常用的是cmd。prompt也是一个命令行程序,随着python学习的不断深入,我们会时不时的使用一下。在此,我们先混个脸熟,简单熟悉下界面。
命令行程序有一个黑底白字的交互界面(当然你可以调成白底黑子),在这里,你和你的电脑可以直接的对话。几乎所有的电脑的行为都可以通过命令行来发出指令,比如,我们运行下python解释器,请在命令行内输入:
python
通过键入
python
我们等于告诉电脑:启动python解释器。
接着,电脑懂了你的指令,输出了python的版本等信息,接着进入了python。
这并不是我们写程序的地方。虽然我们可以直接在命令行下写代码,但是这太复杂,不方便,因此我们退出python,把命令行关掉即可。
无论如何,当你能从命令行成功运行python解释器时,就说明我们的安装没有问题。
1.5.2 Jupyter Notebook初探
如上文所述,使用命令行来写python是个糟糕的选择。市面上流行的代码编辑器有很多,包括了:
· vscode
· spyder
· pycharm
等等,而且都不错。但是我在这里推荐给大家的是Jupyter Notebook。Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。对于从事数据工作的人来说,我认为jupyter有一个非常棒的优点,即可以将你的代码,以笔记的形式呈现出来,方便报告与以后的查看。本系列教程的所有文档均为jupyter格式,即使是这一篇,没有代码的文章。
Jupyter Notebook启动
点击开始->Anaconda3(64bit)->jupyter Notebook(Anaconda3),你将启动Jupyter。
一个命令行窗口将被自动打开,并且自动执行一些指令;同时,你的默认浏览器将跳转到一个崭新的界面,如下图所示:
为了方便起见,请将Jupyter Notebook程序固定到你的任务栏里,右键,固定到任务栏。这样你下次启动Jupyter就省事很多了。
建议大家在Documents下新建一个MyProjects文件夹,并在MyProjects文件夹下新建一个PythonLearning的文件夹,用以保存明天起,我们所需要的代码文件。
1.5.3 Notebook文件
下面我们会建立一个jupyter notebook文件,并依此作为样板,来做python基础语法的说明。
请进入到你试图保存的文件夹里,
当你从浏览器中进入到你想存放代码的位置后,就可以新建一个notebook文档了。
你的浏览器会自动打开一个新的网页,页面如下。同时,你的硬盘上会会多出一个以后缀名.ipynb结尾的文件,这就是我们写代码的地方。
其实,jupyter的使用要比别的编辑器简单的多,刚开始,我们只需要注意五个地方:
- 文档名:
默认的文档名可以更改,你只需点击一下,就可以按照自己的需要更改文档的名称了;
2. 保存\增加cell:
Jupyter中,代码或笔记都是在一个个cell中运行的。通常我们使用ctrl+s直接保存文档,以防丢失。而使用快捷键b来在当前cell下增加一个新cell;
3. 运行cell/停止运行/重启解释器/重启解释器并运行所有cell:
运行cell中的代码或者笔记,快捷键是ctrl+enter;如果你不小心写了个死循环之类的,可以使用停止键;
4. cell模式切换:
notebook中,cell有两个基本模式:用于代码运行的代码模式,用以写笔记的md模式;同时,cell还有两个状态:编辑状态和退出状态。
5. cell:
你用以编写代码或者笔记的地方。
至此,jupyter notebook的最最基本用法已经讲完了。虽然jupyter还有很多能讲的东西,咱们先破车上路,用起来再说。