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

智能推荐

Yolov5实例分割Tensorrt部署实战_利用yolov5实例分割-程序员宅基地

文章浏览阅读5.9k次,点赞12次,收藏58次。基于ultralytics最新发布的yolov5,6.2版本,本文对其中的实例分割模型,采用cpp与tensorrt加速推理_利用yolov5实例分割

Jeston TX2 GPIO控输入输出控制_英伟达tx2输入电压与输出电压-程序员宅基地

文章浏览阅读1k次。Jeston TX2 GPIO控输入输出控制主板主要结构介绍主板主要结构介绍TX2主板:_英伟达tx2输入电压与输出电压

kali 如何下载文件_kali进行wget下载镜像-程序员宅基地

文章浏览阅读7.2k次。使用实例实例1:使用wget下载单个文件$wget http://www.minjieren.com/wordpress-3.1-zh_CN.zip说明:以上例子从网络下载一个文件并保存在当前目录,在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。实例2:使用wget -O下载并以不同的文件名保存$wget -O wordpress.zip http://www.minjieren.com/download.aspx?id=1080wget默认会以最_kali进行wget下载镜像

Cycle-GAN代码解读_cyclegan的鉴别器patchgan的输出尺寸-程序员宅基地

文章浏览阅读3.5k次,点赞12次,收藏55次。1 model.py文件1.1 初始化函数import torch.nn as nnimport torch.nn.functional as Fimport torch# 初始化函数def weights_init_normal(m): classname = m.__class__.__name__ if classname.find("Conv") != -1: torch.nn.init.normal_(m.weight.data, 0.0, .._cyclegan的鉴别器patchgan的输出尺寸

待编辑:SAS入门——多元统计(聚类分析)初学者笔记(四)欢迎指正_sas 医学场景 聚类分析-程序员宅基地

文章浏览阅读629次,点赞7次,收藏17次。8.method=算法--包括 ward(离差平方和法 )average(类平均法),centroid(重心法)complete(最长距离法),single(最短距离法)median(中间距离法),density(密度法)flexible(可变类平均法),twostage(两阶段密度法),eml(最大似然法),mcquitty(相似分析法)2)根据所确定的样品(或变量)“距离”公式,把距离较近的两个样品(或变量)聚合为一类,其它的样品(或变量)仍各自聚为一类,共聚成 n-1类;_sas 医学场景 聚类分析

R语言中定义函数、调用函数及常用编程技巧_r语言定义函数-程序员宅基地

文章浏览阅读1.2k次,点赞12次,收藏20次。介绍定义函数调用函数常用编程循环结构apply 函数族apply()lapply()sapply()vapply()mapply()R语言是一种功能强大的统计分析编程语言,广泛应用于数据挖掘、机器学习、统计建模等领域。掌握R语言的编程技巧,可以让我们在处理数据分析任务时更加得心应手。本文将从基础的函数定义和调用开始,逐步介绍R语言中的条件语句、循环结构等常用编程技巧。在R语言中,函数是用来执行特定任务的代码块。通过定义函数,我们可以将复杂的代码重复使用,提高代码的可读性和可维护性。_r语言定义函数

随便推点

sql注入之pikachu盲注练习-程序员宅基地

文章浏览阅读758次。sql注入pikachu之盲注练习_pikachu盲注

QT 对QString字符串的操作_qstring去除右数14位-程序员宅基地

文章浏览阅读3.1w次,点赞59次,收藏369次。QString是QT提供的字符串类,相应的也就提供了很多很方便对字符串的处理方法。这里把这些对字符串的操作做一个整理和总结。1. 将一个字符串追加到另一个字符串的末尾QString str1 = "hello ";QString str2 = "world";str1.append(str2); // str1 = "hello world"st..._qstring去除右数14位

基于Retrofit2.0 封装的超好用的RetrofitClient_java retrofitclient-程序员宅基地

文章浏览阅读1.3k次。基于Retrofit2.0封装的RetrofitClient. 避免重复创建Retrofit实列调用方便简洁无需重复设置属性的步骤可固定配置 Host,也可动态配置Url,请求头,参数等使用原生的Retrofit请求网络,熟悉的朋友必定了解,在某个ApiServie方法多时 Retrofit设置就显得有点累赘,今天给大家带来对Retrof_java retrofitclient

unity 二维数组 可视化_剑指 offer 第一题: 二维数组中的查找-程序员宅基地

文章浏览阅读238次。题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。题目分析 图 1如果没有头绪的话,很显然使用 暴力解法 是完全可以解决该问题的。即遍历二维数组中的每一个元素,时间复杂度:O(n^2)。其实到这里我们就可以发现,使用这种暴力解法并没有充分利用题目给..._unity 二维数组查看

用Idea EmmyLua插件调试Xlua断点断不下来的问题_emmylua断点无效-程序员宅基地

文章浏览阅读3.6k次。把luaEnv.DoString(File.ReadAllBytes("Assets/Resources/ui2.lua.txt"));改成luaEnv.DoString(File.ReadAllBytes("Assets/Resources/ui2.lua.txt"), "ui2.lua.txt");就可以有断点了_emmylua断点无效

关于idea上LeetCode插件, java.lang.NoSuchMethodError: ‘ListNode ListNode.deserialize(java.lang.String)‘ 问题_java.lang.nosuchmethoderror: 'listnode listnode.de-程序员宅基地

文章浏览阅读2.5k次,点赞12次,收藏2次。如题, 刷到链表的题的时候, 遇到这个问题.它自动生成的代码模板里有这个注释: //leetcode submit region begin(Prohibit modification and deletion)/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * _java.lang.nosuchmethoderror: 'listnode listnode.deserialize(java.lang.string