文档

从Excel电子表格导入数据

MATLAB提供的工具导入电子表格数据交互和编程。交互式地导入电子表格数据,请参阅使用导入工具读取电子表格数据。这个例子展示了如何导入数据以编程方式使用readtablespreadsheetDatastore

  • 使用readtable当你的数据驻留在一个工作表一个Excel®电子表格文件。

  • 使用spreadsheetDatastore当你的数据驻留在多个表的电子表格文件或多个电子表格文件的集合。

数据用于此示例来自美国国内航班在1996和2008之间。信息被组织在一个Excel®文件与多个表,每个表包含数据为1年。下载完整的数据集http://stat-computing.org/dataexpo/2009/the-data.html

导入电子表格数据表

电子表格包含结构化的数据列的数字和文本。MATLAB®数据类型提供了一种自然的方式处理这些用于异构数据。你可以用表来存储变量名或行名称和数据在一个容器中。

使用readtable函数来将数据从一个电子表格导入一个表。结果表,airlinedata,包含电子表格中的每一列的一个变量。默认情况下,readtable将第一行中的数据文件的变量名。

airlinedata = readtable (“airlinesmall_subset.xlsx”);

导入数据的子集

当您想要导入只从电子表格的一部分数据,调用readtable函数与范围名称-值对。的值范围名称-值对进口指定行和列的子集。

airlinedata = readtable (“airlinesmall_subset.xlsx”,“范围”,A1: F10的);

从具体的进口工作表

默认情况下,readtable从第一个工作表读取数据。然而,名称-值对允许您指定工作表读取。例如,在这个例子中是由工作表的数据。导入数据从一个特定的工作表使用名称-值对参数来指定工作表的名称。

airlinedata = readtable (“airlinesmall_subset.xlsx”,“表”,“2008”);

代表表与MATLAB中变量的数据类型

在导入过程中,readtable检测数据是否文本或数字。然而,利用MATLAB®原生数据类型提供的附加功能,您可以选择转换变量的数据类型。例如,将变量与日期和时间信息datetime允许您执行高效的计算、比较和格式化显示日期和时间。

创建一个更小的表只有要转换的变量,通过指定变量名。

data = airlinedata (: {“年”,“月”,“DayofMonth”,“UniqueCarrier”,“ArrDelay”});:数据(1:5)
ans =5×5表年月DayofMonth UniqueCarrier ArrDelay ___ _____ __________ _________________ ________ 3的WN 1 2008 2008 2008 4的WN 4 1 6的WN 22 2008 1 7的WN 24 2008 -17 8“WN”

readtable进口前三个变量(列),一年,,DayofMonth包含日期信息,数字数据。第四个变量UniqueCarrier导入作为文本,其中包含重复的标签。最后,第五个变量ArrDelay进口是数值型数据,其中包含时间信息。

代表一年,DayofMonth类型datetime,UniqueCarrier作为分类,ArrDelay作为持续时间在几分钟内。

数据。日期= datetime (data.Year data.Month data.DayofMonth);% 1到3列数据。UniqueCarrier =分类(data.UniqueCarrier);数据。一个rrDelay = minutes(data.ArrDelay);

导入的数据表格的集合

一个数据存储用于处理任意大量数据分布在多个文件。数据导入和数据处理可以通过执行数据存储。

创建一个数据存储从电子表格的集合airlinesmall_subset.xlsx和预览内容。

ds = spreadsheetDatastore (“airlinesmall_subset.xlsx”);p =预览(ds);p (: 1:7)
ans =8×7表年月DayofMonth DayOfWeek DepTime CRSDepTime ArrTime ___ _____ _____ _____累积__________ 1996 1 18 4 2117 2120 2305 1996 1 1252 1245 1511 1996 5 1 16 2 1441 1445 1708 1996 1 1 1 2258 2300 2336 1996 1 4 4 1814 1814 1901 1996 1 729年3 1822 1820 1934 1996 1 18 4 31日26日5 1704 1705 1829 730 841 1996 1

选择要导入的变量通过指定变量名。

ds。SelectedVariableNames = {“年”,“月”,“DayofMonth”,“UniqueCarrier”,“ArrDelay”};

利用MATLAB®原生数据类型的附加功能,您可以指定每个变量的数据类型之前导入的数据。

进口UniqueCarrier作为分类变量。

ds.SelectedVariableTypes (4) = {“分类”};预览(ds)
ans =8×5表年月DayofMonth UniqueCarrier ArrDelay ___ _____ __________ _________________ ________ 18惠普6 1996 1996 1 1996年惠普11 12日16 1 HP惠普-13 1996 1996 1996 4 9 1996 1 31我们9 1996 18我们2 1 -10年西北26日

使用readall导入数据功能数据存储。您可以导入数据,一个文件使用函数或从数据存储的所有文件使用readall。默认情况下,带来的所有工作表文件作为一个表。

alldata =阅读(ds);

控制进口的数据量,调整ReadSize数据存储的属性,在调用之前

ds。ReadSize =“表”;data1996 =阅读(ds);%读取第一个工作表data1997 =阅读(ds);%读取下一个工作表

读取和处理数据逐步从电子表格

在处理大量数据时,可能不适合在内存中,是很有用的处理每个部分逐步从数据存储读取。

从表中选择和过程数据感兴趣的使用hasdata,,重置函数,计算出最大的到来推迟为每个电子表格。

重置(ds)%从第一单开始阅读mdelay = [];hasdata (ds) t =阅读(ds);m = max (t.ArrDelay);mdelay = vertcat (mdelay, m);结束

显示每年的最大延迟到来。

年= 1996:2008;mdelayInHours = mdelay / 60;%转换为小时情节(mdelayInHours,“o”,“线宽”2);包含(“年”)ylabel (的最大延迟(小时))标题(航班延误趋势在今年的)

类似的处理数据存储可以使用MATLAB®MapReduce框架。有关更多信息,请参见分析大数据在MATLAB使用MapReduce

这个主题有帮助吗?