MATLAB从入门到开发 数据导入和分析——基础篇(四)第一节 标准文件 文本格式导入导出_matlab xmlimportoptions-程序员宅基地

技术标签: matlab  Matlab从入门到开发  

本章包含以下内容

  • 数据导入和导出
  • 大型文件和大数据
  • 数据的预处理
  • 描述性统计量
  • 可视化探查
  • 交互式数据导入导出处理

数据导入和导出

通过数据导入和导出功能,可以从文件、其他应用程序、Web 服务和外部设备访问数据。可以读取常见文件格式,如 Excel电子表格、文本、图像、音频和视频,以及科学数据格式。通过一些低级的文件 I/O 函数,可以处理任何格式的数据文件。

第一节 标准文件格式

主要包含以下格式的文件 :文本、电子表格、图像、科学数据、音频和视频、XML 文档

文本

基本导入和导出
函数 功能
readtable 基于文件创建表
writetable 将表写入文件
readtimetable 基于文件创建时间表
writetimetable 将时间表写入文件
定义导入规则
函数 功能
detectImportOptions 基于文件内容生成导入选项
delimitedTextImportOptions 为带分隔符的文本导入选项对象
fixedWidthImportOptions 等宽文本文件的导入选项对象
getvaropts 获取变量导入选项
setvaropts 设置变量导入选项
setvartype 设置变量数据类型
preview 使用导入选项预览文件中的八行数据
读取和写入矩阵和数组
函数 功能
readmatrix 从文件中读取矩阵
writematrix 将矩阵写入文件
readcell 从文件中读取元胞数组
writecell 将元胞数组写入文件
readvars 从文件中读取变量
textscan 从文本文件或字符串读取格式化数据
type 显示文件内容
fileread 以文本格式读取文件内容
对象
函数 功能
tabularTextDatastore 表格文本文件的数据存储

从文本文件中导入混合数据

样本文件概述
样本文件 outages.csv 包含表示美国电力中断的数据。文件的前几行如下:

Region,OutageTime,Loss,Customers,RestorationTime,Cause

SouthWest,2002-01-20 11:49,672,2902379,2002-01-24 21:58,winter storm

SouthEast,2002-01-30 01:18,796,336436,2002-02-04 11:20,winter storm

SouthEast,2004-02-03 21:17,264.9,107083,2004-02-20 03:37,winter storm

West,2002-06-19 13:39,391.4,378990,2002-06-19 14:27,equipment fault

读取文本文件
使用 readtable 导入数据,并显示前五行。readtable 函数会自动检测分隔符和变量类型。

T = readtable('outages.csv');
head(T,5) % show first 5 rows of table
ans=5×6 table
      Region          OutageTime        Loss     Customers     RestorationTime           Cause
    'SouthWest'    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    'winter storm'   
    'SouthEast'    2003-01-23 00:49    530.14    2.1204e+05                 NaT    'winter storm'   
    'SouthEast'    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    'winter storm'   
    'West'         2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    'equipment fault'
    'MidWest'      2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    'severe storm'   

在导入之前指定变量数据类型根据文件中的变量类型,将变量数据类型更新为相应的 MATLAB 数据类型可能有益于数据。例如,outages.csv 中的第一列和第六列为分类列。通过将这两个列指定为 categorical 数组,可以运用 MATLAB 函数处理分类数据。要指定变量的数据类型,有如下方法可以选择:

指定 readtable 中的 Format 名称-值对组
设置文件导入选项的 VariableTypes 属性

使用 Format 名称-值对组指定变量的数据类型,读取数据,并显示前五行数据。在 formatSpec 设定符的 %{yyyy-MM-dd HH:mm}D 部分中,花括号之间的文本描述了日期和时间数据的格式。Format 中指定的值指定了:

文件中的第一列和最后一列为分类数据

第二列和第五列为格式化的日期和时间数据

第三列和第四列为浮点值

