2007年 7月
第 26卷 第 4期
数理统计与管理
App lication of Statistics and Management
Jul
Vol
, 2007
26 No
4
文章编号 : 1002 - 1566 (2007) 04 - 0649 - 07
海量数据导入与导出 MATLAB的有效方法
徐海云 涂雄苓
(桂林工学院数理系 广西桂林市 541004)
摘要 :本文结合实例介绍了几种将海量统计数据快速 、准确地导入与导出 MATLAB 系统的方法 。
克服了以往在编程窗口直接键入原始数据进行处理的诸多问题 ,因此对保证统计分析结果的准确
性与加速 MATLAB在统计分析领域的应用有着很重要的意义 。
关键词 :统计软件 ,海量数据 ,导入与导出
中图分类号 : TP319
文献标识码 : A
Eff ic ien tM ethods of M a ssive Da ta
s Im porting to and
Exporting from M ATLAB
XU Hai
yun, TU Xiong
ling
(Department of Mathematics and Physics, Guilin University of Technology, Guilin 541004 China)
Abstract: This paper introduces several methods of massive data
s importing to and exporting from MATLAB rap idly
and accurately, and gives some cases. The methods resolve the many p roblem s appearing in inputting directly origin
data into‘Command W indow
ysis results and in accelerating MATLAB
Key words: statistical software; massive data;
ofMATLAB in past, so they have important significance in assuring the accuracy of anal
S app lication in statistical analysis.
importing and exporting
0 引言
MATLAB 随着其版本不断地更新 ,统计数据处理功能变得越来越强大 ,与其他专业统计软
件相比并不逊色 ,而且具有操作简单 、接口方便 、扩充能力强等优势 ,再加上 MATLAB 的应用
范围广泛 ,因此可以预见 MATLAB 即将成为数据处理与统计分析又一重要的工具 。将原始统
计数据导入软件系统中是进行数据处理与分析起点 ,同时完善的统计规律的探索是建立在对
海量数据的处理与分析的基础上的 ,然而由于 MATLAB 最初主要立足解决矩阵运算及数值分
析 ,所涉及的数据量并不是很大 ,原始数据的导入主要是通过命令窗口输入 ,当时这样做并没
有给数据分析带来太大的不便和障碍 ,但是面对统计分析对海量数据的要求 ,以往这种导入数
据的方法出现很多的问题 ,首先 MATLAB 命令窗口对数据格式有较严格的要求 ,因此对一海
量原始数据进行这么严格输入 ,工作量是可想而知的 ;其次即使操作者有耐心 ,但过程中也极
易出错 ;最后现实中原始数据常以不同文件格式保存 , 如
. dat等 ,如何将这
些不同格式的数据准确而快速导入 MATLAB 界面 。从目前有关 MATLAB 的教科书及文献来
看 ,并没有发现对此问题进行过专门的介绍与研究 ,本论文结合作者的工作经验针对此问题介
. xm l、
txt、
.
收稿日期 : 2005年 12月 16日
基金项目 :本论文受院硕士基金项目支助 (0066011261, 006011262)
056
数理统计与管理 第 26卷 第 4期 2007年 7月
绍一种有效的途径 ,旨意于加速 MATLAB应用研究 。
1 数据导入与导出及实例
1. 为了介绍的方便 ,特结合下面的实例来进行同步说明 。实例 :已知某湖八年来湖水中
COD浓度实测值 ( y)与影响因素湖区工业产值 ( x1 ) 、总人口数 ( x2 ) 、捕鱼量 ( x3 ) 、降水量 ( x4 )
资料 ,建立污染物 y的水质分析模型 ,其原始数据列于下表 1,且以 Excel文件保存 。
表 1 原始数据
COD 浓度 Y
工业产值 X1
总人口 X2
捕鱼量 X3
降水量 X4
1
1
1
1
1
1
1
1
376
375
387
401
412
428
445
477
0
0
0
0
0
0
0
0
450
475
485
500
535
545
550
575
2
2
2
2
2
3
3
3
170
554
676
713
823
088
122
262
0
1
0
0
1
1
1
1
8922
1610
5346
9589
0239
0499
1065
1387
5
5
5
5
6
6
6
6
19
30
60
82
00
06
45
95
在对数据处理分析前 ,须设法将其导入 MATLAB界面 。以往有关 MATLAB研究文献以及
使用的教材大多用在 Command w indow窗口内直接键入原始数据 ,如本例而言即
> > x1 = [ 1
> > x2 = [ 0
> > x3 = [ 2
> > x4 = [ 0
> > y = [ 5
445, 1
550, 0
122, 3
0499, 1
95 ];
477 ];
575 ];
262 ];
1065, 1
387, 1
485, 0
676, 2
376, 1
450, 0
170, 2
8922, 1
19, 5
375, 1
475, 0
554, 2
1610, 0
60, 5
30, 5
428, 1
545, 0
088, 3
401, 1
500, 0
713, 2
412, 1
535, 0
823, 3
0239, 1
45, 6
5346, 0
82, 6
9589, 1
00, 6
06, 6
1387 ];
这样操作存在很多的弊端 ,如操作繁琐 、易使原始数据输入出错且有可能出现程序语法错
误导程序无法执行等 。下面介绍一种更简便 、准确的方法 ,首先 Command W indow窗口内只键
入以下命令 :
> > x1 = [ ];
> > x2 = [ ];
> > x3 = [ ];
> > x4 = [ ];
> > y = [ ];
来快速定义原始数据文件中 6个变量 ,但不在此直接键入数据 ,此时可以看到系统自动在
W orkspace窗口内生成与变量相联系的 5个数据阵列 , 图 1所示 。接着用鼠标依次双击这些 5
个数据阵列 ,以致进一步定义数据阵列的大小 ,结构以及导入原始数据 。以变量 y数据阵列为
例 ,双击数据阵列 y将出现图 2数据阵列编辑界面 ,再在 S ize两个输入框中分别键入行数与列
数 ,对此实例而言就是 8与 1,回车后再出现图 3的界面 ,在这个界面中就可以很方便地将原
始数据键入或拷入对应的数据阵列中 。就本例而言可以先复制原保存在 Excel文件中的原始
徐海云 ,涂雄苓 :海量数据导入与导出 MATLAB 的有效方法
156
数据 ,再粘贴到 MATLAB 的 Workspace的数据阵列中 ,具体操作步骤如图 4和图 5所示 ,如此
六次重复操作 ,就可以完成六个变量的原始值导入 MATLAB。
步骤概要 :运行 MATLAB →进入 Command W indow窗口 →定义空变量 →定义数据阵列 →
变量赋值 (复制数据 →粘贴数据 ) →保存 。
图 1 Workpace窗口自动生成的 5个数据阵列
图 2 数据阵列编辑原始界面
图 3 数据阵列 y结构大小定义过程界面
1
256
数理统计与管理 第 26卷 第 4期 2007年 7月
图 4 在 Excel中将原始数据拷入粘帖板面
为了验证操作的有效性 ,接下来继续完成实例的要求来说明之 。在这里选择用带常数项
的多元线性回归模型以建立水质分析模型 ,在 Command window窗口内键入 :
图 5 通过粘贴将数据导入 MATLAB
> > Save data x1 , x2 , x3 , x4 , y;
> > load data;
> > x = [ ones ( 8, 1) , x1 , x2 , x3 , x4 ];
> > [ b, bint, r, rint, stats] = regress( y, x)
得结果 :
b =
- 3
0866
徐海云 ,涂雄苓 :海量数据导入与导出 MATLAB 的有效方法
356
2540
9287
3716
17
- 1
- 1
0
3800
stats =
0
7576 2
3444 0
2549
2540x1 - 1
0866 + 17
即 ^y = - 3
R2 = 0
以上结果与专业统计软件 SAS, SPSS处理的结果是一致的 , 因此表明导入数据的方法是
3444, P = 0
7576, F = 2
2549
9287x2 - 1
3716x3 + 0
3800x4
有效的和可行的 。
数据导出过程相对而言简单些 , 首先须在 Spacework窗口内找所需要导出数据所在的数
据阵列 ;再用鼠标左键双击此阵列 ,系统将自动出现类似图 3的界面 ;再通过粘贴板的功能将
数据导拷贝到其它应用程序中 。因为过程大致与导入过程相反 ,所以不做详细介绍 。
下面介绍用 MATLAB 数据接口功能导入数据方法 ,以原始数据为文本文件 (“原始数
2
据
txt”)保存为例 。若要把图 6所示的记事本界面中原始数据导入 MATLAB 系统 ,数据的结
构为 520行 6列 ,即共有 3120个数据 。首先打开 MATLAB系统 ,单击主菜单中的“File”,在下
拉菜单中选中并单击“ Import Data”,此时出现图 7 所示的对话框 。接下来找到“原始数据
txt”所保存的路径并点击“打开 ”,出现图 8所示的界面 ,再单击“Next”,将出现数据预览的界
面 ,再单击界面中的“Finish”,自动回到主界面 ,即完成数据的导入 。最后可观察到在 Work
pace窗口中多一个数据阵列 ,也就是刚导入数据的存放处 ,可以根据需要对其重命名 ,最后就
可以对原始统计数据进行所需要的处理分析 。
步骤概要 :运行 MATLAB →单击 File→选择并单击 Import Data→浏览原始数据保存路径
→选择文件 →单击打开 →单击 Next→单击 Finish→保存 。
图 6 以记事本保存的原始数据
456
数理统计与管理 第 26卷 第 4期 2007年 7月
图 7 MATLAB数据导入初始对话框
图 8 MATLAB数据导入数据分离选择界面
2 结语与讨论
众所周知 ,不同的统计软件的功能与特点有一定的差异 ,因此在对一特定统计数据进行处
理分析时 ,往往会借助几个不同软件 ,以提高操作的效率 ,所以不同软件间进行数据导入与导
出是经常的事情 。文章着重介绍两种最常用又行之有效的数据导入与导出的方法 ,操作简单
而且通俗易懂 。为 MATLAB 在统计分析领域的应用奠定了一定的基础 ,同时又对以往有关
MATLAB在统计学及应用数学教科书内容做好很好的补充 。
在方法一中 ,虽然仅以 Excel格式保存的原始数据文件为实例介绍如何导入的过程 ,但并
不排除其它应用程序与 MATLAB之间的数据联结 ,如 Word、Access、SPSS、SAS、DPS、NoSA 等
均能类似的操作建立起与 MATLAB 间的数据导入与导出 。另外 ,当进入图 3所示的界面时 ,
但在操作过程中不难发现即使是原始数据是纸质打印的文件 ,而用同样的方法在 Workspace
窗口内之数据阵列键入数据相比在 Command W indow下进行数据键入操作要容易的多 ,而且
徐海云 ,涂雄苓 :海量数据导入与导出 MATLAB 的有效方法
556
能十分清晰看到数据阵列的结构 ,因此不易出错 ;或者首先将纸质打印的原始数据键入 Excel
界面 ,然而再用上述的方法导入 MATLAB也是可行的 ,因为在 Excel中键入数据相对程序更方
便且易修改 。在方法二中 ,是以
txt格式的数据文件为例来介绍的 ,其实其他格式的文件同样
可以此方法来实现统计数据的导入 ,如
dat、doc等 。需要注意的是在图 7所示界面中 ,在选择
数据列的分隔符时一般是因格式而变的 ,可以在此复选项中多试几次 ,而且可以直接输入分隔
符 ,直到的数据阵列达到意想的排列 。在工作中发现 Excel的数据接口功能相对于其它窗口
式统计软件较强 ,而 Excel与 MATLAB又有良好的数据联结性 ,之间的导入与导出较为方便 ,
因此遇上不易直接导入 MATLAB数据格式可以先导入 Excel,再导入 MATLAB。当然 MATLAB
数据导入与导出的方法很多 ,在这里主要是介绍几种操作简单而运行有效的方法 ,旨以加速
MATLAB在统计分析的应用中起一抛砖引玉的作用 。
[参考文献 ]
[ 1 ] 刘瑞桢
[ 2 ] 程毛林
[ 3 ] 张文彤
[ 4 ] 陈华福. 最新统计电算化教程 : Excel 2000在统计学中的应用 [M ]. 北京 :冶金工业出版社. 2001 年 8
MATLAB的数值和符号计算功能 [ J ]. 电脑编程与维护 , 1997 (8) : 27 - 29.
浅谈 MATLAB软件用于统计分析教学 [ J ]
SPSS统计分析教程 (高级篇 ) [M ]
教学参考 , 2001 (5) : 21 - 23.
北京 :北京希望电子出版社
2002年 6月
37 - 52
月. 85 - 96.
[ 5 ] 汤旦林 ,李晓强. 学用 SAS软件捷径 (3)第三讲读入外部数据并作统计分析 [ J ]. 数理统计与管理 , 1997
(4) : 46 - 48.