《金融建模基础》课件第4章-结合金融场景演示Matplotlib 模块编程_第1页
《金融建模基础》课件第4章-结合金融场景演示Matplotlib 模块编程_第2页
《金融建模基础》课件第4章-结合金融场景演示Matplotlib 模块编程_第3页
《金融建模基础》课件第4章-结合金融场景演示Matplotlib 模块编程_第4页
《金融建模基础》课件第4章-结合金融场景演示Matplotlib 模块编程_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

结合金融场景演示DESIGNED&WORDPRESSALLBYALONICMatplotlib模块编程目录CONTENTS4.1

基本函数4.2

曲线图4.3

直方图4.4

条形图4.5

散点图4.6

饼图4.7

雷达图4.8K线图4.9本章小结&拓展阅读本章将讨论应用更加广泛的Python可视化模块—Matplotlib,该模块是受到MATLAB的启发而被创建的,并且是基于Python的开源项目,旨在为Python用户提供一个专业的数据绘图工具包。同时,金融领域常用的是该模块的pyplot子模块。4.1基本函数1介绍pyplot子模块中的常用绘图函数及其参数,并且兼顾颜色、样式和标记等参数。本章导读2讨论运用plot函数绘制单一曲线图以及运用subplot函数进行多图绘制。4比较直方图与条形图的差异,探究运用bar函数绘制垂直条形图、barh函数绘制水平条形图以及绘制双轴图的技巧。5依次讲解运用scatter函数绘制散点图、运用pie函数绘制饼图以及如何绘制出雷达图的特定方法。6借助原先是Matplotlib的一个子模块但目前已是独立模块的mplfinance,具体演示K线图(蜡烛图)的绘制技巧。4.1基本函数由于Matplotlib是第三方模块,因此在调用之前需要导入模块,并且查看相关的版本信息,具体的代码如右:3探讨运用hist函数绘制单一样本的直方图和多个样本的直方图。点击输入标题4.1基本函数点击输入标题4.1基本函数在绘制图形的过程中经常需要选择不同的颜色,因此pyplot子模块也有一些常用的颜色参数可供选择,具体的参数如表4-2所示。点击输入标题4.2曲线图2.6.4节介绍过针对住房按揭贷款,根据等额本息还款规则,可以计算得到每月还款的金额以及每月还款金额中包含的本金与利息。下面就通过绘制曲线图将相关的每月还款金额进行可视化。4.2.1单一曲线图从图4-1中可以非常清晰地看到,在等额本息还款规则下,借款人每月偿还的本金金额是逐月递增的,每月偿还的利息金额则是逐月递减的。此外,通过目测可以发现,在贷款还款靠近第200个月(约第16年)时,每月偿还的本金与利息金额是最接近的。点击输入标题4.2曲线图通过模拟不同的贷款利率,即利率在[3%,7%]区间进行等差取值,计算对应的每月偿还金额,并且将结果进行可视化(见图4-2),具体的代码如下:从图4-2可以明显看到,贷款利率与每月偿还金额之间呈现一种线性的递增关系。当贷款利率达到7%时,每月偿还金额超过了5.25万元;相反,当贷款利率下降至3%时,每月偿还金额低于3.5万元。点击输入标题4.2曲线图前面的例4-1中,在绘制图形时,将多条曲线放置在一张图中;但有时候,在涉及多个变量时,为了更加清晰地展示不同变量的趋势特征,往往需要绘制多张图并且每张图以子图形式显示和排布,这时就需要运用subplot函数。下面以深证成指作为对象进行演示。4.2.2多图绘制需要提醒的是直接将Excel格式的文件导入并创建以日期作为行索引的数据框时,行索引通常是object格式(字符串格式)。为了能够实现pyplot子模块的可视化效果最优,需要将行索引的object格式转换为Datetime格式(时间戳格式),可以运用pandas的DatetimeIndex函数实现转换,该函数在本书后面的其他相关示例中也会使用到。右面是具体的代码演示:对比图4-3中的4张子图,不难发现深证成指的4种价格在走势上存在很强的同步性,并且仅凭借目测是较难辨别出差异的。点击输入标题4.3直方图直方图(histogram),也称为柱状图,是变量的样本数据分布的图形展示,主要用于估计变量的概率分布,最早由卡尔·皮尔逊(KarlPearson)引入。目前,直方图被广泛运用于金融统计和量化分析。绘制直方图的第一步就是将变量的全部样本数据按照不同的区间范围划分成若干个组,组的个数被称为组数,而每一组两个端点的距离就是组距。直方图的横坐标表示变量的样本数据的连续可取数值,纵坐标表示频数,每个矩形(柱子)的高度代表对应的频数,宽度代表组距;此外,间隔的矩形必须相邻,并且通常每个矩形具有相同的宽度,矩形的个数就等于组数。绘制直方图将运用到hist函数4.3.1单一样本的直方图这里需要再次强调的是,正如2.5.3节的例2-32中提到的,由于是随机抽样,因此不同组抽样所得到的结果之间会存在一定的差异。图4-4与读者自行编程所得到的图形之间会存在比较细微的差异。点击输入标题4.3直方图此外,有时为了更加形象地展示并且比较若干组样本值的分布情况,也会将不同组的样本值放置在一张直方图中进行对比和展示,展示方式有两种:一是堆叠(stacked)展示,即在直方图中,不同组的样本值堆叠在一起;二是并排展示,即在直方图中,不同组的样本值并排放置。下面就以上证综指和深证成指作为对象进行演示。4.3.2多个样本的直方图1.堆叠展示从图4-5中可以看到,在堆叠展示的直方图中,第1组数据(上证综指)在下方,第2组数据(深证成指)在上方。通过目测可以发现,无论是上证综指还是深证成指,日涨跌幅数据都集中处于[4%,4%]−区间。同时,最大的日跌幅在−8%附近,而最大的日涨幅则未能超过6%。点击输入标题4.3直方图此外,有时为了更加形象地展示并且比较若干组样本值的分布情况,也会将不同组的样本值放置在一张直方图中进行对比和展示,展示方式有两种:一是堆叠(stacked)展示,即在直方图中,不同组的样本值堆叠在一起;二是并排展示,即在直方图中,不同组的样本值并排放置。下面就以上证综指和深证成指作为对象进行演示。4.3.2多个样本的直方图2.并排展示图4-6所示是以并排方式展示的直方图,图中相邻的两个矩形均来自不同的数据组,因此可以很方便地观察并比较不同数据组的分布情况。通过目测可以发现,在日涨跌幅为0附近,上证综指的样本数据量明显多于深证成指,同时伴随着日涨跌幅逐渐远离0,深证成指的样本数据量多于上证综指。因此,相比上证综指,深证成指的样本数据在分布上更加离散,这也说明深证成指的风险会更高。点击输入标题4.4条形图在金融市场中,比较不同金融资产的收益率、对比不同时期的交易量通常需要用条形图(barchart)。条形图是用相同宽度条形图案的高度或长短表示数据大小。条形图可以分为垂直条形图和水平条形图两类。其中,垂直条形图也称为柱形图(columnchart)。然而,直方图与垂直条形图很容易混淆。表4-6列出了直方图与垂直条形图的异同。4.4.1垂直条形图图4-7通过图4-7就可以非常直观地对比同一个交易日、不同股票的涨跌幅情况以及不同交易日、同一只股票的涨跌幅情况。比如,在2020年5月25日,在这4只股票中,上汽集团表现最好,中国卫星则表现最差;针对中国软件,在4个交易日中,5月26日的表现最好,5月25日的表现最差。点击输入标题4.4条形图有时为了更好地比较不同股票在不同交易日的涨跌幅情况,可以将若干个交易日的涨跌幅放置在一张水平条形图中进行集中展示。4.4.2水平条形图4.4.3综合条形图与折线图的双轴图在金融领域中,会经常看到同时绘制条形图与折线图的双轴图。其中,条形图往往用于描述变量的金额,并且对应左侧的y轴;折线图则用于刻画变量的变化情况(如增长率),并且对应右侧的y轴。这类图也称为双y轴图。绘制双y轴图需要运用以下的两个函数:一是通过subplots函数创建一个包含figure(图案)、axes(轴域)对象的元组;二是通过twinx函数创建一个右侧纵坐标(右侧y轴),进而用于绘制双y轴图。下面,以广义货币供应量M2作为对象进行演示。下面,用垂直条形图刻画M2的每月余额变量,用折线图刻画M2的每月同比增长率变量,并将垂直条形图和折线图放置在一张双y轴图中(见图4-9),具体的代码如下:点击输入标题4.4条形图图4-9中左侧的y轴对应M2每月余额的刻度,右侧的y轴对应M2每月同比增长率的刻度。此外,从图4-9中不难发现,我国广义货币供应量M2每月余额基本是逐月增长的,并且相比2019年,2020年M2每月同比增长率明显提高。点击输入标题4.5散点图金融分析的起点通常是考察两个或多个不同变量之间是否具有线性关系,通过绘制出两个变量的散点图(scatterplot)进行目测是判断线性关系非常便捷、有效的方法。散点图就是将两个变量的样本值显示为一组点,样本值由点在图中的位置表示。散点图常用于识别两个变量之间的线性相关性或用于观察它们的关系,从而发现某种趋势,比如线性关系、指数关系等。同时,散点图对于查找异常值或理解数据分布有一定的帮助。如果图中的散点越向一条直线靠拢,就说明两个变量之间的线性相关性越高,反之则越低。绘制散点图需要运用scatter函数。下面以A股市场的两只银行股票作为示例进行演示。【例4-9】分析2016年至2020年期间中国工商银行(简称“工商银行”)与中国建设银行(简称“建设银行”)这两只A股股票的周涨跌幅。表4-9列出了部分数据。图4-10印证了前面运用相关系数推测出来的结果,也就是工商银行与建设银行的周涨跌幅基本处于一条直线的附近。但是需要注意,相关关系绝对不等同于因果关系。因为,相关关系仅仅表示两个变量的同时变化,但是因果关系则是指一个变量的变化会导致另一个变量的变化。以图4-10为例,虽然可以认为工商银行与建设银行之间存在着线性相关关系,但是无法推测出这两只股票的涨跌幅之间是否存在因果关系,也就是仅仅从散点图中无法判断工商银行的涨跌是否会导致建设银行的涨跌,相反也无法判断建设银行的涨跌是否会导致工商银行的涨跌。所以,散点图只是一种初步的数据分析工具,仅能直观地观察两个变量之间是否存在相关关系,如果需要进一步确认变量之间是否存在因果关系,还必须借助其他的统计分析工具。点击输入标题4.6饼图在金融领域中,经常需要计算变量的若干个样本值占总样本值的比重,并且希望将这些比重进行图形化展示,这时通过饼图(piechart)就能对各组成部分所占的比重进行直观描述。饼图是一种圆形的统计图,它被划分成不同的切片以表示比重。饼图的运用通常归功于苏格兰工程师、经济学家威廉·普莱费尔(WilliamPlayfair),他在1801年最先提出并运用饼图进行统计分析。绘制饼图需要运用pie函数。下面以国际货币基金组织特别提款权中不同币种的权重作为示例演示饼图的绘制。点击输入标题4.7雷达图雷达图(radarchart)也称为戴布拉图、网络图、蜘蛛图、星图,是以二维图的形式在从中心点开始向外延伸的数轴上表示3个或更多个变量数据的图形。此类图形最早由日本企业界发明并运用于综合评估企业的财务状况,由于绘制得到的图形酷似雷达,因此取名雷达图。运用Matplotlib绘制雷达图时,通常需要分两个步骤完成。(1)输入准备好的参数数据,除了指标和排名的数据以外,还需要运用NumPy的linspace函数将整个圆形按照需要显示的指标数量进行均匀切分,比如需要显示4个指标,则将圆形均匀切分为4个部分;同时,运用NumPy的另一个函数concatenate将相关数组进行首尾拼接以实现图形的闭合。(2)运用Matplotlib的子模块pyplot的polar函数和thetagrids函数完成绘制。其中,polar函数用于绘制雷达图的坐标系,thetagrids函数则用于输入图形中涉及的指标名称。从图4-12可以清楚地看到,越靠近雷达图的圆心位置,就代表指标的排名越高;相反,越远离雷达图的圆心位置,就代表指标的排名越低。点击输入标题4.8K线图在证券、期货等投资领域,经常运用K线图来表示价格的走势情况。K线图最早起源于日本德川幕府时代(公元1603年—1867年),是当时日本米市商人用于记录米市的行情与价格波动的图形。由于所绘制出来的图表形状非常类似于一根根蜡烛,因此K线图也被称为蜡烛图(candlestickchart)。在绘制K线时,都是围绕着开盘价、最高价、最低价、收盘价这4个数据展开的,反映大势的状况和价格信息。当收盘价高于开盘价时,K线就称为阳线;相反,当收盘价低于开盘价时,K线就称为阴线。在我国A股市场,用红色表示阳线,绿色表示阴线。需要注意的是,在欧美金融市场,通常用绿色表示阳线,红色表示阴线,这与A股市场的习惯恰好相反。此外,将每日的K线放在一张图上,就能得到日K线图,根据同样的逻辑也可以绘制出周K线图、月K线图等。由于课件使用的是Matplotlib3.2.2,因此在绘制K线图时需要运用mplfinance。考虑到该模块需要另行安装,同时本书是在Anaconda环境中运行Python的,所以通过打开AnacondaPrompt,并且输入如下命令就能在线安装该模块的最新版本:如果希望在线安装其他版本,比如0.12.6a0版本可以输入如下命令:同样,由于mplfinance是第三方模块,因此需要导入模块并且查看版本信息,具体的代码如下:点击输入标题4.8K线图下面,以上证综指为对象并运用mplfinance演示绘制K线图的过程。4.9本章小结&拓展阅读数据可视化是金融分析与风险管理的有机组成部分。在Python中,常用的可视化工具就是Matplotlib的子模块pyplot。本章首先介绍了pyplot子模块中的常用绘图函数与参数;在此基础上,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论