第1章 计量经济分析及其Python环境 本章简要介绍计量经济分析的一般应用步骤与软件,着重介绍经济数据的类型和特点,简要评述主要的计量经济和统计软件包。本章旨在使学生理解计量经济分析思想,了解经济数据的特点与来源,了解几种常用的计量经济分析软件。 1.1计量经济分析的含义 计量经济学是将经济理论实用化、数量化的实证经济学,可称为“经济中的测量”。它是利用经济理论、数学、统计推断等工具对经济现象进行分析的经济学科的分支,具体包括模型设计和建立、参数估计和检验以及利用模型进行预测等过程。 自1926年挪威经济学家费里希首次提出计量经济学的概念以来(他仿照生物计量学一词提出计量经济学概念,并将其定义为统计学、经济学和数学的结合),计量经济学的建立到现在还不到100年,但是这门学科已经得到广泛发展。截至2008年所产生的61位诺贝尔经济学奖得主中,30多位在获奖成果中应用了计量经济学。尤其是20世纪90年代以来,赫克曼、麦克法登、格兰杰、恩格尔等教授都是因为在计量经济学方面的突出贡献,而获得诺贝尔奖的。 本书包括计量经济分析和金融计量分析两部分: 计量经济分析具体包括计量经济中的经典回归模型及其应用、非经典回归模型及其应用(多重共线性、自相关、异方差); 金融计量分析包括时间序列分析及其应用、条件异方差模型及其应用、量化投资分析中的统计套利等。 1.2计量经济分析建模的步骤 基于对计量经济范畴的理解,我们对计量经济分析建模的步骤描述如下。 步骤1: 关于研究问题的概述。该步骤通常涉及经济理论的形成,或者来自某种理论的认识——两个或多个变量之间的特定方式的联系。这一步需要将经济理论或相关变量之间的关系模型用数学的方式表达出来。 步骤2: 样本数据收集。这一步骤是计量经济分析工作的基础工作,也是直接影响到检验结果的一项工作。通常应根据研究对象,进行样本数据的收集和整理,并在此基础上取舍变量,并分析经济数据的类型、特点和来源等。 步骤3: 选择合适的计量经济方法来估计模型。在计量经济分析过程中,有必要根据研究目的以及数据本身的特点、需求而选择相应的估计方法和计量模型。如根据数据是连续数据还是离散数据选择一元回归模型、多元回归模型或者离散模型; 数据是一元或多元时间序列数据要选择相应的计算模型; 研究金融市场的波动率、利率期限结构则对应相应的计量模型等。 步骤4: 对模型进行实证检验。在估计参数后,一个初步的模型就构建起来,但是所建立的模型是否合适,能否反映变量之间的关系,还需要对模型进行进一步检验。模型检验通常包含统计检验、经济金融计量检验以及经济金融意义检验三方面的内容。统计检验的目的在于检验模型参数估计值的可靠性,这包括模型的拟合度检验、变量的显著性检验等; 经济金融计量检验是因计量经济金融理论的要求而进行的,包括序列相关性检验、异方差性检验和多重共线性检验等; 经济金融意义检验是将计量检验的结果与相应的经济金融理论比较是否相符。若所构建的模型估计结果不能提供上述某方面的检验,我们有必要考虑前面几个步骤中是否存在问题并重新建立模型; 若能够提供模型的检验,则可进入经济金融计量模型的应用阶段。 第1章计量经济分析及其Python环境 计量经济分析及其Python应用 步骤5: 模型应用。若模型能够通过检验,则说明所构建的计量模型具有适用性,这样就可以将模型应用于特定的研究。通常,所构建的模型主要有以下三个方面的应用: (1)结构分析,即研究一个变量或几个变量变化时对其他变量的影响,以揭示不同经济变量之间的内在联系; (2)经济预测,即根据经济模型对未来经济变量的变化进行预测分析; (3)政策评价,即研究不同的政策对经济目标所产生影响的差异,从计量经济分析中寻求优化政策目标的路径。 计量经济分析建模的基本步骤如图11所示。 图11计量经济分析建模的基本步骤 1.3经济数据类型 从构建计量经济分析模型的步骤来看,数据分析是重要的环节。下面着重分析经济数据的类型和来源。 计量经济分析中需要处理的数据类型主要有三类: 横截面数据、时间序列数据和面板数据。 (1) 横截面数据 横截面数据是指同一时间(时期或时点)某一指标在不同空间的观测数据。如某一时点中国A股市场的平均收益率、2019年所有A股上市公司的净资产收益率。在利用横截面数据分析时,由于单个或多个解释变量观测值起伏变化会对被解释变量产生不同的影响,因而导致异方差问题。因此在数据整理时必须消除异方差。 (2) 时间序列数据 时间序列数据即按时间序列排列的数据,也称为动态序列数据。时间序列数据是按照一定时间间隔对某一变量或不同时间的取值进行观测所得到的一组数据,例如每一季度的GDP数据、每一天的股票交易数据或债券收益率数据等。在金融计量分析中,时间序列数据是常见的一类数据类型。 (3) 面板数据 面板数据即时间序列数据和横截面数据相结合的数据。 金融领域以时间序列数据与面板数据为主。 1.4经济数据来源 1.4.1专业性网站 专业性数据库网站如国家统计局网站、中国人民银行网站、中国证监会网站、世界银行网站、国际货币基金组织网站等。 1.4.2专业数据公司和信息公司 国外数据库主要有芝加哥大学商学院的证券价格研究中心(CRSP)、路透(Reuter)终端 、彭博(Bloomberg)数据库等。国内的经济金融数据库主要有: CCER中国经济金融数据库、国泰安 (GTA)数据库、万德(Wind)数据库、锐思经济数据库、 天相经济数据库等。见表11所示。 表11经济数据库 数据库名称网址数据库名称网址 CRSPwww.chicagobooth.edu Reuterwww.Reuters.com Bloombergwww.Bloomberg.com CCER中国经济金融 数据库www.ccer.edu.cn 国泰安(GTA)数据库www.gtadata.com 万德(Wind)数据库www.wind.com.cn 锐思经济数据库www.resset.cn 天相经济数据库www.txsec.com/zqsc/ datacenter.asp 1.4.3抽样调查 抽样调查是针对某些专门的研究开展的一类获取数据的方式。比如,要对中国的投资者信心进行建模,就必须通过设计调查问卷,对不同的投资群体进行数据采集。 1.5计量经济分析工具简介 1.5.1Python简介 Python是一种面向对象的解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第1版公开发行于1991年,Python 源代码同样遵循 GPL(GNU General Public License)协议 。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地连接在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在使用扩展类库时可能需要考虑平台问题,某些类库可能不提供跨平台的实现。 Python需要安装NumPy、Pandas、SciPy、Cython、Statsmodels、Matplotlib等一系列的程序包,还需要安装 IPython交互环境,单独用Python直接做计量分析,其统计函数是没有函数支持的。 Python目前最新版为37.3(2019年3月发布)。 详细内容请登录https://www.python.org/查询。 1.5.2R简介 R是统计领域广泛使用的S语言的一个分支。可以认为R是S语言的一种实现。S语言是由AT&T贝尔实验室开发的一种用来进行数据探索、统计分析和作图的解释型语言。最初S语言的实现版本主要是SPLUS。SPLUS是一个商业软件,它基于S语言,并由MathSoft公司的统计科学部进一步完善。后来Auckland大学的Robert Gentleman和Ross Ihaka及其他志愿人员开发了一个R系统,由“R开发核心团队”负责开发。R是基于S语言的一个GNU项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不做修改地在R环境下运行。R的语法是来自Scheme。R的使用与SPLUS有很多类似之处,这两种语言有一定的兼容性。SPLUS的使用手册,只要稍加修改就可作为R的使用手册。所以有人说: R是SPLUS的一个“克隆”。 R的目前最新版为R3.6.1(2019年7月发布)。 详细内容请登录http://cran.rproject.org查询。 1.5.3Stata简介 Stata由美国计算机资源中心(Computer Resource Center)1985年研制。其特点是采用命令行/程序操作方式,程序短小精悍,功能强大。Stata 是一套提供其使用者数据分析、数据管理以及绘制专业图表的完整及整合性统计软件。它提供许多功能,包含线性混合模型、均衡重复反复及多项式普罗比模式。新版本的Stata采用最具亲和力的窗口接口,使用者自行建立程序时,软件能提供具有直接命令式的语法。Stata提供完整的使用手册,包含统计样本建立、解释、模型与语法、文献等出版品。 除此之外,Stata软件可以通过网络实时更新每天的最新功能,更可以得知世界各地的使用者对于Stata公司提出的问题与解决之道。使用者也可以通过Stata Journal获得许许多多的相关信息以及书籍介绍等。另外一个获取庞大资源的渠道就是Statalist,它是一个独立的服务器列表,每月交替提供使用者1000多条信息以及50个程序。 Stata目前最新版为第16.0版(2019年6月发布)。 详细内容请登录http://www.stata.com查询。 1.5.4EViews简介 EViews是美国GMS公司1981年发行的Micro TSP的Windows版本,通常称为计量经济学软件包。EViews是Econometrics Views的缩写,它的本意是对社会经济关系与经济活动的数量规律,采用计量经济学方法与技术进行观察。计量经济学研究的核心是设计模型、收集资料、估计模型、检验模型、运用模型进行预测、求解模型和应用模型。EViews是完成上述任务得力的必不可少的工具。正是由于EViews等计量经济学软件包的出现,计量经济学取得了长足的进步,发展为实用与严谨的经济学科。使用 EViews软件包可以对时间序列和非时间序列的数据进行分析,建立序列(变量)间的统计关系式,并用该关系式进行预测、模拟等。虽然EViews是由经济学家开发的,并且大多数被用于经济学领域,但并非意味着该软件包只用于处理经济方面的时间序列。EViews处理非时间序列数据照样得心应手。实际上,相当大型的非时间序列(截面数据)的项目也能在 EViews中进行处理。 EViews目前最新版为第10版。 详细内容请登录http://www.eviews.com/查询。 1.5.5SAS软件简介 SAS是美国SAS软件研究所研制的一套大型集成应用软件系统,具有完备的数据存取、数据管理、数据分析和数据展现功能。尤其是产品统计分析系统部分,由于其具有强大的数据分析能力,一直为业界著名软件,在数据处理和统计分析领域,被誉为国际上的标准软件和最权威的优秀统计软件包,广泛应用于政府行政管理、科研、教育、生产和金融等不同领域,发挥着重要的作用。SAS系统中提供的主要分析功能包括统计分析、计量经济分析、时间序列分析、决策分析、财务分析和全面质量管理工具等。 SAS目前最新版为9.4版。 详细内容请登录http://www.sas.com查询。 1.5.6Matlab软件简介 Matlab软件是由美国Mathworks公司推出的用于数值计算和图形处理的科学计算系统,在Matlab环境下,用户可以集成地进行程序设计、数值计算、图形绘制、输入输出、文件管理等各项操作。它提供的是一个人机交互的数学系统环境,与利用 C语言做数值计算的程序设计相比,利用Matlab可以节省大量的编程时间,且程序设计自由度大。 Matlab给用户带来的是最直观、最简洁的程序开发环境,语言简洁紧凑,使用方便灵活,库函数与运算符极其丰富,另外具有强大的图形功能。 在国际学术界,Matlab已经被确认为准确、可靠的科学计算标准软件,许多国际一流学术期刊上,都可以看到Matlab的应用。 Matlab目前最新版为R2019a版(2019年3月发布)。 详细内容请登录http://www.mathworks.com查询。 1.5.7SPSS软件简介 SPSS(Statistical Package for the Social Science)——社会科学统计软件包,是世界著名的统计分析软件之一。20世纪60年代末,美国斯坦福大学的三位研究生研制开发了最早的统计分析软件SPSS,同时成立了SPSS公司,并于1975年在芝加哥组建了SPSS总部。20世纪80年代以前,SPSS统计软件主要应用于企事业单位。1984年SPSS总部首先推出了世界第一个统计分析软件微机版本SPSS/PC+,开创了SPSS微机系列产品的开发方向,从而确立了个人用户市场第一的地位。2009年IBM收购SPSS公司后,现在在中国国内市场上推出的最新产品,是IBM SPSS Statistics 21.0多国语言版。SPSS/PC+的推出,极大地扩充了它的应用范围,使其能很快地应用于自然科学、技术科学、社会科学的各个领域,世界上许多有影响的报纸杂志纷纷就SPSS的自动统计绘图、数据深入分析、使用方便、功能齐全等方面给予了高度的评价与称赞。目前SPSS已经在国内逐渐流行起来。它使用Windows的窗口方式展示各种管理和分析数据的功能,使用对话框展示出各种功能选择项,只要掌握一定的Windows操作技能,粗通统计分析原理,就可以使用该软件为特定的科研工作服务。 SPSS目前最新版为SPSS 24.0版。 详细内容请登录http://www.spss.com查询。 还有一些统计和计量经济学软件,如Statistica、SPLUS等,但相对来说没有以上7种软件流行。各软件网站列表如表12所示。 表12计量经济分析软件网站 软 件 名 称网址软 件 名 称网址 Pythonwww.python.orgMatlabwww.mathworks.com Rwww.cran.rproject.orgSPSSwww.spss.com Statawww.stata.comSPLUSwww.mathsoft.com EViewswww.eviews.comStatisticawww.statsoft.com SASwww.sas.com 从表12中所列各软件网址中,我们发现: Python是一款在统计分析、计量经济分析、经济预测、人工智能(机器学习)、网络Web服务等领域应用非常广泛使用的语言,它具有简单易学、免费开源、可移植、可扩展,统计与作图功能强,财经数据接口、机器学习库、网络服务等工具丰富,更新和发展速度快等特点,因而在目前的大数据和人工智能时代,受到广大用户的欢迎和喜爱。因此,本书我们将通过丰富的经济数据实例,详细介绍Python工具在经济、金融领域中的应用。 1.6Python工具的下载与安装 1.6.1下载安装Python执行文件 在网址www.python.org.downloads下载Python。目前,最新版是Python3.7 ,在上述网址找到这个版本,即可下载相应的Python执行文件,双击执行文件,按照相应提示操作即可安装Python。 Python自身环境内置很多函数和模块,不过这些函数和模块功能有限,Python的强大功能更多的是通过第三方库或者其他模块来实现。如果函数库或者模块没有内置于Python环境中,则需要先下载安装该函数库或模块,然后才能使用。一般通过pip指令来安装包,安装指令为: pip install name(如安装NumPy)。 1.6.2下载Anaconda Python执行文件,需要安装许多库,安装起来比较复杂。如果专注于科学计算功能,可直接安装Anaconda。Anaconda是Python的科学计算环境,内置Python安装程序,其主要功能如下: (1) 安装简单,下载Anaconda的.exe执行文件,双击执行文件,即可安装。 (2) 配置众多科学计算包,Anaconda集合了400个以上的科学计算与数据分析功能的包,如NumPy、Pandas、SciPy、Matplotlib和IPython,安装Anaconda,这些包都被成功安装。支持多种操作系统,兼容Python多种版本2.X和3.X版本(可相互切换)。 前几年做量化金融投资,主要使用的工具是Matlab,现在主要使用的工具是Python,几乎所有的量化投资平台都使用Python工具做平台。 我们在如下网址可下载Anaconda: https://www.anaconda.com/download/,或者https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/。它是一个用于科学计算 Python 发行版的套装软件,支持 Unix、Linux、Mac、Windows等操作系统, 包含了众多流行的科学计算、数据分析的Python包。其中包括Pandas、NumPy、SciPy、Statsmodels、Matplotlib 等一系列的程序包以及IPython交互环境。界面如图12所示。 图12Anaconda 安装包界面 点击图12中Python 3.7 Version的下载界面,出现图13所示的界面。 图13Anaconda 安装包下载界面 在图13所示界面中点击下载Anaconda32019.07Windowsx86_64.exe,即可得到用Python做量化金融投资的套装软件工具。 Anaconda32019.07Windowsx86_64.exe工具中提供了Python做量化金融投资的丰富资源: 包括 Pandas、NumPy、SciPy、Statsmodels、Matplotlib 等一系列的程序包以及Python用户开发工作环境。要了解Python的其他程序包,可到https://anaconda.org网站上去搜索所需要的程序包进行安装。 1.6.3Python的安装 Python在Windows环境中安装有很多版本。如: (1)Anaconda22.4.1Windowsx86.exe(32位)版本; (2)最新的Anaconda32019.07Windowsx86_64.exe。本书使用的是Anaconda32019.07Windowsx86_64.exe版本。 双击已下载的Anaconda32019.07Windowsx86_64.exe应用程序,即可得到如图14所示界面。 在图14中点击“Next”按钮,得到如图15所示的界面。 在图15中点击“I Agree”按钮,得到如图16所示界面。 点击图16中“Next”按钮,得到如图17所示界面。 图14安装界面 图15安装界面 图16安装向导 图17安装向导 点击图17中“Next”按钮,即可完成Python套装软件的安装,得到如图18所示的界面。 图18安装完后界面 1.6.4Python的启动和退出 (1) Python工具的启动 点击图18中Spyder图标,即可启动Python的用户界面。 (2) Python的退出 在Python的用户界面中的“File”下点击“Quit”菜单,即可退出Python。 1.7国内外财经大数据的存取方法及其Python应用 1.7.1PythonNumPy数据存取 在科学计算与量化金融分析的过程中,往往需要保存一些数据,也经常需要把保存的这些数据加载到程序中,在 Matlab 中我们可以用save和lood函数很方便地实现。类似地,在Python中,我们可以用numpy.save()和numpy.load()函数达到类似的效果,并且还可以用scipy.io.savemat()将数据保存为.mat格式,用scipy.io.loadmat()读取.mat格式的数据,达到可以和Matlab进行数据互动的效果。 以下对上述函数作分别介绍。 (1) PythonNumPy数据保存numpy.save() numpy.save(arg_1,arg_2) 需要两个参数,arg_1 是文件名,arg_2 是要保存的数组。例如: import numpy as np a=np.mat('1,2,3;4,5,6') b=np.array([[1,2,3],[4,5,6]]) np.save('a.npy',a) np.save('b.npy',b) 这个时候Python的当前工作路径下就会多出a.npy和b.npy两个文件,当然我们也可以给出具体的路径,例如: np.save('F:/2glkx/data/a.npy',a),就把数据保存在F:/2glkx/data的目录中。 (2) PythonNumPy数据读取numpy.load() 下面把保存的这两个数据文件导入Python: data_a=np.load('a.npy') data_b=np.load('b.npy') print ('data_a \n',data_a,'\n the type is',type(data_a)) print ('data_b \n',data_a,'\n the type is',type(data_b)) data_a [[1 2 3] [4 5 6]] the type is data_b [[1 2 3] [4 5 6]] the type is 我们可以看到这一过程把原本为矩阵的 a 变为数组型了。 如果想同时保存a、b到同一个文件,我们可以用 np.savez() 函数,具体用法如下: np.savez('ab.npz',k_a=a,k_b=b) c=np.load('ab.npz') print c['k_a'] print c['k_b'] 得到如下的输出结果: [[1 2 3] [4 5 6]] [[1 2 3] [4 5 6]] 这时的c是一个字典,需要通过关键字取出我们需要的数据。 1.7.2PythonSciPy数据存取 PythonSciPy数据存取的方法如下: scipy.io.savemat()和scipy.io.loadmat()。 首先我们用scipy.io.savemat()创建.mat文件,该函数有两个参数,一个文件名和一个包含变量名和取值的字典。 import numpy as np from scipy import io a=np.mat('1,2,3;4,5,6') b=np.array([[1,1,1],[2,2,2]]) io.savemat('a.mat', {'matrix': a}) io.savemat('b.mat', {'array': b}) 至此Python的当前工作路径下就多了a.mat和b.mat这两个文件。 1.7.3PythonPandas的csv格式数据文件存取 PythonPandas的csv格式数据文件的存取,可以通过如下的p.to_csv()和pd.read_csv()函数来解决,实例如下: import pandas as pd import numpy as np a=['apple','pear','watch','money'] b=[[1,2,3,4,5],[5,7,8,9,0],[1,3,5,7,9],[2,4,6,8,0]] d=dict(zip(a,b)) d p=pd.DataFrame(d) p p.to_csv('F:\\2glkx\\data\\IBM.csv') 在Excel中打开IBM.csv数据文件,得到如图19所示的数据。 图19IBM.csv中的数据 pd.read_csv('F:\\2glkx\\data\\IBM.csv') 得到如下数据: Out[14]: Unnamed: 0applemoneypearwatch 001251 112473 223685 334897 445009 1.7.4PythonPandas的Excel格式数据文件存取 PythonPandas的Excel格式数据文件的存取,可以通过如下的pd.read_excel()和pd.read_csv()函数来解决。实例如下: 先在F盘的\\2glkx\\data\\目录下建立一个名为al11.xls的Excel文件。如图110所示。 图110Excel文件 然后通过如下read_excel()命令来读取Excel文件中的数据。 import pandas as pd import numpy as np df=pd.read_excel('F:\\2glkx\\data\\al1-1.xls') df.head() 得到如下数据: Out[23]: BHZ1Z2Z3Z4K 0172666078.5 12129155274.3 231156820104.3 34113184787.6 4575263395.9 1.7.5读取并查看数据表列 准备工作完成后,开始读取数据,这里我们使用了一组Z1和Z2的数据。将这组数据读取到Python中并取名为data。通过head函数查看数据表中前5行的内容。以下是数据读取和查看的代码和结果。 import pandas as pd import numpy as np #读取数据并创建数据表,名称为data。 data=pd.DataFrame(pd.read_excel('F:\\2glkx\\data\\al1-1.xls')) #查看数据表前5行的内容 data.head() 在data数据表中,我们将Z1设置为自变量X,将Z2设置为因变量Y。并通过shape函数查看了两个变量的行数,每个变量13行,这是我们完整数据表的行数。 #将Z1设为自变量X X = np.array(data[['Z1']]) #将Z2设为因变量Y Y = np.array(data[['Z2']]) #查看自变量和因变量的行数 X.shape,Y.shape 1.7.6读取挖地兔财经网站数据 我们可以使用Python的Pandas读取挖地兔财经网站数据,代码如下: import tushare as ts #需先安装tushare程序包 #此程序包的安装命令: pip install tushare import pandas as pd import numpy as np #把相对应股票的收盘价按照时间的顺序存入DataFrame对象中 df = ts.get_k_data('600000','2016-01-01','2016-10-1') ##上证综合指数 df.to_csv('F:\\2glkx\\600000.csv') df = pd.read_csv('F:\\2glkx\\600000.csv', header=0, index_col='date') [['close']] df1 = ts.get_k_data('000980','2016-01-01','2016-10-1') df1.to_csv('F:\\2glkx\\000980.csv') df1 = pd.read_csv('F:\\2glkx\\000980.csv', header=0, index_col='date') [['close']] df2 = ts.get_k_data('000981','2016-01-01','2016-10-1') df2.to_csv('F:\\2glkx\\000981.csv') df2 = pd.read_csv('F:\\2glkx\\000981.csv', header=0, index_col='date') [['close']] #%% df = df.reset_index() df1 = df1.reset_index() df2 = df2.reset_index() #%% a = pd.merge(left=df, right=df1, left_on='date', right_on='date') b = pd.merge(left=a, right=df2, left_on='date', right_on='date') c = b.set_index('date') c.columns = ['600000', '000980', '000981'] print(c.head())#c是合并好数据 600000000980000981 date 2016-04-1211.6966.8008.504 2016-04-1311.7767.4788.550 2016-04-1411.8168.2268.892 2016-04-1511.8769.0548.828 2016-04-1811.8239.9618.596 #显示最后5条 c.tail() 600000000980000981 date 2016-09-0512.39410.0899.401 2016-09-0612.33410.3699.410 2016-09-0712.38610.2099.419 2016-09-0812.47710.2899.493 2016-09-0912.44710.5289.447 #取列数据 data= c[['600000', '000981']] data.head() 600000000981 date 2016-04-1211.6968.504 2016-04-1311.7768.550 2016-04-1411.8168.892 2016-04-1511.8768.828 2016-04-1811.8238.596 #取2行到4行的数据 data.ix[1:4] 600000000981 Date 2016-04-1311.7768.550 2016-04-1411.8168.892 2016-04-1511.8768.828 #取第1行到第2行及第1列到第3列的数据 data.iloc[:2, :3] 600000000981 date 2016-04-1211.6968.504 2016-04-1311.7768.550 1.7.7挖地兔Tushare财经网站数据保存与读取 Tushare提供的数据存储模块主要是引导用户将数据保存在本地磁盘或数据库服务器上,便于后期的量化分析和回测使用, 再以文件格式保存在电脑磁盘的方式上,调用的是Pandas本身自带的方法,此处会罗列常用的参数和说明,另外,也会通过实例,展示操作的方法。 (1) 保存为csv格式; (2) 保存为Excel格式。 1. 保存为CSV数据文件 Pandas的DataFrame和Series对象提供了直接保存csv文件格式的方法,通过参数设定,轻松将数据内容保存在本地磁盘。 常用参数说明: * path_or_buf: csv文件存放路径或者StringIO对象 * sep: 文件内容分隔符,默认为,逗号 * na_rep: 在遇到NaN值时保存为某字符,默认为' '空字符 * float_format: float类型的格式 * columns: 需要保存的列,默认为None * header: 是否保存columns名,默认为True * index: 是否保存index,默认为True * mode: 创建新文件还是追加到现有文件,默认为新建 * encoding: 文件编码格式 * date_format: 日期格式 注: 在设定path时,如果目录不存在,程序会提示IO Error,请先确保目录已经存在于磁盘中。 调用方法: import tushare as ts df = ts.get_hist_data('000875') #从网上取数据 #直接保存 df.to_csv('F:/2glkx/data/000875.csv') #选择数据保存 df.to_csv('F:/2glkx/data/000875.csv',columns=['open','high','low','close']) 2. 读取CSV数据文件 import pandas as pd import numpy as np df=pd.read_csv('F:/2glkx/data/000875.csv') df.head() Unnamed: 0openhighlowclose 006.246.306.196.28 116.276.326.216.22 226.206.276.196.27 336.266.306.256.30 446.316.396.296.33 追加数据的方式: 某些时候,可能需要将一些同类数据保存在一个大文件中,这时候就需要将数据追加在同一个文件里,简单举例如下: import tushare as ts import os filename = 'F:/2glkx/data/bigfile.csv' for code in ['000875', '600848', '000981']: df = ts.get_k_data(code) if os.path.exists(filename): df.to_csv(filename, mode='a', header=None) else: df.to_csv(filename) 注: 如果是不考虑header,直接df.to_csv(filename, mode=’a’)即可,否则,每次循环都会把columns名称也append进去。 3. 保存为Excel文件 Pandas将数据保存为MicroSoft Excel文件格式。 常用参数说明: * excel_writer: 文件路径或者ExcelWriter对象 * sheet_name: sheet名称,默认为Sheet1 * sep: 文件内容分隔符,默认为,逗号 * na_rep: 在遇到NaN值时保存为某字符,默认为' '空字符 * float_format: float类型的格式 * columns: 需要保存的列,默认为None * header: 是否保存columns名,默认为True * index: 是否保存index,默认为True * encoding: 文件编码格式 * startrow: 在数据的头部留出startrow行空行 * startcol: 在数据的左边留出startcol列空列 调用方法: import tushare as ts df = ts.get_k_data('000875')#直接保存 df.to_excel('F:/2glkx/data/000875.xls') #设定数据位置(从第3行,第6列开始插入数据) df.to_excel('F:/2glkx/data/000875.xls', startrow=2,startcol=5) 4. 读取Excel数据文件 import pandas as pd import numpy as np import tushare as ts df = ts.get_hist_data('000875') #从网上取数据 #直接保存 df.to_excel('F:/2glkx/data/000875.xls') df=pd.read_excel('F:/2glkx/data/000875.xls') df.head() 输出结果: dateopenhighcloselowvolumeprice_changep_change\ 02019-09-252.983.053.012.98241913.410.010.33 12019-09-243.003.023.002.99120600.590.000.00 22019-09-232.943.023.002.93221678.050.051.70 32019-09-202.962.972.952.93113277.64-0.02-0.67 42019-09-192.952.972.972.9380252.000.020.68 ma5ma10ma20v_ma5v_ma10v_ma20 02.9862.9872.937155544.34177918.03153872.04 12.9742.9792.932127646.13166601.26155957.17 22.9662.9732.924142354.41167841.74153427.29 32.9702.9642.918137264.87157847.24146724.96 42.9842.9592.916147741.34167453.19146864.16 1.7.8使用Opendatatools工具获取数据 Opendatatools工具提供了股票、期货、汇率、基金、理财、股权质押、美股、港股等丰富的财经数据接口,支持对上交所、深交所等财经数据的获取。例如,证券代码为600000.SH(浦发银行)、000002.SZ(万科A)的实时行情数据。 #先导入stock接口 from opendatatools import stock#需要先安装opendatatools工具 #获取实时行情 df, msg= stock.get_quote('600000.SH,000002.SZ') df, msg 即可得到如下实时行情数据: (amountchangefloat_market_capitalhighis_tradinglastlow\ 0984737112.0-0.112.527887e+1126.24False26.0225.94 1356897100.00.063.319055e+1111.95False11.8111.69 market_capitalpercentsymboltimeturnover_rate\ 02.940818e+11-0.42000002.SZ 2019-09-25 15:04:030.39 13.466481e+110.51600000.SH 2019-09-25 15:00:000.11 volume 037722610 130136356, '') #获取日线数据 df, msg = stock.get_daily('600000.SH', start_date='2017-06-06', end_date='2018-06-26') df, msg 即可得到如下实时行情数据: (changehighlastlowopenpercentsymboltime\ …… 500.07659.92299.88469.77909.80780.78600000.SH 2018-06-15 51-0.36479.82709.51999.41439.8174-3.69600000.SH 2018-06-19 52-0.02869.57759.49119.47199.5199-0.30600000.SH 2018-06-20 53-0.05799.57759.43359.35679.4815-0.61600000.SH 2018-06-21 54-0.06709.43359.36639.28009.4335-0.71600000.SH 2018-06-22 55-0.19209.42399.17449.16489.3759-2.05600000.SH 2018-06-25 56-0.07719.21289.09768.97299.2128-0.84600000.SH 2018-06-26 turnover_ratevolume …… 500.0719914990 510.1542988471 520.0718915740 530.0823636961 540.0925040001 550.0924244380 560.0924424095 [260rows×10 columns],' ') 1.7.9PythonQuandl财经数据接口 1. PythonQuandl包的安装 可以从PyPI或GitHub下载Quandl包。按照下面的安装说明进行安装。 注意: Quandln包的安装因系统而异。 在大多数系统中,下面的命令将启动安装的命令如下: pip install quandl import quandl 在某些系统上,可能需要以下命令: pip3 install quandl import quandl 此外,还可以在Python3.x和Python2.7x网站上找到Python模块的详细安装说明。Quandl模块是免费的,但是必须拥有Quandl API密钥才能下载数据。要获得自己的API密钥,需要创建一个免费的Quandl账户并设置API密钥。 导入Quandl模块后,可以使用以下命令设置API密钥: quandl.ApiConfig.api_key = "YOURAPIKEY" 2. PythonQuandl使用 Quandl上的大多数数据集都可以在Python中直接使用Quandl模块。 使用Quandl 模块获取财经数据是非常容易的。例如,要想从FRED得到美国GDP,只需如下命令: import quandl mydata = quandl.get("FRED/GDP") mydata.tail() 得到如下结果: Value Date 2018-04-0120510.177 2018-07-0120749.752 2018-10-0120897.804 2019-01-0121098.827 2019-04-0121339.121 PythonQuandl 包可以免费使用,并授予对所有免费数据集的访问权限。用户只需为访问Quandl的优质数据产品付费。 1.7.10下载Yahoo财经网站数据 在Yahoo财经网站https://finance.yahoo.com/quote/000001.SS/history?ltr=1搜索需要的代码,如000001.ss, 网站提供了csv格式数据下载服务,在图111的Download data处点击下载到目录F:/2glkx/data/处,文件名默认为000001.SS .csv。然后再使用命令sh=pd.read_csv('F:/2glkx/data/000001.SS.csv')读取下载在目录F:/2glkx/data目录中000001.SS.csv文件的数据。 图111Yahoo财经数据下载界面 1.7.11存取Yahoo财经网站数据 Python下pandas_datareader包可从不同的数据源获取各种金融数据原文来自: https://pandasdatareader.readthedocs.io/en/latest/remote_data.html.。 pandas_datareader.data和pandas_datareader.wb函数能从不同的数据源获取数据,下面列出部分具体的数据源: Yahoo! Finance雅虎金融 Google Finance谷歌金融 Enigma英格玛 Quandl St.Louis FED (FRED)圣路易斯联邦储蓄银行 Kenneth French’s data library World Bank世界银行 OECD经合组织 Eurostat欧盟统计局 Thrift Savings Plan Nasdaq Trader symbol definitions 例如我们可以使用Python的pandas_datareader.data读取Yahoo财经网站的数据,代码如下: import pandas_datareader.data as web import datetime start = datetime.datetime(2017, 1, 1) end = datetime.datetime(2019, 9, 26) #从Yahoo财经网站读取Facebook股票2017/1/1到2019/9/26期间的数据 df = web.DataReader("F", 'yahoo', start, end) #显示前5条记录 df.head() HighLowOpenCloseVolumeAdj Close Date 2017-01-0312.6012.1312.2012.5940510800.010.578667 2017-01-0413.2712.7412.7713.1777638100.011.066008 2017-01-0513.2212.6313.2112.7775628400.010.729910 2017-01-0612.8412.6412.8012.7640315900.010.721508 2017-01-0912.8612.6312.7912.6339438400.010.612275 #显示最后5条记录 df.tail() HighLowOpenCloseVolumeAdj Close Date 2019-09-199.339.109.319.1028780700.09.10 2019-09-209.309.119.139.1737491300.09.17 2019-09-239.239.089.139.1622051100.09.16 2019-09-249.239.059.199.1133092500.09.11 2019-09-259.239.099.109.2020510300.09.20 pandas_datareader.data可以获取雅虎财经股票数据并以csv格式存放,命令如下: import numpy as np import pandas as pd import pandas_datareader.data as web import datetime as dt #获取上港集团数据 df = web.DataReader("600018.SS","yahoo",dt.datetime(2019,1,1),dt.date.today()) ##上港集团 print (df) df.to_csv(r'F:\2glkx\data\600018.csv',columns=df.columns,index=True) df.tail() HighLowOpenCloseVolumeAdj Close Date 2019-09-196.126.066.116.1119848826.06.11 2019-09-206.186.096.126.1737446788.06.17 2019-09-236.135.926.115.9946463817.05.99 2019-09-246.025.945.955.9621417818.05.96 2019-09-255.955.825.955.8230565346.05.82 练习题 1. 简述经济金融计量分析建模的步骤。 2. 简述经济金融计量分析的常用软件。 3. 按照本章的实例,应用PythonNumPy的方法存取数据。 4. 按照本章的实例,应用PythonSciPy的方法存取数据。 5. 按照本章的实例,应用PythonPandas的方法存取csv,Excel格式数据。 6. 按照本章的实例,获取Tushare财经数据。 7. 按照本章的实例,获取Opendatatools财经数据。 8. 按照本章的实例,获取Quandl财经数据。 9. 按照本章的实例,获取Yahoo财经数据。 第 2 章 描述性统计及其Python应用 统计就是搜集数据,让我们知道总体状况怎么样。它更重要的意义在于数据分析,即作出判断和预测。 描述性统计是对数据的性质进行描述,例如: 均值描述了数据的中心趋势,方差描述了数据的离散程度。 推断性统计是用来作判断和预测的。例如假设检验,就是用来作判断的,回归分析和时间序列分析,是用来作预测的。 注: 本章部分代码在Bigquant量化投资平台上运行。 2.1描述性统计的Python工具 Python中的Pandas常用的统计方法如表21所示。 表21Pandas常用的统计方法 函 数 名 称作用函 数 名 称作用 count非NA值的数量 describe针对Series或DF的列计算汇总统计 min,max最小值和最大值 argmin,argmax最小值和最大值的索引位置(整数) idxmin,idxmax最小值和最大值的索引值 quantile样本分位数(0到1) sum求和 mean均值(一阶矩) median中位数 mad根据均值计算平均绝对离差 var方差(二阶矩) std标准差 skew样本值的偏度(三阶矩) kurt样本值的峰度(四阶矩) cumsum样本值的累计和 cummin,cummax样本值的累计最大值和累计最小值 cumprod样本值的累计积 diff计算一阶差分(对时间序列很有用) pct_change计算百分数变化 Python中NumPy和SciPy常用的统计方法如表22所示。 表22NumPy和SciPy常用的统计方法 程序包方法说明 numpyarray创造一组数 numpy.randomnormal创造一组服从正态分布的定量数 numpy.randomrandint创造一组服从均匀分布的定性数 numpymean计算均值 numpymedian计算中位数 scipy.statsmode计算众数 numpyptp计算极差 numpyvar计算方差 numpystd计算标准差 numpycov计算协方差 numpycorrcoef计算相关系数