formatSpec = '%C%{yyyy-MM-dd HH:mm}D%f%f%{yyyy-MM-dd HH:mm}D%C';
T = readtable('outages.csv','Format',formatSpec);
head(T,5) 
ans=5×6 table
     Region         OutageTime        Loss     Customers     RestorationTime          Cause     
    _________    ________________    ______    __________    ________________    _______________

    SouthWest    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    winter storm   
    SouthEast    2003-01-23 00:49    530.14    2.1204e+05                 NaT    winter storm   
    SouthEast    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    winter storm   
    West         2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    equipment fault
    MidWest      2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    severe storm   

或者,通过使用导入选项的 setvartype 函数,指定变量的数据类型。首先,为文件创建一个导入选项对象。数据文件包含了不同类型的变量。指定第一个和最后一个变量为 categorical 数组,第二个和第五个变量为 datetime 数组,剩余变量为 double。

opts = detectImportOptions('outages.csv');
varNames = opts.VariableNames ; % variable names
varTypes = {
    'categorical','datetime','double',...   
                'double','datetime','categorical'}; 
opts = setvartype(opts,varNames,varTypes);                      
将 readtable 与 opts 配合使用以导入数据,然后显示前五行。

T = readtable('outages.csv',opts);
head(T,5) 
ans=5×6 table
     Region           OutageTime          Loss     Customers       RestorationTime            Cause     
    _________    ____________________    ______    __________    ____________________    _______________

    SouthWest    01-Feb-2002 12:18:00    458.98    1.8202e+06    07-Feb-2002 16:50:00    winter storm   
    SouthEast    23-Jan-2003 00:49:00    530.14    2.1204e+05                     NaT    winter storm   
    SouthEast    07-Feb-2003 21:15:00     289.4    1.4294e+05    17-Feb-2003 08:14:00    winter storm   
    West         06-Apr-2004 05:44:00    434.81    3.4037e+05    06-Apr-2004 06:10:00    equipment fault
    MidWest      16-Mar-2002 06:18:00    186.44    2.1275e+05    18-Mar-2002 23:23:00    severe storm   

将新变量追加到表中

表 T 中包含了 OutageTime 和 RestorationTime。计算每次电力中断的持续时间并将此数据追加到表中。

T.Duration = T.RestorationTime - T.OutageTime;
head(T,5) 
ans=5×7 table
     Region           OutageTime          Loss     Customers       RestorationTime            Cause         Duration 
    _________    ____________________    ______    __________    ____________________    _______________    _________

    SouthWest    01-Feb-2002 12:18:00    458.98    1.8202e+06    07-Feb-2002 16:50:00    winter storm       148:32:00
    SouthEast    23-Jan-2003 00:49:00    530.14    2.1204e+05                     NaT    winter storm             NaN
    SouthEast    07-Feb-2003 21:15:00     289.4    1.4294e+05    17-Feb-2003 08:14:00    winter storm       226:59:00
    West         06-Apr-2004 05:44:00    434.81    3.4037e+05    06-Apr-2004 06:10:00    equipment fault     00:26:00
    MidWest      16-Mar-2002 06:18:00    186.44    2.1275e+05    18-Mar-2002 23:23:00    severe storm        65:05:00

将数据写入文本文件

将表、元胞数组或数值数组中包含的表格数据从 MATLAB 工作区导出到文本文件。

将表导出到文本文件

可使用 writetable 函数将表格数据从 MATLAB 工作区导出到文本文件。创建样本表,将表写入文本文件,然后指定更多选项并再次将表写入文本文件。
创建包含变量 Pitch、Shape、Price 和 Stock 的样本表 T。

Pitch = [0.7;0.8;1;1.25;1.5];
Shape = {
    'Pan';'Round';'Button';'Pan';'Round'};
Price = [10.0;13.59;10.50;12.00;16.69];
Stock = [376;502;465;1091;562];
T = table(Pitch,Shape,Price,Stock)
T=5×4 table
    Pitch     Shape      Price    Stock
    _____    ________    _____    _____

     0.7     'Pan'          10     376 
     0.8     'Round'     13.59     502 
       1     'Button'     10.5     465 
    1.25     'Pan'          12    1091 
     1.5     'Round'     16.69     562 

