《金融计算:基于Python》 课件 第3章-Python金融计算基础_第1页
《金融计算:基于Python》 课件 第3章-Python金融计算基础_第2页
《金融计算:基于Python》 课件 第3章-Python金融计算基础_第3页
《金融计算:基于Python》 课件 第3章-Python金融计算基础_第4页
《金融计算:基于Python》 课件 第3章-Python金融计算基础_第5页
已阅读5页,还剩47页未读, 继续免费阅读

下载本文档

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

文档简介

金融计算:基于Python

第3章 Python金融计算基础【教学目的与要求】通过本章学习,结合习近平新时代中国特色社会主义经济思想,讲授Python金融数据的基本计算命令,描述性统计,常见概率分布,数据可视化,python-scipy模块及数据下载平台。【重点和难点】Python金融数据的基本计算命令,描述性统计,常见概率分布,数据可视化,python-scipy模块。【思政育人目标】将习近平新时代中国特色社会主义经济思想融入到Python金融数据计算的基础知识与命令的学习中。【课程学习目标】了解Python金融数据的基本计算命令,描述性统计,常见概率分布,掌握数据可视化,python-scipy模块及数据下载平台。金融计算:基于Python2主要内容3.1.数据的基本计算3.2.描述性统计3.3.常见概率分布3.4.数据的可视化3.5.python-scipy模块3.6.Baostock数据平台3.7.数据爬取3.8.AKShare数据平台3.9.Efinance数据平台金融计算:基于Python33.1. 数据的基本计算3.1.1.算术运算.序列运算序列运算是根据行列索引,对齐后运算,运算默认产生浮点数,对齐时缺项填充NaN(空值)。自动的数据对齐在索引处引入NAN值,缺失值在运算过程中传播。.DdtaFrame运算除了用+、-、*、/,还可以用Series和DataFrame的算术方法,因为'c'和'e'列均不在两个DataFrame对象中,在结果中以缺省值呈现,行也是同样,没有共用的列或行标签,结果都会是空。金融计算:基于Python4.运算中值填充在对不同索引的对象算术运算时,希望当一个对象中某个轴标签在另一个对象中找不到时填充一个特殊值。如使用df1的add(sub)方法,实现数据的加法(减法)。.DataFrame和序列之间运算从一个矩阵减去一个行序列时,每一行都会执行这一个操作。.函数的应用元素级数组方法也可用于操作pandas对象;函数也可应用到由各列或行所形成的一维数组上。如建立一个函数f,计算一个Series的最大值和最小值的差,在frame的每列都执行一次。金融计算:基于Python53.1.2. 排序和排名.数据集排序根据条件可以对数据集进行排序运算,使用sort_index方法可以对行或列索引进行排序(按字典顺序),它将返回一个已排序的新对象:.DataFrame排序可以根据DataFrame任意一个轴上的索引进行排序。.序列数据值的排序sort_values方法可以实现按值对Series进行排序。任何缺失值默认都会被放到Series的末尾。.DataFrame数据值的排序sort_values可以实现DataFrame一个或多个列中的值进行排序。金融计算:基于Python63.2. 描述性统计Pandas可以实现常用的数学和统计功能,主要用于从Series中提取单个值(如sum或mean)或从DataFrame的行或列中提取一个Series。3.2.1.数据汇总统计.数据求和Sum可以实现数据的汇总功能,返回一个含有列的和的序列。.间接统计Idxmin或idxmax可以实现一些间接统计,返回达到最小值或最大值的索引。金融计算:基于Python73.2.2. 相关系数与协方差相关系数和协方差是通过参数对计算出来的,corr方法用于计算两个序列中重叠的、非NA的、按索引对齐的值的相关系数;cov方法用于计算协方差。corrwith方法,可以计算DataFrame其列或行跟另一个Series或DataFrame之间的相关系数。传入一个Series将会返回一个相关系数值Series(针对各列进行计算)。金融计算:基于Python83.2.3. 其它统计.唯一值unique函数可以得到Series中的唯一值数组。.值的频率统计value_counts可以计算一个Series中各值按值频率降序排列。.资格统计isin是用于判断矢量化集合的成员资格,一般用于过滤Series中或DataFrame列中数据的子集。金融计算:基于Python93.3. 常见概率分布3.3.1.连续型随机变量的常见分布.均匀分布均匀分布指的是一类在定义域内概率密度函数处处相等的统计分布。.正态分布正态分布也叫高斯分布.指数分布指数分布通常被广泛用在描述一个特定事件发生所需要的时间,在指数分布随机变量的分布中,有着很少的大数值和非常多的小数值.金融计算:基于Python103.3.2. 连续型随机变量的常见分布.伯努利分布伯努利分布描述的是离散型变量且发生1次的概率分布,且X取值只有2个,要么是0,要么是1..二项分布二项分布可以认为是一种只有两种结果(成功/失败)的单次试验重复多次后成功次数的分布概率。.泊松分布假设已知事件在单位时间(或者单位面积)内发生的平均次数为λ,则泊松分布描述了事件在单位时间(或者单位面积)内发生的具体次数为k的概率。金融计算:基于Python113.4. 数据的可视化3.4.1.常用的绘图函数matplotlib是Python用于创建图表的绘图包,提供了一整套绘图命令,绘制中文图形时,必须进行基本的设置。importmatplotlib.pyplotasplt #基本绘图包plt.rcParams['font.sans-serif']=['KaiTi'] #黑体plt.rcParams['axes.unicode_minus']=False #正常显示图中负号plt.figure(figsize=(5,4))#图形大小金融计算:基于Python12.基本统计图bar()命令是绘制条形图。pie()是绘制饼图的命令。plot()是绘制拆线图的命令。hist()用于表示连续型变量的频数分布,实际应用中常用于考察变量的分布是否服从某种分类类型。scatter()是绘制散点图的命令。金融计算:基于Python13.图形参数设置绘制图形过程中,标题、标签、颜色、线形等参数设置命令及说明。金融计算:基于Python14命令说明plt.title标题,可以指定名称、位置、颜色、字体大小等参数。plt.xlim设置横坐标范围,可以指定名称、位置、颜色、字体大小等参数。plt.ylim设置纵坐标范围,可以指定名称、位置、颜色、字体大小等参数。plt.xlabel设置横坐标名称,可以指定名称、位置、颜色、字体大小等参数。plt.ylabel设置纵坐标名称,可以指定名称、位置、颜色、字体大小等参数。plt.xticks设置横坐标刻度,可以指定名称、位置、颜色、字体大小等参数。plt.yticks设置纵坐标刻度,可以指定名称、位置、颜色、字体大小等参数。colors或c控制图形的颜色,'r':设置为红色,'b':设置为蓝色,'g':设置为绿色,'c':设置为青色,'m':设置为品红色,'y':设置为黄色,'k':设置为黑色,'w':设置为白色linestyle控制连线的线形(‘-’:实线,‘--’:虚线,'-.'点划线,':'虚线)linewidth或lw线宽,(字符串格式)可以输入浮点数。marker控制符号的类型,详见表3-3plt.axvline在纵坐标y处画垂直线plt.axhline在横坐标x处画垂直线text(x,y,labels,...)在(x,y)处添加用labels指定的文字legend为图形加图例,可以指定图例的大小、位置、标签。grid添加网格。可以指定网格的方向、线类型、线宽、颜色。标记符说明'.'点','像素点'o'循环'*'星号'v'下三角'^'上三角'<'左三角'>'右三角'1'向下微调'2'向上微调'3'向左微调'4'向右微调's'正方形'p'五边形'h'六边形1'H'六边形2'+'加号'P'加满'x'x'X'X满'D'钻石'd'钻石瘦'_'水平线‘|’排.多图绘制可以通过add_subplot创建多个图。金融计算:基于Python153.4.2. 基于pandas的绘图在pandas中的数据包含多列、多行的数据,还有行和列标签,自身内置的方法可以简化从DataFrame和Series绘制图形,修改默认的颜色方案和绘图类型,提高可读性和美观度。Plot()可以实现Series和DataFrame的绘制图表的功能,默认生成的是线型图。DataFrame.plot(kind='line')将所有列绘制的图到一张图片中,用不同线条颜色及不同的图例标签来表示。其中,kind是图类型:line(缺省)是拆线图;bar是垂直条图;barh是水平条图;hist是直方图;box是箱线图;kde是核密度估计图,对柱状图添加概率密度线,与density功能一样;area是面积图;pie是饼图;scatter是散点图。金融计算:基于Python163.4.3. 特殊统计图.数学函数图.气泡图金融计算:基于Python173.5. python-scipy模块scipy模块依赖于numpy模块,能方便的给出很多数学操作。基本子模块及功能如表3-3。金融计算:基于Python18子模块名称功能说明scipy.special:特殊函数模块里面有各种特殊的数学函数,可以直接调用,如贝塞尔函数.egrate:积分模块。可以求多重积分,高斯积分,解常微分方程scipyoptimize.优化模块里面有各种优化算法,包括用来求有/无约束的多元标量函数最小值算法,最小二乘法,求有/无约束的单变量函数最小值算法,还有解各种复杂方程的算法erpolation:插值模块提供各种一维、二维、N维插值算法,包括B样条插值、径向基函数插值等.scipy.fftpack:FFT(快速傅里叶变换)模块。可以进行FFT/DCT/DSTsipsgnak:信号处理模块包括样条插值,卷积,差分等滤波方法,还有FIR/IR滤波,中值、排序、维纳、希尔伯特等滤波器,各种谱分析算法scipy.linalg:线代模块提供各种线性代数中的常规操作scipy.sparse:稀疏矩阵模块提供了大型稀疏矩阵计算中的各种算法scipy.spatial:空间结构模块提供了一些空间相关的数据结构和算法,如elaunay三角剖分,共面点,凸包维诺图,Kd树等scipy.stats:统计模块提供一些统计学上常用的函数scipy.ndimage:多维图像处理模块提供一些多维图像处理上的常用算法scipy.io:lO模块提供与其他文件的接口,如matlab文件、IDL文件、Wav(音频)文件、ARFF文件3.5.1. 求积分integrate子模块是积分函数:quad()是自适应求积分;fixed_quad()是固定高斯求积分;quadrature()是自适应高斯求积;romberg()是自适应龙贝格求积分。金融计算:基于Python193.5.2. 插值计算利率曲线的拟合等金融领域经常会用到插值法计算,可以使用interpolate模块下的interp1d(x,y,kind)函数:nearest是最近邻插值;zero是阶梯插值法;slinear是线性插值法;quadratic是2阶样条插值;cubic:3是阶样条插值。金融计算:基于Python203.5.3. 方程组求解方程组求解可使用solve函数、fsolve函数实现。金融计算:基于Python213.5.4. 优化问题

