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

智能推荐

linux下编译GDAL外加扩展格式支持(五)--完-程序员宅基地

文章浏览阅读229次。接1、2、3、4篇。10、安装mysql支持安装fedora15或者16系统时若选择安装mysql数据库,则必须自行安装mysql开发包。因为自带默认数据库不会安装这个包。否则会遇到mysql错误:ogr_mysql.h:34:23: fatal error: my_global.h: No such file or directory#问题原因:找不到mysql头文件..._linux gdal netcdf5

Linux tc qdisc 模拟网络丢包延时-程序员宅基地

文章浏览阅读1.2k次。Linux tc qdisc 模拟网络丢包延时_tc qdisc

linux64bit 安装 jdk 1.7-程序员宅基地

文章浏览阅读336次。linux64bit 安装 jdk 1.7下载地址 : https://edelivery.oracle.com/otn-pub/java/jdk/7u21-b11/jdk-7u21-linux-x64.rpm0. 卸载rpm版的jdk: #rpm -qa|grep jdk 显示:jdk-1.6.0_10-fcs 卸载:#rpm -e --nodep..._liunx64位得jdk1.7

【Linux笔记】-----Nginx/LVS/HAProxy负载均衡的优缺点_中间件应用场景nginx lvs proxy-程序员宅基地

文章浏览阅读552次。开始听到负载均衡的时候,我第一反应想到的是链路负载均衡,在此之前主要是在学习网络方面知识,像在NA、NP阶段实验做链路负载均衡时常会遇到,后来还接触到SLB负载分担技术,这都是在链路基础上实现的。 其实负载均衡可以分为硬件实现负载均衡和软件实现负载均衡。 硬件实现负载均衡:常见F5和Array负载均衡器,配套专业维护服务,但是成本昂贵。 软件实现负载均衡:常见开源免费的负载均衡软件有Ngin..._中间件应用场景nginx lvs proxy

多维时序 | MATLAB实现CNN-LSTM多变量时序预测_cnn可以进行多步预测-程序员宅基地

文章浏览阅读4.7k次。多维时序 | MATLAB实现CNN-LSTM多变量时序预测目录多维时序 | MATLAB实现CNN-LSTM多变量多步预测基本介绍模型特点程序设计学习总结参考资料基本介绍本次运行测试环境MATLAB2020b,MATLAB实现CNN-LSTM多变量多步预测。模型特点深度学习使用分布式的分层特征表示方法自动提取数据中的从最低层到最高层固有的抽象特征和隐藏不变结构. 为了充分利用单个模型的优点并提高预测性能, 现已提出了许多组合模型。CNN 是多层前馈神经网络, 已被证明在提取隐藏_cnn可以进行多步预测

随便推点

【9.3】用户和组的管理、密码_polkitd:input 用户和组-程序员宅基地

文章浏览阅读219次。3.1 用户配置文件和密码配置文件3.2 用户组管理3.3 用户管理3.4 usermod命令3.5 用户密码管理3.6 mkpasswd命令_polkitd:input 用户和组

pca算法python代码_三种方法实现PCA算法(Python)-程序员宅基地

文章浏览阅读670次。主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域。它的主要作用是对高维数据进行降维。PCA把原先的n个特征用数目更少的k个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的k个特征互不相关。关于PCA的更多介绍,请参考:https://en.wikipedia.org/wiki/Prin..._inprementation python code of pca

内存地址Linux下内存分配与映射之一-程序员宅基地

文章浏览阅读35次。发一下牢骚和主题无关:地址类型:32位的cpu,共4G间空,其中0-3G属于用户间空地址,3G-4G是内核间空地址。用户虚拟地址:用户间空程序的地址物理地址:cpu与内存之间的用使地址总线地址:外围总线和内存之间的用使地址内核逻辑地址:内存的分部或全体射映,大多数情况下,它与物理地址仅差一个偏移量。如Kmalloc分..._linux 内存条与内存地址

自动化测试介绍_自动化测试中baw库指的什么-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏16次。什么是自动化测试?   做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。  首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmeter),或自己所写的一段程序,用于_自动化测试中baw库指的什么

a0图框标题栏尺寸_a0图纸尺寸(a0图纸标题栏尺寸标准国标)-程序员宅基地

文章浏览阅读1.6w次。A0纸指的是一平方米大小的白银比例长方形纸(长为1189mm宽为841mm)。A0=1189mm*841mm A1=841mm*594mm 相当于1/2张A0纸 A2=594mm*420mm 相当于1/4.A1图纸大小尺寸:841mm*594mm 即长为841mm,宽为594mm 过去是以多少"开"(例如8开或16开等)来表示纸张的大小,我国采用国际标准,规定以 A0、A1、A2、.GB/T 14..._a0图纸尺寸

TreeTable的简单实现_treetable canvas-程序员宅基地

文章浏览阅读966次。最终效果图:UI说明:针对table本身进行增强的tree table组件。 tree的数据来源是单元格内a元素的自定义属性:level和type。具体代码如下:Java代码 DepartmentEmployeeIDposi_treetable canvas