将表 T 导出到一个名为 tabledata.txt 的文本文件。查看文件的内容。默认情况下,writetable 会写入逗号分隔的数据,将表变量名称作为列标题。

writetable(T,'tabledata.txt');
type tabledata.txt
Pitch,Shape,Price,Stock
0.7,Pan,10,376
0.8,Round,13.59,502
1,Button,10.5,465
1.25,Pan,12,1091
1.5,Round,16.69,562

创建表 T2,使用 RowNames 名称-值对组参数指定行名称。

rowNames = {
    'M4';'M5';'M6';'M8';'M10'};
T2 = table(Pitch,Shape,Price,Stock,'RowNames',rowNames)
T2=5×4 table
           Pitch     Shape      Price    Stock
           _____    ________    _____    _____

    M4      0.7     'Pan'          10     376 
    M5      0.8     'Round'     13.59     502 
    M6        1     'Button'     10.5     465 
    M8     1.25     'Pan'          12    1091 
    M10     1.5     'Round'     16.69     562 

将 T2 导出到名为 tabledata2.txt 并以制表符分隔的文本文件。使用 Delimiter 名称-值对组参数指定制表符分隔符,并使用 WriteRowNames 名称-值对组参数以包括行名称。查看文件的内容。

writetable(T2,'tabledata2.txt','Delimiter','\t','WriteRowNames',true);
type tabledata2.txt
Row	Pitch	Shape	Price	Stock
M4	0.7	Pan	10	376
M5	0.8	Round	13.59	502
M6	1	Button	10.5	465
M8	1.25	Pan	12	1091
M10	1.5	Round	16.69	562

将元胞数组导出到文本文件
打开实时脚本
可采用以下方法之一,将元胞数组从 MATLAB 工作区导出到文本文件:

使用 writecell 函数将元胞数组导出到文本文件。

通过指定输出数据的格式,使用 fprintf 导出元胞数组。

创建样本元胞数组 C。

C = {
    'Atkins',32,77.3,'M';'Cheng',30,99.8,'F';'Lam',31,80.2,'M'}
C = 3×4 cell array
    {
    'Atkins'}    {
    [32]}    {
    [77.3000]}    {
    'M'}
    {
    'Cheng' }    {
    [30]}    {
    [99.8000]}    {
    'F'}
    {
    'Lam'   }    {
    [31]}    {
    [80.2000]}    {
    'M'}

使用 writecell 导出元胞数组。

writecell(C,'data.dat')

查看文件的内容。

type data.dat
Atkins,32,77.3,M
Cheng,30,99.8,F
Lam,31,80.2,M

或者,使用 fprintf 导入元胞数组。打开一个可供写入的名为 celldata.dat 的文件。使用格式设定符定义 formatSpec,以描述文件中的数据模式。典型的格式设定符包括:表示字符向量的 ‘%s’,表示整数的 ‘%d’ 或者表示浮点数的 ‘%f’。使用空格分隔每个格式设定符,以指示对输出文件使用空格分隔符。在每行数据的末尾包括换行符 (’\n’)。

fileID = fopen('celldata.dat','w');
formatSpec = '%s %d %2.1f %s\n';

确定 C 的大小,并使用 fprintf 函数一次导出一行数据。然后关闭文件。fprintf 将写入一个空格分隔的文件。

[nrows,ncols] = size(C);
for row = 1:nrows
    fprintf(fileID,formatSpec,C{
    row,:});
end
fclose(fileID);

查看文件的内容。

type celldata.dat
Atkins 32 77.3 M
Cheng 30 99.8 F
Lam 31 80.2 M

将数值数组导出到文本文件
打开实时脚本
可使用 writematrix 将数值数组导出到文本文件。

创建数值数组 A。

