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

智能推荐

b站解除港澳台限制 油猴脚本 无法授权 找不到IP地址_解除b站区域限制账号授权失败-程序员宅基地

文章浏览阅读2.1w次。b站解除港澳台限制油猴脚本 无法授权 找不到IP地址可以的话请跳过这段废话问题描述解决方案可以的话请跳过这段废话作为一个总是看些奇怪动画片的阿宅,睿站的视频码率虽然差,但是胜在方便。这个脚本过于伟大。而且它适用于海外用户。脚本如何安装请看这里但是这个脚本总是喜欢抽风,这次在前人的提示和自己的尝试之下,成功解决问题。本着我为人人,人人为我的原则,特地把方法写在这里,让百度也搜到。不保证通用,仅解决了我遇到的这次问题。问题描述本次抽风在于,无法观看番剧区动画(原因应该是我的ip在11区)以及b站国_解除b站区域限制账号授权失败

c语言标准函数库_bf-numofsignificantdigitsafterdecimalpoint-程序员宅基地

文章浏览阅读426次。  void assert(int expression);   Macro used for internal error detection. (Ignored if NDEBUG_bf-numofsignificantdigitsafterdecimalpoint

类型“string | null”的参数不能赋给类型“string”的参数。 不能将类型“null”分配给类型“string” ts_ts 怎么把string|null 赋值string-程序员宅基地

文章浏览阅读1.5w次。项目中使用TS提示报错类型“string | null”的参数不能赋给类型“string”的参数。 不能将类型“null”分配给类型“string”解决方法_ts 怎么把string|null 赋值string

求1-10000之间的水仙花数_10000以内的水仙花数-程序员宅基地

文章浏览阅读7.4k次,点赞2次,收藏6次。public class T0301{ public static void main(String args []){ for(int i = 1; i <= 10000;i ++){ int a,b,c,d; a = i%10; b = i/10%10; c = i/10/1_10000以内的水仙花数

Java常考面试题11 内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?_内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制-程序员宅基地

文章浏览阅读3.4k次。静态的类或者方法只能访问静态成员!_内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制

spring的annotation注解之@Resource_spring如何使用annotation注册的resource实现类-程序员宅基地

文章浏览阅读889次。@Resource(JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解) Spring 不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。 @Resource的作用相当于@Autowired,只不过@A_spring如何使用annotation注册的resource实现类

随便推点

自然语言处理的bert, GPT, GPT-2, transformer, ELMo, attention机制都是些何方神圣???_transformer elmo gpt bert gpt-2-程序员宅基地

文章浏览阅读8.1k次,点赞5次,收藏37次。2018年是NLP领域巨变的一年,这个好像我们都知道,但是究竟是哪里剧变了,哪里突破了?经常听大佬们若无其事地抛出一些高级的概念,你却插不上嘴,隐隐约约知道有这么个东西,刚要开口:噢!你说bert啊,我知道,就是一个预训练模型,然后,然后。。。然后就没有然后了,若是在面试场上,你三秒钟就结束了考官的提问,那尴尬的考官估计只能以你太快的理由拒绝给你发offer。好的,闲话少说,我们来总结一下这么..._transformer elmo gpt bert gpt-2

typora使用pandoc_pandoc安装后怎么和typora连上-程序员宅基地

文章浏览阅读286次。typora使用pandoc_pandoc安装后怎么和typora连上

#sas建模-挖掘技术的应用与分类-程序员宅基地

文章浏览阅读497次。啦啦啦啦啦我又嚟啦~今日讲下数据挖掘常见嘅技术以及应用,并不全面,大家求其睇下就好啦哈哈哈。数据挖掘技术,在实际的应用中,主要就体现在4个方面:分类与回归,聚类,关联规则..._sas eg使用分类模型

Android—ProgressBar进度条自定义样式_android自定义progressbar的style-程序员宅基地

文章浏览阅读1.5k次。导航1.自定义样式圆形进度条1.1xml布局文件1.2自定义样式文件1.3效果图2.自定义横向进度条2.1xml布局文件2.2自定义样式文件2.3效果图3.动态显示进度条进度4.坑1.自定义样式圆形进度条1.1xml布局文件<ProgressBar android:id="@+id/proBarYuan" android:layout_width="50dp" android:layout_height="50dp" style="@style/Widget.AppCompat.Prog_android自定义progressbar的style

如何选择Python版本2还是3_python2 python3 指定版本-程序员宅基地

文章浏览阅读5k次。阅读本文大概需要4分钟很多初学者刚开始学python的时候,一定都遇到过这个问题,python的世界有2个版本,python2 和 python3 ,而且有些语法还不兼容.怎么办~~到底应该选择哪个版本来开发呢?好,今天我们就来聊聊这个话题.1.Python2和Python3的历史背景 Python语言是在20世纪90年代诞生的,算算到现在已经是25岁的大叔级的语言了(跟它同一个时代的还有一个鼎鼎_python2 python3 指定版本

最短路径的四种算法_最短路径算法-程序员宅基地

文章浏览阅读1.3w次,点赞7次,收藏58次。最短路径四种算法1234FloydDijkstraBellman-Ford队列优化的Bellman-Ford一,只有四行的算法——Floyd-Warshall假设求顶点ViViVi到VjVjVj的最短路径。弗洛伊德算法依次找从ViViVi到VjVjVj,中间经过结点序号不大于000的最短路径,不大于111的最短路径,…直到中间顶点序号不大于n−1n-1n−1..._最短路径算法