金融计算:基于Python223.6. Baostock数据平台3.6.1.平台说明证券宝是一个免费、开源的证券数据平台(无需注册)。提供大量准确、完整的证券历史行情数据、上市公司财务数据等。返回的数据格式:pandasDataFrame类型,以便于用pandas/NumPy/Matplotlib进行数据分析和可视化。同时支持通过BaoStock的数据存储功能,将数据全部保存到本地后进行分析。支持语言:目前版本BaoS目前只支持Python3.5及以上(暂不支持python2.x)。金融计算:基于Python23数据说明时间范围股票数据日、周、月K线数据,时间范围:1990-12-19至今;5、15、30、60分钟K线数据1999-07-26至今指数数据日、周、月K线已经包含指数:综合指数,规模指数,一级行业指数,二级行业指数,策略指数,成长指数,价值指数,主题指数,基金指数,债券指数。2006-01-01至今季频财务数据已经包含的财务数据:部分上市公司资产负债信息、上市公司现金流量信息、上市公司利润信息、上市公司杜邦指标信息。2007年至今季频公司报告上市公司业绩预告信息;上市公司业绩快报信息2003年至今;2006年至今.login()函数登录系统。建立与服务器的连接,无需注册即可登录。需要说明的是,登录后超过一段时间没有操作再调用api请求时会超时,需要重新登录才能继续下载数据不需要使用的时候可以主动调用bs.logout()函数断开与服务器的连接。.logout()函数不需要使用数据的时候可以主动调用bs.logout()函数断开与服务器的连接。金融计算:基于Python24.query_history_k_data_plus()函数通过API接口获取A股历史交易数据,可以通过参数设置获取日k线、周k线、月k线,以及5分钟、15分钟、30分钟和60分钟k线数据,适合搭配均线数据进行选股和分析。返回类型:pandas的DataFrame类型;样本:1990-12-19至当前时间的数据;数据种类:不复权、前复权、后复权数据。金融计算:基于Python253.6.3. 季频数据获取函数.query_profit_data()函数通过API接口获取季频盈利能力信息,可以通过参数设置获取对应年份、季度数据,提供2007年至今数据。返回类型:pandas的DataFrame类型。.query_operation_data()函数通过API接口获取季频营运能力信息,可以通过参数设置获取对应年份、季度数据,提供2007年至今数据。返回类型:pandas的DataFrame类型。金融计算:基于Python263.6.4.板块数据获取函数.query_stock_industry()函数通过API接口获取行业分类信息,更新频率:每周一更新。返回类型:pandas的DataFrame类型。金融计算:基于Python273.6.5.宏观经济数据获取函数.query_deposit_rate_data()函数通过API接口获取存款利率,可以通过参数设置获取对应起止日期的数据。返回类型:pandas的DataFrame类型。金融计算:基于Python283.6.6.指定数据导入.获取指定日期全部股票的日K线数据.获取指定时间区域部分股票的日K线数据金融计算:基于Python293.7. 数据爬取在大数据时代,互联网成为获取金融数据的重要途径之一,因此,掌握一些Python、Web前端与爬虫的相关知识是非常必要的。3.7.1.网页结构任意打开一个网页(/),单击鼠标右键,从弹出的快捷菜单中选择“检查”选项,即可查看该网页结构的相应代码,如图3-1所示。分析图3-1,该图左半部分为HTML文件,右半部分为CSS样式,用<script></script>标签的就是JavaScript代码。用户浏览的网页就是浏览器染后的结果,浏览器就是把HTML、CSS和JavaScript进行翻译得到用户使用的网页界面。金融计算:基于Python303.7.2. Python与爬虫.爬虫基本原理网页请求和响应的过程:Request(请求)。每一个用户打开的网页都必须在最开始由用户向服务器发送访问的请求。Response(响应)。服务器在接收到用户的请求后,会验证请求的有效性,然后向用户发送相应的内容。客户端接收到服务器的相应内容后,再将此内容展示出来,以供用户浏览。网页请求的方式一般分为GET和POST两种:GET是最常见的请求方式,一般用于获取或者查询资源信息,也是大多数网站使用的方式。POST与GET相比,多了以表单形式上传参数的功能,因此除了查询信息外,还可以修改信息。金融计算:基于Python31基础爬虫主要包括爬虫调度器、URL管理器、HTML下载器、HTML解析器和数据存储器等五大模块,功能如下: 爬虫调度器统筹其他4个模块的协调工作;