A = magic(5)/10 
A = 5×5

    1.7000    2.4000    0.1000    0.8000    1.5000
    2.3000    0.5000    0.7000    1.4000    1.6000
    0.4000    0.6000    1.3000    2.0000    2.2000
    1.0000    1.2000    1.9000    2.1000    0.3000
    1.1000    1.8000    2.5000    0.2000    0.9000

将该数值数组写入到 myData.dat,并将分隔符指定为 ‘;’。然后,查看文件的内容。

writematrix(A,'myData.dat','Delimiter',';')  
type myData.dat
1.7;2.4;0.1;0.8;1.5
2.3;0.5;0.7;1.4;1.6
0.4;0.6;1.3;2;2.2
1;1.2;1.9;2.1;0.3
1.1;1.8;2.5;0.2;0.9
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/anhongning123/article/details/104136574

智能推荐

EMC滤波设计-程序员宅基地

文章浏览阅读85次。https://blog.csdn.net/csy17729158342/category_11970648.html 滤波:特定波段频率滤除插入损耗:50欧姆系统下测量,插损越大越好,滤波前的电压比滤波后的电压。共模阻抗100欧姆,差模阻抗50欧姆简单的滤波电路:电感与源负阻抗分压,电感靠近低阻抗;电容分流,靠近高阻抗。由插损来判断滤波电路是否有效,滤波电容放在高阻有效,电感放低阻有效。24V电机驱动,Re超标,红色差模,蓝色共模,电机线圈为感性,认为为高阻态,机壳加接地电容。电机线圈为感性,认为为高阻态

Matlab学习——求解微分方程(组)-程序员宅基地

文章浏览阅读9.1k次,点赞16次,收藏110次。介绍:1.在 Matlab 中,用大写字母 D 表示导数,Dy 表示 y 关于自变量的一阶导数,D2y 表示 y 关于自变量的二阶导数,依此类推.函数 dsolve 用来解决常微分方程(组)的求解问题,调用格式为 X=dsolve(‘eqn1’,’eqn2’,…)如果没有初始条件,则求出通解,如果有初始条件,则求出特解系统缺省的自变量为 t。2..._"matlab求解微分方程)\"=1+2 y ', y (0)=2, y '(0)= l 的解:2.用循环求解法找出满足∑ i >1000的最小 m 值。"

Java dom4j解析RESTFull风格发布的WebService的xml文件_restfullwebservice发布-程序员宅基地

文章浏览阅读750次。公司项目要求解析出RESTFull风格发布的WebService接口的所有请求方法,参数,参数类型,已经方法是返回类型,想来想去都不知道该怎么办,思来想去然后又研究RESTFull风格WebService的xml文件,发现其实对于Java简单类型的 方法是能在xml文件中体现的,但是对于复杂类型,比如参数是一个对象,或者返回值是一个对象或者List,Map等。这些返回类型在xml文件中的 resp_restfullwebservice发布

Django简单实现从数据库导入数据到前端界面(完整)_python将数据库内容写入前端-程序员宅基地

文章浏览阅读7.8k次,点赞17次,收藏90次。START第一先连接上数据库在项目文件的setting里找到DATABASESENGINE :数据库服务器(这里可以看我另一篇文章)NAME: 数据库的名字USER :连接数据库的用户PASSWORD :连接数据库的用户密码HOST :连接主机的数据库服务器PORT: 连接数据库时使用的端口第二设置数据库模型(models.py)找到你的项目,右键,找到open in terminal在打开的命令行里输入python manage.py inspectdb#输入这段代码是为_python将数据库内容写入前端

Avalonia(11.0.2)+.NET6 打包设置发布包的版本号-程序员宅基地

文章浏览阅读192次。本文是对上一篇打包文章的补充,后台好多人私信我说打包的版本号如何设置,今天出个补充说明。

【LeetCode】反转链表(递归法)-程序员宅基地

