Python机器学习与量化投资
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 开发环境搭建

1.2.1 AI领域的标准编程语言:Python

Python是最适合初学者的编程语言,也是目前IT行业入门简单、功能强大的工业级开发平台的语言。

Python已经是机器学习、神经网络等人工智能开发领域的工业标准编程语言。

1.入门简单

任何熟悉JavaScript脚本、Visual Basic、C语言、Delphi的用户,通常一天即可学会Python。

即使是不会编程的设计师、打字员,一周内也能熟练掌握Python,学习难度绝对不会高于Photoshop、五笔输入法,至少笔者和许多程序员一样,也不会使用五笔输入法。

2.功能强大

海量级的Python模块库,提供了IT行业最前沿的开发功能。

· 大数据:pandas已经逐步超越R语言。

· CUDA:高性能计算,Python、C(C++)与Fortran是NVIDIA官方认可的3种编程语言,也是目前唯一适合PC平台的CUDA编程工具。

· 机器学习:scikit-learn、Theano、Pattern是国际上热门的机器学习平台。

· 自然语言:NLTK,全球首选的自然语言处理平台;spaCy,工业级的NLP平台。

· 人脸识别:OpenCV,光流算法、图像匹配、人脸算法,简单优雅。

· 游戏开发:Pygame提供图像、音频、视频、手柄、AI等全套游戏开发模块库。

· 字体设计:Fontforge,是唯一商业级的字体设计开源软件,内置的脚本语言和底层核心的Fonttools,都是基于Python而开发的。

· 电脑设计:blend、GIMP、Inkscape、MAYA、3DS都内置或扩展了Python语言支持。

既然Python如此美好,而且是100%免费的开源软件,学习Python的人越来越多,为什么Python始终还只是一种小众语言呢?

笔者认为,Python的“大众化”之路,存在以下两个瓶颈。

· 配置:软件行业有一句俗话“搞懂了软件配置,就学会了一半”。对于Python和Linux等许多开源项目而言,80%的问题,都出现在配置方面,尤其是模块库的配置。

· OOP(面向对象程序设计):大部分人都认为Python是一种“面向对象”的编程语言,而业界公认OOP的编程风格比较繁杂。

如果能够解决好以上两个问题,Python的学习难度可以降低90%,在应用领域可以瞬间提升数十倍效能,而且这种提升是零成本的。

1.2.2 zwPython:难度降低90%,性能提高10倍

笔者在WinPython软件包的基础上,推出了“zwPython”——字王集成式Python开发平台。

· 提出“零配置、零对象”研发理念,绿色软件封装模式,类似Mac开箱即用风格,无须安装,解压即可直接使用,还可以放入U盘,支持Mob-App移动式开发编程。

· 具有“外挂”式“核弹”级开发功能,内置很多功能强大的开发模块库,例如OpenCV视觉、人脸识别、CUDA高性能GPU并行计算(OpenCL)、pandas大数据分析、机器学习、NLTK自然语言处理。

· 便于扩展,用户可以轻松增删相关模块库,全程智能配置,无须用户干预,就好像拷贝文件一样简单,而且支持U盘移动便携模式,真正实现了“一次安装,随处可用”。

· 针对中文开发文档缺乏、零散的不足,内置多部中文版OpenCV、Fontforge和Python入门教材。

· 内置多款中文开源TrueType字库。

· 大量示例脚本源码,涵盖OpenCV、CUDA、OpenCL、Pygame等。

如此种种只是为了便于IT行业外的用户能够“零起步”,快速入门,并且短时间内应用到生产环节当中去。

zwPython前身是zw2015sdk:字王智能字模设计平台,原设计目标是向广大设计师提供一款统一的、可编程的字体设计平台,以便于大家交流。

· 设计师、美工都是文艺青年、IT小白,所以,简单是必需的,开箱即用也必须是标配。

· 由于设计师做设计,所以图像处理PIL、Matplotlib模块是必需的。

· 集成了OpenCV作为图像处理、匹配模块,自然也提供了机器学习功能。

· 字模处理数据量很大,属于大数据范畴,须集成SciPy、NumPy和pandas数据分析模块。

· 由于原生Python速度慢,所以增加了PyCUDA、OpenCL高性能GPU计算模块。

如此一而再,再而三地扩充,发现zwPython已经基本覆盖了目前Python和IT编程90%的应用领域,因此又增加了部分模块,将zwPython扩展成为一个通用的、集成式Python开发平台。

1.2.3 “零对象”编程模式

虽然,很多人认为Python是一种“面向对象”的编程语言。

但对于初学者而言,把Python视为一种BASIC风格的、过程式入门语言,学习难度可以降低90%,基本上学习一小时即可动手编写学习代码。

有人说,“面向对象”最大的好处是方便把人脑子搅乱。

Windows、Linux、UNIX、Mac OS X内核都是C语言编写的。有一种系统是C++写的内核,就是诺基亚的塞班系统,据说代码量很大,连他们自己的程序员都无法维护,最后就死掉了。

简而言之,“面向对象”风格的代码:一个字“繁”、两个字“繁繁”、三个字“繁繁繁”。

“零对象编程模式,用BASIC的方式学习Python”,是笔者向Python编程语言的入门用户提出的一种全新的学习理论,一家之言,仅供参考。

Talk is cheap,show me the code!大家还是多多动手。

大家很容易理解“零配置”,下面关于“零对象”再补充几点。

· 不写“面向对象”风格的代码不等于不能使用,对于各种采用“对象”模式开发的模块库,我们仍然可以直接调用。