URL管理器管理URL链接,维护已经爬取的URL集合和未爬取的URL集合,提供获取新URL链接的接口;

HTML下载器用于从URL管理器中获取未爬取的URL链接,并下载HTML网页;

HTML解析器用于从HTML下载器中获取已经下载的HTML网页,并从中解析出新的URL链接交给URL管理器,解析出有效数据交给数据存储器; 数据存储器用于将HTML解析器解析出来的数据通过文件或者数据库的形式存储起来。.urllib模块使用Python编写爬虫代码,要解决的第一个问题是Python如何访问互联网,为此Python专门准备了urllib模块。urllib是URL和lib两个单词共同构成的,URL就是网页的地址,lib是library(库)的缩写。URL的一般格式为(带方括号[]的为可选项):protocol://hostname[port]/path/[parameters][?query]#fragment.URL由以下三部分组成:协议:常见的有HTTP、HTTPS、FTP、FILE(访问本地文件夹)、ED2K(电驴的专用链接)等。存放资源的服务器的域名系统(DNS)主机名或IP地址(有时候要包含端口号,各种传输协议都有默认的端口号,如HTTP的默认端口为80)主机资源的具体地址,如目录和文件名等。金融计算:基于Python32[例3.7.1]使用urllib访问目标网页在urllib模块中可以使用urllib.request.urlopen()函数访问网页,urllib.request.urlopen()函数的参数为:urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)金融计算:基于Python33[例3.7.2]使用urllib获取响应信息通过response.getcode()、response.geturl()及response.getheaders()获取各种响应信息。金融计算:基于Python34.Requests库Requests库是用Python语言编写的,基于urllib,采用Apache2Licensed开源协议的HTTP库,它比urllib更方便,可以节约开发者的工作量,完全满足HTTP测试求。Requests实现了HTTP协议中的地大部分功能,它提供的功能包括Keep-Alive、连接池、Cookie持久化、内容自动解压、HTTP代理、SSL认证、连接超时、Session等很多特性,更重要的是它同时兼客Python2和Python3。导入importrequests,使用requests库模拟发送并且获取响应对象赋给变量res格式为:res=requests.请求方式(url,相关参数)金融计算:基于Python35参数功能res.encoding查看响应正文的编码格式res.text查看响应正文的文本内容返回的是一个字符串格式res.content查看响应正文的文本内容返回的是一个字节格式如果获取图片数据或者音视频数据通过它直接获取二进制数据并进行保存res.status_code查看响应的状态码res.headers查看响应的响应头res.url查看响应的URLres.request.headers查看请求头信息res.request.body查看请求正文res.request.url查看请求urlres.request.method查看请求方式res.cookies获取响应中的cookie得到的是一个RequestsCookieJar对象[例3.7.3]自定义请求响应头先定义一个字典格式:h={"请求头键":"对应的值","请求头键2":"对应的值",...};然后让定义的字典与请求产生关联res=requests.请求方式(url,headers=h)。金融计算:基于Python36[例3.7.4]发送携带查询字符串参数的GET请求方法1:参数直接写在url中,res=requests.get("/s?wd=河北经贸大学方法2:先定义一个字典,p={"查询参数1":"对应的值","查询参数2":"对应的值",...}(查询参数就是值查询字符串参数URL中?后面接的就是查询字符串参数);然后让定义的字典与请求产生关联,res=requests.get(url,params=p)金融计算:基于Python37[例3.7.5]使用GET方式抓取网页数据输入:#导入requests库importrequests#访问目标网页url=""#将获取的数据保存到strhtml变量中strhtml=requests.get(url)#打印网页源代码print(strhtml.text)金融计算:基于Python38[例3.7.6]使用GET方式抓取网页数据,并设置超时反应输入:#导入requests库importrequests#访问目标网页url1=""r=requests.get(url1,timeout=3)#打印网页源代码print(r.status_code)金融计算:基于Python39[例3.7.7]使用GET方式抓取网页图片输入:importrequests#访问目标网页url1="/it/u=3287115334,1498982333&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=281"r1=requests.get(url1)withopen('ls1.png','wb')asf:f.write(r1.content)importmatplotlib.pyplotaspltfromPILimportImageimg=Image.open('ls1.png')img=np.array(img)plt.imshow(img)plt.show()金融计算:基于Python403.7.3. 爬取网页内容一般地,按照爬取网页、解析数据、保存网页的思路爬取所需要的网页内容。防止乱码,设置编码为utf-8。[例3.7.9]爬取/top250?start=网页的电影详情链接、图片链接、影片中文名、影片外国名、评分、评价数、概况、相关信息,将评分前100的信息保存到excel文件中。第一步,数据库导入第二步,设置正则表达式第三步,设置爬取网页的函数第四步,设置变量存储爬取的网页信息的函数第五步,设置得到指定一个URL的网页内容的函数第六步,设置保存数据到表格的函数第七步,调用函数的程序金融计算:基于Python413.8. AKShare数据平台AKShare是基于Python的财经数据接口库,目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具,主要用于学术研究目的。AKShare的特点是获取的是相对权威的财经数据网站公布的原始数据,通过利用原始数据进行各数据源之间的交叉验证,进而再加工,从而得出科学的结论。金融计算:基于Python423.8.1. 安装目前AKShare仅支持64位版本的操作系统安装和使用,支持Python3.8(64位)及以上版本。AKShare推荐安装最新版本的Anaconda(64位),可以解决大部分环境配置问题。安装命令:

温馨提示

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

评论

0/150

提交评论