第1章 Python与金融
1.1 Python简介
Python是由 Guido van Rossum在20世纪80年代末和90年代初,在荷兰国家数学和计算机科学研究所设计出来的。 Python本身也是由诸多其他语言发展而来的,其中包括 ABC、Modula-3、C、C++、Algol-68、Smalltalk、Unix Shell和其他的脚本语言等。现在 Python是由一个核心开发团队在维护, Guido van Rossum依然发挥至关重要的作用,指导其进展。 Python已成为世界上昀流行的编程语言。
Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,具有很强的可读性。 Guido van Rossum将 Python描述为“高级编程语言,其核心设计理念在于代码的可读性和允许程序员用几行代码表达思想的语法”。
Python有如下特征:
(1)Python 是一种解释型语言。这意味着开发过程中没有了编译这个环节,类似于 PHP和 Perl语言。
(2)Python 是交互式语言。这意味着可以在一个 Python提示符“>>>”后直接执行代码。
(3)Python 是面向对象语言。这意味着 Python支持面向对象的风格或将代码封装在对象的编程技术。
(4)Python 是初学者的语言。 Python 对初级程序员而言,是一种“友好”的语言,它支持广泛的应用程序开发:从简单的文字处理到 WWW浏览器再到游戏开发。
Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、 GUI、数据库、文本等大量内容,被形象地称作“内置电池”(batteries included)。用 Python开发,许多功能不必从零编写,直接使用现成的程序即可。除了内置的库外, Python还有大量的第三方库和封装库可供人所用。 Python有如下的优点:
(1)易于学习。 Python有相对较少的关键字、结构简单、语法定义明确、学习起来更为简单,初学者是极为容易上手的。
(2)易于阅读。 Python代码定义明确清晰,可读性强。阅读一个良好的 Python程序类似于阅读一篇语法严谨的英语文章,可以让读者专注于解决问题而不是语言本身。
(3)易于维护。 Python成功的重要方面在于它的源代码维护相对容易。
(4)互动模式。可从终端输入执行代码并获得结果,可以互动测试和调试代码片段。
(5)可移植。基于其开放源代码的特性, Python可以被移植到许多其他平台。
(6)兼容性好。 Python的库是跨平台的,在 UNIX、Windows和 Macintosh都可以良好兼容。
(7)数据库接口。 Python提供了所有主要的商业数据库接口。
(8)GUI编程。支持 GUI,可以创建和移植到很多系统调用。
(9)可扩展。可以使用 C或 C++等其他语言完成一段代码,从 Python程序中调用。
(10)可嵌入。可以将 Python程序嵌入到 C或 C++等程序。 Python也有一些缺点。第一个缺点就是运行速度慢:和 C程序相比,Python程序非常慢,这是因为Python是解释型语言,代码在执行时会一行一行地翻译成 CPU能理解的机器码,这个翻译过程非常耗时。
第二个缺点就是代码不能加密。如果要发布你的 Python程序,实际上就是发布源代码。C语言不用发布源代码,只需要把编译后的机器码(也就是在 Windows上常见的*.exe文件)发布出去,要从机器码反推出 C代码是不可能的。
1.2 金融科技发展
金融科技是技术驱动的金融创新,旨在运用现代科技成果改造或创新金融产品、经营模式、业务流程等,推动金融发展提质增效。从 IT技术对金融行业的推动和变革角度来看,至今为止金融科技经历三大发展阶段:
金融 IT阶段:主要是指金融行业通过传统的 IT软硬件来实现办公和业务的电子化,提高金融行业的业务效率。 IT公司并不参与金融公司的业务环节, IT系统在金融公司体系内属于成本部门。代表性产品包括 ATM、POS机、银行的核心交易系统、信贷系统、清算系统等。
互联网金融阶段:金融业搭建在线业务平台,通过互联网或者移动终端渠道汇集海量用户,实现金融业务中资产端、交易端、支付端、资金端等任意组合的互联互通,达到信息共享和业务撮合,本质上是对传统金融渠道的变革。代表性业务包括互联网基金销售、 P2P网络借贷、互联网保险、移动支付等。
金融科技阶段:金融业通过大数据、云计算、人工智能、区块链等昀新 IT技术应用,改变传统金融的信息采集来源、风险定价模型、投资决策过程、信用中介角色等,大幅提升传统金融的效率,解决传统金融的痛点。代表技术如大数据征信、智能投顾、供应链金融等。
随着金融科技的发展, Python也成为了金融分析的昀佳编程语言。
1.3 金融数据分析
金融数据分析就是对与股票、债券、基金等有关的金融数据进行数据分析,以达到产品定价、组合构建、优化等目的。现在我们已经步入大数据时代,不断增长的金融数据量,也对数据处理速度和频率提出要求。
进入21世纪以来,在行业应用和学术研究中采用 Python进行科学计算的势头越来越猛, Python中不断改良的库也让 Python在数据分析和交互、探索性计算以及数据可视化等方面表现十分出色。
1.4 Python在金融中的应用
Python的语法很容易实现那些金融算法和数学计算,每个数学语句都能转变成一行 Python代码,每行允许超过十万的计算量。同时, Python也支持严格的编码模式。
Python语法精确和简洁,它具有大量宝贵的第三方工具,这使它成为处理金融行业错综复杂的事务唯一可靠的选择。
因此,Python广泛应用于金融大数据处理、量化交易、风险管理和其他金融分析领域。
第2章 Python入门
2.1 Anaconda
Anaconda是一个免费开源的 Python语言的发行版本,用于计算科学(数据科学、机器学习、大数据处理和预测分析),Anaconda致力于简化包管理和部署,支持 Linux、Windows和 Mac系统。Anaconda的包使用软件包管理系统 Conda进行管理。超过1200万人使用 Anaconda发行版本,并且 Anaconda拥有超过1400个适用于 Linux、Windows和 Mac系统的数据科学软件包。
Anaconda安装成功后,在 Conda已经集成配置的 IDE当中,可用于 Python编译的编译器有 Spyder和 Jupyter Notebook。其中, Spyder比较适合进行数据分析等工作,Jupyter Notebook比较适合将教学报告处理成 html以供检阅。但两者都不适合编写大规模脚本。
要获得更多 Anaconda相关知识可前往软件主页了解信息。
2.2 NumPy
NumPy是 Numerical Python的缩写,是 Python语言的一个扩充程序库。支持大量高级的数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。我们可以用 NumPy进行一些基本的数据分析工作,如用于数据清理、子集构造、描述统计、数据聚合、异构数据集的合并等数据处理工作。
NumPy昀重要的一个特点就是它的 N维数组对象,该对象是一个通用的同构数据多维容器,可以利用这种数组对整块数据执行一些数学运算,而不需要使用Python的 for循环,可以提升运行的效率。本节将介绍 NumPy数组的基本用法,一方面,使用 NumPy数组可以大大提升效率;另一方面, NumPy数组也是后面学习 Pandas的基础。
1. NumPy安装
conda install numpy或
pip install numpy
可通过以下程序验证是否安装成功。
from numpy import *#导入 NumPy库
eye (5) #生成5*5对角矩阵
2.数组
NumPy简单创建数组是使用 array函数,以列表的转换为例:
import numpy as np
a =[0,1,2,3,4,5]#创建简单的列表
b = np.array(a)#将列表转换为数组
除了 np.array,还有一些方法可以创建多维数组,例如, zeros和 ones分别可以创建指定长度或形状的全0或全1的数组。
array_one = np.ones([10,10])#创建10行10列的数值为浮点1的矩阵
array_zero = np.zeros([10,10])#创建10行10列的数值为浮点0的矩阵
NumPy还可以通过 np.random创建随机数组:
np.random.rand(10,10)#创建10行10列的数组(数值范围在0至1之间)
np.random.uniform(0,100)#创建0到100范围内的一个数
np.random.randint(0,100)#创建0到100范围内的一个整数
np.random.normal(1.75,0.1,(2,3))#给定均值/标准差/维度的正态分布
3. NumPy查看数组属性
b.size #数组元素个数
b.shape #数组形状
b.ndim #数组维度
b.dtype #数组元素类型
4.数组索引:获取单个元素
在一维数组中,可以通过中括号指定索引获取第 i个值(从0开始计数),如果用负值索引,则可以获取数组的末尾索引,对于多维数组可以用逗号分隔。在 NumPy中可以用上述索引方式修改元素值,但是 NumPy数组是固定类型的,所以修改的时候要注意类型的统一。
b[1]#获取第2个元素
b[-1]#获取倒数第1个元素
c = np.random.normal(1.75,0.1,(2,3))#创建2行3列的正态分布数组
c[0,0]#获取第1行第1列的数据
b[0]=9#将 b中第1个元素改成9
5.数组切片:获取子数组
NumPy可以通过切片获得子数组,切片的方式是: x[start:stop:step],默认值是 start=0,stop=维度的大小,step=1。
b[:2]#前两个元素
b[::2]#每隔一个元素取
c[:1,:]#第一行
但有一点要注意的是,在 NumPy中修改子数组时原始数组也会被修改,如果想要保留原始的数组不变,就需要用 copy()方法先复制数组。
6.数组的变形、拼接、分裂
可以通过 reshape()函数来实现数组的变形,但是这里要注意原始数组大小和变形后的数组大小要一致。
x = np.arange(1,17).reshape((4,4))#将数字1到16放入4×4的矩阵中
可以通过 np.concatenate、 np.vstack、 np.hstack来实现数组的拼接, np.concatenate的使用方法是 np.concatenate([x,y]),在拼接二维数组时,默认沿着第一个维度拼接,这时的功能与 np.vstack([x,y])相同,若加参数 axis=1,则沿第二个维度拼接,这时的功能与 np.hstack([x,y]
展开