· 将Python视为非“面向对象”语言并非大逆不道,事实上,许多人认为,Python也是一种类似LISP的“函数”编程语言。

· 笔者从事编程十多年,从未用过“面向对象”模式编写过一行“class”(类对象)代码,依然可以应对各种编程工作。

· 目前“面向对象”编程理论在业界仍然争论不休,入门者功力不够,最好避开强者间的火力杀伤。

· “面向对象”过于复杂,与“人生苦短,我用Python”的优雅风格天生不合。

1.2.4 开发平台搭建

本节主要讲解Python开发环境和数据包的配置、应用流程方面的知识。

本书所有案例程序均采用纯Python语言开发,除特别指明外,均默认使用Python 3语法,且经过zwPython平台测试。

zwPython是极宽公司推出的一个Python集成版本,功能强大,属于免费开源软件。系统内置了数百种专业的Python模块库,无须安装,解压即用。

本书所有案例程序可用于zwPython平台,以及各种支持Python 3的设备平台,包括Linux操作系统、Mac苹果电脑,以及安卓系统、树莓派。

其他非zwPython用户运行本书程序,如果出现问题,通常是缺少有关的Python模块库,可以根据调试信息安装相关的Python模块库,再运行相关程序。

限于篇幅,关于Python语言和pandas数据分析软件的基本操作,请读者查看有关图书。

zwPython下载地址,请参见TOP极宽量化网站“资源中心”:

http://www.topquant.vip,或http://www.ziwang.com。

1.2.5 程序目录结构

本书配套程序的工作目录是zwPython\kb_demo,这个目录也是默认的工作目录,凡是没有标注目录的脚本文件,一般都位于该目录。有关的程序会定时在读者群发布更新,请读者及时下载。

kb_demo目录收录的是本书课件配套代码和所需数据,kb_demo目录也可以复制到其他目录,建议放到zwPython根目录下。

zwPython目录结构中的其他子目录如下。

· \zwPython\doc\:用户文档中心,包括用户手册和部分中文版的模块库资料。

· \zwPython\py36\:Python 3.6版本系统目录,除增加、删除模块库外,一般不需要改动本目录下的文件,以免出错。另外,如果日后Python版本升级,这个目录也会变化,如Python 3.7,会采用py37目录。

· \zwPython\demo\:示例脚本源码。

· \zwPython\zwrk\:zw工作目录,用户编写的脚本代码文件建议放在本目录下。

· \zwPython\TopQuant\:极宽量化系统源码。

案例1-1:重点模块版本测试

案例1-1文件名是kb101_ver.py,主要用于重点模块版本号的测试,因为Python发展很快,许多配套的第三方软件模块也更新频繁,有时会出现API接口变化,从而造成版本冲突。

这种版本测试,是工程一线特别是团队项目起步阶段规范开发环境常用的一种手段。

案例1-1源码很简单,需要注意的是源码头部的import模块库导入语句。

import导入常用的模块和模块的缩写。前面的import模块语句都很正常,请注意最后两行语句。

tflearn模块有两种导入方式。严格说来,第二种方式不是标准的模块导入命令,而是一种别名,是长变量名称的缩写。这是因为,tflearn本身是TensorFlow系统内置的第三方模块,目前也有独立版本的tflearn模块,不过两者的源码并非完全同步,笔者在测试TF-GPU 1.2和tflearn 0.31时,就发现有版本冲突问题。

为了程序的兼容性,通常采用以下的模式。

案例1-1的核心代码也很简单,就是输出相关模块的版本号。

以上代码中,需要注意的是使用的版本显示命令。

这个虽然不是标准的Python语法,但已经是一种约定俗成,有时,也被称为魔法语句。

对应的输出信息如下。

以上输出信息中,需要注意的是开头的输出信息。

以上输出信息,表示使用TensorFlow作为后端程序,import导入Keras模块库时自动输出。这条信息只在第一次运行程序时出现,大家可以多运行几次,看看效果。

此外,需要注意的还有最后一条输出信息。

tflearn没有版本号,这是因为tflearn模块不支持相关的版本命令。

这可能是因为tflearn原本是TensorFlow内置的模块,所以没有加入相关的版本语句,即使我们采用import导入独立的tfearn模块,也无法显示相关的版本号。

目前,我们使用的tflearn版本号是0.31,为了避免版本冲突,还是希望tflearn开发团队在未来的更新当中增加相关的版本号信息,

案例1-1介绍了机器学习结合金融工程、量化回溯、数据分析等项目时常用的Python模块。

· TensorFlow是神经网络、深度学习开发平台。

· tflearn、Keras、TensorLayer是TensorFlow的简化接口。

· NLTK是语义分析模块。

· pandas是新一代数据分析工具。

· Plotly是新一代互动型数据可视化绘图工具。

· Arrow是新一代优雅、简洁的时间模块。

· Matplotlib是经典的绘图模块。

· Tushare是国内股票数据的采集模块。

以上模块和对应的版本,我们均已集成在最新版本的zwPython当中。使用其他平台,如Mac、Linux,或者其他Python开发环境的用户,请自行升级安装以上模块,并注意相关的版本号。

升级安装相关模块库时,请注意相关的依赖模块软件,特别是手动升级独立的安装包时。

笔者在升级以上模块库时,就遇到提示说,新版本的pandas缺乏某种属性,无法使用。后来在Stack Overflow这个全球最大的IT答问网站才找到答案。原来是配套的Dash模块也必须升级到最新的Dash 0.14.3版本。