matlab数据的读入和预处理.pdf
《matlab数据的读入和预处理.pdf》由会员分享,可在线阅读,更多相关《matlab数据的读入和预处理.pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、金融计算与编程(2007 年 1 月)上海财经大学金融学院曹志广 1第三讲 数据的读入和预处理 在金融研究以及金融理论的实际应用上,大量的金融数据是不可或缺的。金融理论提供了丰富的模型,但理论模型的实证检验需要大量的金融数据。金融模型的实际应用也需要大量金融数据来估计或标定其中的参数。比如:资本资产定价模型(CAPM)中值的估计;期权定价中标的资产收益率的波动率估计等都需要实际数据。MATLAB提供了在主窗口直接输入和利用xlsread、textread、fopen 等函数直接读取数据两种方式。在主窗口直接输入数据对于少量数据是合适的,但金融领域的研究者和金融行业的金融理论应用人士经常面临大量
2、的金融数据,利用MATLAB提供的内部函数直接读取数据是非常必要的。由于大部分的金融数据来自各种机构提供的数据库,这些数据库数据的输出大多会支持EXCEL和文本文件的输出格式。因此本节介绍如何利用MATLAB提供的xlsread和textread函数来读取*.xls和*.txt数据文件。1EXCEL数据文件的读取 利用 MATLAB 提供的函数xlsread可以方便地读取数据文件中的数值型数据,对于 EXCEL文件中的字符型变量xlsread将不读取或以NaN(在MATLAB 中 NaN表示“不是一个数”)表示。其最简单的调用格式为在MATLAB命令窗口输入:x=xlsread(filenam
3、e),其中 filename为在 MATLAB 自动搜索文件夹下的EXCEL文件名,文件filename中的数值型数据矩阵赋值给变量x。filename可以不带后缀.xls。上证综合指数EXCEL文件 下面以上证综合指数为例,给读者介绍如何使用xlsread读取数据。图显示了上证综合指数的EXCEL文件中的部分数据(仅显示了其中前20 行的数据),其中 EXCEL 文件中的第一列为日期,第二列为与第一列日期相应的上证综合指数。由于日期型数据在EXCEL中是可以与数值相互转化的,因而 xlsread是可以读取日期型数据的。如果该EXCEL文件位于MATLAB自动搜索文件夹下,比如:D:matla
4、bworkindex.xls。则在MATLAB命令窗口输入:x=xlsread(index)金融计算与编程(2007 年 1 月)上海财经大学金融学院曹志广 2后得到变量x,x为 n 行 2 列的矩阵,第一列为日期,第二列为指数。其中n 与该文件中的数据长度一致,如数据包含1000 天的上证综合指数,则n 为 1000。这里注意两点:(1)读出的数据赋值给变量x,x的第一列为日期,但在MATLAB的输出格式中变成了数值型。比如图1.1 中的第一个日期在EXCEL表中显示为1990-12-19,如果读者在EXCEL 表中将其转换为数值型,则在 EXCEL表中显示为33226。因此,在 MATLA
5、B 读入该文件的时候该日期就变成了数值33226;(2)MATLAB提供了一个数值与表示日期的字符型变量相互转换的函数datenum(将日期转换为数值)和datestr(将数值转换为日期),但这种转换与EXCEL中数值和日期型变量的转换是有差异的。在 MATLAB 中以 0000 年 1 月 1 日作为起点,将这一天转换为数值1,相应的0000 年 1 月 2 日就转换为2,而在EXCEL中以 1900 年 1月 1 日为起点,将这一天转换为1。因此,前面的例子中的数据读入MATLAB,并赋值给变量x 后,如果要将日期还原到正确 的日期,则在MATLAB 命令窗口下输入:x(:,1)=x(:,
6、1)+datenum(30-Dec-1 899);即 可。当然 也可以直接调用MATLAB内部函数x2mdate,在MATLAB命令窗口下输入:x(:,1)=x2mdate(x(:,1)进行转换。综合以上例子,可以在MATLAB 命令窗口下输入以下命令得到图1.2。%后面的内 容表示对命令的解释 和说明。clear x=xlsread(index);%读取 EXCEL文件 x(:,1)=x(:,1)+datenum(30-Dec-1 899);%将日期还 原h=fi gure;%生 成空的图 形set(h,color,w);%将图的 背景颜色设 定为 白色plot(x(:,1),x(:,2);
7、%以 x 的第一列为 横轴 第二列为 纵轴 作图 datetick(x,23);%将横轴 转成日期格式mm/dd/yyyy xlabel(Date);%生 成横坐 标标 记title(Shanghai Composite);%生 成图 形名称01/01/199001/01/199501/01/200001/01/200505001000150020002500DateShanghai Composite 上证综合指数走势金融计算与编程(2007 年 1 月)上海财经大学金融学院曹志广 3初次 使用 xlsread读取数据文件的读者可能会出 现打 不开文件的 情形。下面就读者可 能经常 碰到的一
8、些 问题做 出说明。有些读者在可 能 MATLAB 命令窗口下输入x=xlsread(index);后 MATLAB 提醒找 不到该文件。读者可以在MATLAB 中 File菜单中 选择 Set Pat h 进行路径设置,将 EXCEL文件 index.xls所在的文件夹 置于搜索 路径之 下,然后点 击 Save进行保存即 可。有些读者可能碰 到无法 读取数据的 情形,MATLAB提醒文件不包含有 效的 EXCEL 数据。这时,读者可以将EXCEL文件中 说明性 的字符,比如:对每一列变量 做出说明 的某些字符等 整行删除即 可。比如:在上 海大智慧投 资咨询公司 提供的大 智慧平台 下载数
9、据得到EXCEL 文件数据如图所示,则读取文件时就会出 现这 样的错误。这时可以将文件中的第一行和第二行直接整行删除 就可以了。通常在这 样处 理后在 EXCEL数据中 某些列中 仍夹杂着 一些 空格,这时 MATLAB读 入 时 将 其 以NaN 代 替。也 有 些 读 者 在MATLAB 命 令 窗 口 下 输 入x=xlsread(filename);后出 现这样的情形,即得到的变量x 的列数比EXCEL文件中数据的列数少,这可 能是 EXCEL数据文件中的第一列或前面的几列数据为字符型,MATLAB在读入数据时忽略 了这些列。大智慧 下载数据 使用 xlsread读取数据文件有两个明显
10、的缺点。一是xlsread不能读取字符型变量,因此要读取 某些包含字符型变量的文件就不能使用 xlsread。另外 EXCEL文件中的数据长度是有限定的,EXCEL2000 单个 工作表的最大行数为65536,每一行最大列数为256 列。但有时候要 处理的金融数据量会超出这个 范围,这时候不得不将数据分拆成几个 EXCEL文件后分 别用 xlsread读取。而MATLAB 提供的textread函数可以 很好 地解决 以上两个 问题。2文本数据文件的读取 对于*.txt、*.csv 等类型的数据文件,如果 知道 数据文件中 每一列数据的 类型,即字符型、数值型等。则可以使用MATLAB 提供的
11、 textread函数方便地 进行读取。对于textread函数的 详细 了解可以在MATLAB命令窗口下输入help textread或 doc textread来了 解。下面以位于MATLAB自动搜索文件夹下的上证综合指数数据文件,比如:金融计算与编程(2007 年 1 月)上海财经大学金融学院曹志广 4D:matlabwork000001.txt,为例来进行解释 如何调用textread。图显示了该文件的部分数据,该数据文件包含7 列的数据,分别为时 间、开盘 价、最 高价、最低价、收 盘价、成 交量和成 交额,数据包含了了1990 年 12 月 19 日到 2006 年9 月 27 日
12、上证综合指数行情。在 MATLAB 命令窗口下输入以下命令:a,b,c,d,e,f,g=textread(000001.txt,%s%f%f%f%f%f%f,headerlines,1);其中上 述命令中的输出变量a,b,c,d,e,f,g 分别表示时 间、开盘 价、最 高价、最低价、收 盘价、成 交量和成 交额 列向量,a为表示时 间的字符型变量。textread函数的输入部分中,000001.txt表示文件名;%s 表示以字符型方式读入变量;%f表示以 浮点数值型方式读入变量;headerlines,1 表示文件的第一行为标题,不需要读入。注意:textread函数的输入部分中%s%f%f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 数据 读入 预处理
限制150内