文章浏览阅读259次,点赞10次,收藏5次。先整理在这里吧,递归说简单也简单,说难也真难。供参考。

随便推点

删除单链表中的倒数第k个结点_删除单链表倒数第k个结点-程序员宅基地

文章浏览阅读2.2k次。 算法思想:定义两个指针,pFast和pSlow,都指向头结点,pFast先后移k-1位,使pFast指向第k个结点,此时pSlow就是相对pFast的倒数第k个结点。然后同时后移,当pFast走到表尾时,pSlow正好指向倒数第k个结点。然后将pSlow指向的结点删除。 删除单链表中的倒数第k个结点,首先要确定倒数第k个结点的位置。//查找指向链表中的倒数第k个结点的指针..._删除单链表倒数第k个结点

《嵌入式 - Lwip开发指南》第4章 移植LWIP(基于RT-Thead系统-以太网+Wifi)_lwip ethernet link down-程序员宅基地

文章浏览阅读1.9k次。开发环境:RT-Thread版本:4.0.3操作系统:Windows10Keil版本:V5.30RT-Thread Studio版本:2.0.1开发板MCU:STM32F746ZGT6U(NUCLEO-F746ZG开发板)前面是通过以太网进行网络连接,本文将讲解Wifi联网。4.1 RW007联网4.1.1 RW007简介RW007 是由上海睿赛德电子科技有限公司开发的高速 WiFi 模块,模块基于 Realtek RTL8710BN(Ameba Z 系列) WIFI SOC,使用 SPI_lwip ethernet link down

VC++使用PreTranslateMessage函数处理点击按钮区域响应事件_vc++ pretranslatemessage-程序员宅基地

文章浏览阅读1.8k次。主要用于贴图1、用图片实现按钮2、按钮控件属性设置为不可视代码如下:BOOL CLoginDlg::PreTranslateMessage(MSG* pMsg){ // TODO: 在此添加专用代码和/或调用基类 if (pMsg->message == WM_LBUTTONDOWN) { //获取按钮的区域 CRect rect,rc; m_Ok.GetWindowRe..._vc++ pretranslatemessage

粒子群优化BP神经网络初始权值(python实现)_python sklearn 蚁群 优化bp-程序员宅基地

文章浏览阅读1.1w次,点赞38次,收藏237次。粒子群优化BP神经网络初始权值(python实现)网上看了一些资料,但都是用matlab写的,(还要用csdn会员积分下载)自己不太会用matlab,就试着用python写了段小程序实现,数据用的是sklearn中的波士顿房价数据集,神经网络部分是用tensorflow2。(本来想用sklearn,但不知道怎么把网络权值提取出来)思路挺简单的,就是把BP网络误差作为粒子群优化的目标,每个粒子对应网络权重,一轮一轮的迭代。(先是在一篇建模论文里看到了这个想法,虽然好像没啥实用价值)大一,只会捏泥巴,各位_python sklearn 蚁群 优化bp

Oracle安装/配置/入门 » 新手入门必读--常见问题指南-程序员宅基地

文章浏览阅读239次。----入门篇---- 入门知识 http://www.cnoug.org/viewthread.php?tid=17449&h=1 Oracle 的入门心得-->强烈推荐 http://w..._oracle 配置一个新org应如何配置

win7 64位系统下 Logitech(罗技) M555b蓝牙鼠标断线解决办法_罗技m555b最简单处理方法-程序员宅基地

文章浏览阅读1.5w次。笔者的笔记本电脑是ThinkPad T420。用Logitech(罗技) M555b鼠标已经有一年多的时间了,不过之前一直是在win7 32位系统下使用的,用了能有一年多的时间,一直很稳定,没有出现过任何问题。  最近买了一条内存,加上原来的内存一共是8G。32位系统识别不出这么多内存,没有办法,只能安装64位系统。安装过程一切顺利,没有出现过什么问题。但是所有程序都安装完成,在使用电脑的过程_罗技m555b最简单处理方法

推荐文章

热门文章

相关标签