C H I N A S E C U R I T I E S R E S E A R C H
证券研究报告·金融工程深度报告
[table_main]
零基础 python 代码策略模型实战:
金融工程专题报告模板
——大数据人工智能研究之七
重要观点
本文概述
本文主要介绍了 python 基础、爬虫、与数据库交互、调用机器学
习、深度学习、NLP 等。分别介绍了各个模块的安装,环境的搭
建等。并且以机器学习选股为例,把各个模块连贯起来,核心代
码基本都有详尽的解释。
大数据 AI 时代,python 无往不胜
Python 的包装能力、可组合性、可嵌入性都很好,可以把各种复
杂性包装在 Python 模块里,非常友好的供调用。Python 资源丰富,
深度学习如 keras,机器学习如 sk-learn,科学计算如 numpy、
pandas,自然语言处理如 jieba 等。
Python 将极大提高工作效率
无论是科学计算,还是图形界面显示;无论是机器学习还是深度
学习;无论是操作 excel,txt 等还是连接数据库;无论是搭建网站
还是爬虫;无论是自然语言处理还是打包成 exe 执行文件,python
都能快速完成。以最少的代码,最高效的完成。
人人可编写人工智能模型
人工智能给人感觉难于入手,重要原因是机器学习、深度学习、
自然语言处理等门槛太高;python 则以最简洁的方式,让你快速
使用人工智能相关算法。本文以实战为目的,对模块的安装,搭
建环境,核心代码等进行了详细的介绍。
人工智能选股模型策略
以传统因子滚动 12 个月值为特征值,个股下一期按收益大小排
序,排名前 30%作为强势股,排名靠后 30%作为弱势股。用机器
学习算法进行训练预测。用当期因子作为输入,预测未来一个月
个股相对走势的强弱。根据个股的相对强势,我们把排名靠前
20%的作为多头,排名后 20%的作为空头进行了研究,样本外
20090105 到 20171130 期间,行业中性等权年化多空收益差为
16.45%,年化波动率为 7.34%,最大回撤为 10.84%。
金融工程研究
[table_invest]
丁鲁明
dingluming@csc.com.cn
021-68821623
执业证书编号:S1440515020001
研究助理:喻银尤
yuyinyou@csc.com.cn
021-68821600-808
发布日期: 2018 年 03 月 08 日
市场表现
[table_indextrend]
相关研究报告
[table_report]
18.02.02
大数据人工智能研究之六:机器学习因
子有效性分析
17.10.18
大数据研究之五:大数据、机器学习、
深度学习在投资领域应用的方法论概述
17.08.16
大数据研究之四:基于新闻热度的周期、
成长、消费风格轮动配置
17.03.08
大数据研究之三:新闻情绪选股的多空
差策略
17.03.02
大数据研究之指标构建:机器学习之贝
叶斯文本分类算法的实现
16.10.12
大数据研究体系之择时篇:基于新闻热
度的多空策略
请参阅最后一页的重要声明
HTTP://RESEARCH.CSC.COM.CN
金融工程研究
金融工程专题报告
目录
一、Python 介绍 ....................................................................................................................................................... 4
1.1 Anaconda(Python IDE)的安装 ................................................................................................................ 4
1.2 Python 基础知识简介 ............................................................................................................................... 5
二、Python 的科学计算库 ....................................................................................................................................... 7
2.1 Numpy 库 ..................................................................................................................................................... 7
2.2 Pandas 库 ................................................................................................................................................... 7
2.3 Scipy 库 ..................................................................................................................................................... 9
2.4 Matplotlib 库 ......................................................................................................................................... 10
三、Python 的爬虫相关库 ......................................................................................................................................11
3.1 Scrapy 库 ................................................................................................................................................. 12
3.2 BeautifulSoup 库 ................................................................................................................................... 13
3.3 Pyquery 库 ............................................................................................................................................... 14
四、Python 的数据交互 ......................................................................................................................................... 14
4.1 Python 与数据库的交互 ......................................................................................................................... 14
4.2 Python 与 csv、excel 和 txt 文件的交互 ............................................................................................ 15
4.3 Python 与 Wind 客户端的交互 .............................................................................................................. 17
五、Python 自然语言的处理 ................................................................................................................................. 17
5.1 jieba 库 ................................................................................................................................................... 17
六、Python 与机器学习 ......................................................................................................................................... 19
6.1 Scikit-learn 库 ..................................................................................................................................... 19
6.2 分类算法,以朴素 Bayes 为例 .............................................................................................................. 20
6.3 回归算法:以 Logistic 为例 ............................................................................................................... 21
6.4 聚类算法:以 k-means 为例 ................................................................................................................. 22
七、Python 与深度学习 ......................................................................................................................................... 23
7.1 Keras 框架 ............................................................................................................................................... 23
7.2 长短期记忆网络 ...................................................................................................................................... 24
7.3 卷积神经网络 .......................................................................................................................................... 26
八、人工智能因子打分策略 ................................................................................................................................. 27
8.1 策略代码实战 ......................................................................................................................................... 27
8.2 策略结果(以 Logistic 为例) ............................................................................................................... 31
九、Python 股票策略打包成 Exe 文件 ................................................................................................................. 32
9.1 运用 pyinstaller 打包成 exe .............................................................................................................. 32
十、模型代码编写建议 ......................................................................................................................................... 32
请参阅最后一页的重要声明
HTTP://RESEARCH.CSC.COM.CN
1
金融工程研究
金融工程专题报告
图目录
图 1:Anaconda 界面介绍 ............................................................................................................................... 4
图 2:Matplotlib 库示例图 .............................................................................................................................11
图 3:简单爬虫流程图 .................................................................................................................................. 12
图 4:csv、excel 数据示例 ............................................................................................................................ 16
图 5:txt 数据示例 ......................................................................................................................................... 16
图 6:LSTM 神经元结构 ............................................................................................................................... 25
图 7:人工智能选股多空收益差策略净值 .................................................................................................. 31
请参阅最后一页的重要声明
HTTP://RESEARCH.CSC.COM.CN
2
金融工程研究
金融工程专题报告
表目录
表 1:Python 数据类型 .................................................................................................................................... 5
表 2:Python 函数语法 .................................................................................................................................... 5
表 3:Python 函数举例 .................................................................................................................................... 6
表 4:Python lambda 表达式举例 ................................................................................................................... 6
表 5:Python math 模块举例 ........................................................................................................................... 6
表 6:Python numpy 库函数举例 .................................................................................................................... 7
表 7:Python pandas 库函数举例 .................................................................................................................... 9
表 8:Python Scipy 库函数举例 .................................................................................................................... 10
表 9:Python Matplotlib 库示例 .................................................................................................................... 10
表 10:Python Scrapy 库爬虫举例 ................................................................................................................ 13
表 11:BeautifulSoup 库操作步骤 ................................................................................................................ 13
表 12:BeautifulSoup 爬虫案例 .................................................................................................................... 13
表 13:pyquery 爬虫案例 .............................................................................................................................. 14
表 14:Python 与 MySQL 的交互操作条目 ................................................................................................. 15
表 15:Python 与 SQL Server 的交互操作条目 ........................................................................................... 15
表 16:Python 与 csv、excel 的交互 ............................................................................................................ 16
表 17:Python 与 txt 的交互 .......................................................................................................................... 17
表 18:Python 与 windPy 的交互 .................................................................................................................. 17
表 19:Python jieba 库常见的操作 ............................................................................................................... 18
表 20:sklearn 库示例(以线性回归为例子) ................................................................................................. 20
表 21:朴素 Bayes 算法 sklearn 库实现 ....................................................................................................... 21
表 22:Logistic 回归算法 sklearn 库实现 ..................................................................................................... 22
表 23:kmeans 算法 sklearn 库实现 .............................................................................................................. 23
表 24:LSTM 示例 ......................................................................................................................................... 26
表 25:卷积神经网络代码示例 .................................................................................................................... 27
表 26:提取数据库核心代码 ........................................................................................................................ 28
表 27:数据预处理核心代码 ........................................................................................................................ 29
表 28:机器学习模块(以 knn 为例) ........................................................................................................ 30
表 29:计算 IC 核心代码 .............................................................................................................................. 30
表 30:结果入库核心代码 ............................................................................................................................ 31
请参阅最后一页的重要声明
HTTP://RESEARCH.CSC.COM.CN
3
一、Python 介绍
金融工程研究
金融工程专题报告
Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于 1989 年发明。有以
下优点简单、易学、免费开源、可移植性、解释性强;缺点为单行语句输出、同 C++和 Matlab 比运行速度较慢。
Python 有较为强大的标准库和模块,方便用户进行调用:如科学计算的 Numpy、Pandas、Scipy 库;如机器学
习和深度学习的 Scikit-learn、Keras 库;如爬虫的 Pyquery、BeautifulSoup、Scrapy 库。Python 的应用领域较为
广泛包括 Web 开发、人工智能、云计算、网络爬虫,游戏开发等。
1.1 Anaconda(Python IDE)的安装
Python 的集成开发环境(IDE)有很多,如 Pycharm、Anaconda、eclipse。其中 Anaconda 是用于科学计算较好
的 IDE,支持多种操作系统如 windows、Mac、Linux 等。Anaconda 有如下优势:使用方便,可以自由转化成
Matlab、R 等相关类似界面,非常友好;自带安装了一些计算标准库和模块,可以直接调用而且具有强大的库
管理器。
下载以及安装 anaconda 可以从以下资源中获取:
•anaconda 官方网站:https://www.anaconda.com/download/#macos。
下载安装完成后,打开 Spyder 图标,可以看到如下图的界面:其中①为编辑栏菜单,可以进行 run 等各项
操作;②为脚本编辑框,即在里面编写代码;③为变量观察框,可以单独查看变量的情况;④为结果控制窗口,
可以看到运行结果,也可以在其中执行语句。
图 1:Anaconda 界面介绍
数据来源:中信建投证券研究发展部
请参阅最后一页的重要声明
HTTP://RESEARCH.CSC.COM.CN
4
1.2 Python 基础知识简介
1)Python 内置数据类型
金融工程研究
金融工程专题报告
① Python 的内置数据类型有很多种,包括 Number(数字)、String(字符串)、List(列表)、Tuple(元组)、
Dictionary(字典)、Bool(布尔)等。数字类型主要分为 int(整数型)、long(长整型)、float(浮点
型)和 complex(复杂型);列表是一种可修改的集合类型,其元素可以是数字、字符串等基本类型,
也可以是列表、元组、字典等集合对象,甚至可以是自定义的类型;元组类型和列表一样,也是一种
序列,与列表不同的是,元组是不可修改的;字典类型是一种键值对的集合。
表 1:Python 数据类型
数据类型
Number(数字)
String(字符串)
List(列表)
Tuple(元组)
Dictionary(字典)
Bool(布尔)
数据来源:中信建投证券研究发展部
2)Python 函数
举例
25
'Hello World!'
['name', 2, [1, 2]]
('age', 1, 2)
{'a': 1, 2: ['a_a']}
True, False
函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段。函数的作用是提高应用的模块性
和代码的重复利用率。Python 提供了许多内建函数,比如 print()。但也可以自己创建函数,这被叫做用户自定
义函数。定义函数的规则如下:
① 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号();
② 任何传入参数和自变量必须放在圆括号中间,圆括号中间可以用于定义参数;
③ 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明;
④ 函数内容以冒号起始,并且缩进;
⑤
Python 函数的语法格式如下表 2,具体函数举例如表 3:
return[表达式]结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
表 2:Python 函数语法
def function_name(parameters):
"""函数_文档字符串"""
function_suite
return [expression]
数据来源:中信建投证券研究发展部
请参阅最后一页的重要声明
HTTP://RESEARCH.CSC.COM.CN
5
金融工程研究
金融工程专题报告
表 3:Python 函数举例
>>>import math
>>>def quadratic(a, b, c):
"""二次方程求根"""
x1 = (-b + math.sqrt(b * b - 4 * a * c)) / (2 * a)
x2 = (-b - math.sqrt(b * b - 4 * a * c)) / (2 * a)
return x1, x2
>>>answer = quadratic(1, 2, 1)
>>>print(answer)
(-1.0, -1.0)
数据来源:中信建投证券研究发展部
Python 除了正常的函数调用之外,还使用 lambda 来创建匿名函数。其特点如下:1.lambda 只是一个表达式,
函数体比 def 简单很多;2.lambda 的主体是一个表达式,而不是一个代码块;3.lambda 函数拥有自己的命名空间,
且不能访问自有参数列表之外或全局命名空间里的参数;4.虽然 lambda 函数看起来只能写一行,却不等同于 C
或 C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。lambda 表达式举例如表 4:
表 4:Python lambda 表达式举例
>>>y = lambda x: x - 1
>>>print(y(2)):
1
数据来源:中信建投证券研究发展部
3)Python 模块
Python 中有一个概念叫做模块(module),这个和 C 语言中的头文件以及 Java 中的包很类似,比如在 Python
中要调用 sqrt 函数,必须导入 math 这个模块。在 Python 中用关键字 import 来导入某个模块,比如 import math
就导入了 math 模块。在调用 math 模块中的函数时,必须这样引用:模块名.函数名。在 Python 中,每个 Python
文件都可以作为一个模块,模块的名字就是文件的名字。
表 5:Python math 模块举例
math.exp(x)
返回 e 的 x 次方
math.pow(x, y)
返回 x 的 y 次方
math.floor(x)
返回不大于 x 的整数
math.fabs(x)
返回 x 的绝对值
math.fmod(x, y)
返回 x%y(取余)
数据来源:中信建投证券研究发展部
请参阅最后一页的重要声明
>>> math.exp(2)
7.38905609893065
>>> math.pow(5,3)
125.0
>>> math.floor(5.8)
5.0
>>> math.fabs(-5)
5.0
>>> math.fmod(5,2)
1.0
HTTP://RESEARCH.CSC.COM.CN
6
金融工程研究
金融工程专题报告
二、Python 的科学计算库
Python 的科学计算包有很多,常见的有 Numpy 库,Pandas 库,Scipy 库和 Matplotlib 库,其中 Numpy 库主
要提供矩阵计算的功能;Pandas 库主要提供带标签列(columns)和索引(index)的数据结构之间的计算功能;Scipy
库可以当做是 Numpy 库的升级,是基于 Numpy 构建的一个集成了多种数学算法和方便的函数的 Python 模块;
Matplotlib 库主要提供图形可视化的功能。
2.1 Numpy 库
Numpy 是 Python 的一个科学计算的库,提供了矩阵运算的功能,其一般与 Scipy、matplotlib 一起使用。其
实,list 已经提供了类似于矩阵的表示形式,不过 Numpy 为我们提供了更多的函数。操作方法有以下几种:
1) 导入模块;
2) 以 list 或 tuple 变量为参数产生一维或者多维度的数组;
3) 通过 reshape 方法,创建一个只改变原数组尺寸的新数组,原数组的 shape 保持不变;
4)
arange 函数通过指定开始值、终值(不包括)和步长来创建一维数组;
linspace 函数通过指定开始值、终值(包括)和元素个数来创建一维数组;
5)
6) 合并数组可以分为 vstack(垂直方向)和 hstack(水平方向)操作;
表 6:Python numpy 库函数举例
>>>import numpy as np
>>>a = np.array([1, 2, 3, 4])
>>>print(a)
[1 2 3 4]
>>>b = a.reshape((2, 2))
>>>print(b)
[[1 2]
[3 4]]
>>>c = np.arange(0, 1, 0.2)
>>>print(c)
[0 0.2 0.4 0.6 0.8]
>>>d = np.linspace(0, 3, 4)
>>>print(d)
[0 1 2 3]
>>>e = np.hstack((b, b))
>>>print(e)
[[1 2 1 2]
[3 4 3 4]]
数据来源:中信建投证券研究发展部
2.2 Pandas 库
请参阅最后一页的重要声明
HTTP://RESEARCH.CSC.COM.CN
7