罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

介绍新的R2013b MATLAB数据类型

今天我想介绍一个相当频繁的博客莎拉等Zaranek工作的MATLAB MathWorks的营销团队。她和我将写在R2013b MATLAB的新功能。特别是,有两种新的数据类型在MATLAB R2013b -分类数组。

内容

表和分类数组是什么?

表是一个新的数据类型适用于异构数据和元数据。具体来说,表是用于混合型表格数据经常作为列存储在一个文本文件或表格。表的行和用于变量。举行分类数据分类数组是有用的——从一个有限值的离散的类别列表。

最好的方法之一来了解更多关于表和分类数组是看他们在行动。所以,在这篇文章中,我们将使用的表和分类检查一些飞机航班延误数据。的飞行数据是免费运输统计局(BTS)。你可以自己下载在这里。气象数据来自国家气候数据中心(NCDC)和可用在这里

将数据导入到一个表

您可以将您的数据导入表交互使用导入工具或者你可以通过编程的方式使用readtable

FlightData = readtable (“Jan2010Flights.csv”);谁FlightData
类属性名称大小字节FlightData 17816 x7 17816表

文件的全部内容已经包含在一个单一的变量——一个表。给你阅读你的数据从一个csv文件。readtable还支持从.金宝app txt,阅读。dat文本文件和Excel电子表格文件。表也可以直接从创建变量在工作区中。

观察变量名(列名)

你可以看到所有的变量名(列名在我们的表)通过查看VariableNames属性。

FlightData.Properties.VariableNames
ans = 1到5列“FL_DATE”“载体”“起源”“桌子”“CRS_DEP_TIME”列6到7“DEP_TIME”“DEP_DELAY”

这个表不包含任何行名称,但对于一个表行名称可以访问行名称使用RowNames财产。

你的表中访问数据

有多种方法访问表中的数据。您可以使用点索引来访问或修改一个表变量,类似于结构如何使用字段名。

例如,使用点的索引可以画一个柱状图出发延误(分钟)。

嘘(FlightData.DEP_DELAY)标题(在几分钟内航班延误的直方图)

你也可以显示前5起飞延误。

FlightData.DEP_DELAY (1:5)
ans = 49 7 5 8 -10

你也可以提取数据从一个或多个表中的变量使用花括号。花括号内您可以使用数字索引或变量和行名称。例如,您可以提取实际起飞时间和计划逃离乘以第一5航班。

有时= FlightData {1:5, {“DEP_TIME”,“CRS_DEP_TIME”}};disp(有时)
1149 1100 1053 1100 1055 1100 1052 1100 1050 1100

这类似于细胞数组索引。然而,不像细胞,这连接到一个数组中指定的变量。因此,所有指定的变量的数据类型必须兼容连接。

将数据转换为分类数组

你可以把一些变量表使用分类。分类数组比持有更多的内存高效细胞数组字符串当你有重复的数据。分类数组存储只有一个副本的每个类别名称,减少所需的内存来存储阵列。您可以使用看到你的内存数量将通过将数据保存到一个分类数组。

FlightData
类属性名称大小字节FlightData 17816 x7 17816表
FlightData。起源=分类(FlightData.ORIGIN);FlightData。DEST =分类(FlightData.DEST);FlightData。载体=分类(FlightData.CARRIER);谁FlightData
类属性名称大小字节FlightData 17816 x7 17816表

使用类别,你可以找到数组中所有不同的类别。默认情况下,分类数组不定义一个明确的秩序。如果你的数据包含类别和一个明确的订单,你可以设置“顺序”旗帜真正的当创建你的直言数组。默认的顺序将按字母顺序,但你可以开自己的顺序相反。

类别(FlightData.CARRIER)
ans = ' 9 e”“AA”””“B6”“有限公司”“DL”“F9”“FL”“MQ”“哦”“UA”“我们”的WN XE的“青年志愿”

分类数组也比细胞更快和更方便的数组索引和搜索的字符串。通过转换分类数组,然后您可以在数学上比较的字符串就像与数值。您可以使用此功能来创建一个新表只包含离开波士顿的航班。

创建一个新表

您可以创建一个新表从一个现有表的部分用括号数字索引,变量名,或行名称。自飞行起源现在是一个分类数组,您可以使用逻辑索引找到所有航班离开波士顿。

idxBoston = FlightData。起源= =“bo”;BostonFlights = FlightData (idxBoston:);高度(FlightData)高度(BostonFlights)
= 17816岁= 8904

添加/移除变量

您还可以修改您的表的添加和删除变量和行。所有变量在一个表中必须有相同数量的行,但是他们可以不同的宽度。

让我们添加一个新的变量(日期)来表示连续日期数量为各种飞行日期。

BostonFlights。日期= datenum(BostonFlights.FL_DATE);

原点现在BOS价值观和你现在不会使用目的地信息,所以这些变量可以被删除。小时也可以计算,以及晚些时候变量表示如果航班迟到了15分钟或者更多。

BostonFlights。起源= [];BostonFlights。DEST = [];BostonFlights。FL_DATE = [];BostonFlights。小时= floor(BostonFlights.CRS_DEP_TIME./100); BostonFlights{:,“晚了”}= BostonFlights。DEP_DELAY > 15;

删除丢失的数据

表支持函数寻找和标准化缺金宝app失的数据。在这种情况下,你可以找到任何缺失的数据使用ismissing并删除它。您可以使用高度给你的表行数,看看有多少航班从表中删除。我们利用逻辑索引的航班没有缺失的数据。

身高(BostonFlights)
ans = 8904
TF =任何(ismissing (BostonFlights), 2);BostonFlights = BostonFlights (~ TF,:);身高(BostonFlights)
ans = 8640

总结表

然后,您可以看到这个新表中每个变量的描述性统计用总结

总结(BostonFlights)
变量:载体:8640 x1分类值:9 e 85 AA 913 1726 55 B6有限公司321 DL 1215 F9 26 536 FL MQ 751哦341 UA 643 1494 WN 384 XE 93青年志愿57 CRS_DEP_TIME: x1双重价值:8640分钟500 1215 max 2359 DEP_TIME中位数:8640 x1双重价值:最小2位数1224 max 2400 DEP_DELAY: x1双重价值:8640分钟-25中3 max 419日期:x1双重价值:8640分钟7.3414 e + 05年平均7.3415 e + 05年最大7.3417 e + 05年小时:8640 x1双重价值:最小5位数12最大23日晚:8640 x1逻辑值:真正的1471错误7169

整理资料

有额外的功能表,应用函数表变量,和合并表在一起。例如,你可以BostonFlights起飞延迟。

BostonFlights = sortrows (BostonFlights,“DEP_DELAY”,“下”);BostonFlights (1:10,:)
ans =载体CRS_DEP_TIME DEP_TIME DEP_DELAY日期小时_______ ________ _____ _____ _____ DL 1830 129 419 7.3416 e + 05 18 DL 1850 111 381 7.3414 e + 05 18有限公司1755 375 7.3414 e + 05年17 AA 1710 2323 373 7.3416 e + 05 17 DL 630 1240 370 7.3416 e + 05年6 FL 1400 1951 351 7.3414 e + 05 14 FL 1741 2330 349 7.3414 e + 05 17飞往洛杉机的联合航空1906班机22 316 7.3414 e + 05年19 AA AA 840 1355 315 7.3416 e + 05年8 905 1420 315 7.3414 e + 05年9晚_____真的真的真的真的真的真的真的真的真的真的

应用函数表变量

表变量,可以应用函数来处理varfun

varfun可选的额外的调用等投入吗“数据源”“GroupingVariables”“数据源”让你具体哪些变量需要操作而不是操作在表中的所有变量。“GroupingVariables”让你定义组操作的行。varfun将函数应用到每个组每个变量的表内的行,而不是每个整个变量。

您可以使用varfun计算所有航班的平均延迟和分数的航班在给定的一天对于一个给定的小时。默认的输出varfun是一张桌子。

ByHour = varfun (@mean BostonFlights,“数据源”,{“DEP_DELAY”,“晚了”},“GroupingVariables”,{“日期”,“小时”});disp (ByHour (1:5)):
日期小时GroupCount mean_DEP_DELAY mean_LATE __________ ___ _____ 734139 _5 __________ * * * 3.8 7.3414 e + 05年5 5 0 734139 _6 19 10.579 - 0.31579 734139 7.3414 e + 05年6 _7 18 6.7778 - 0.11111 734139 7.3414 e + 05年7 _8 21 8.8571 - 0.33333 734139 7.3414 e + 05年8 _9 7.3414 e + 05年9 17 5.0588 - 0.23529

加入(合并)表

天气可能有一个重要的角色在决定是否推迟航班。对于一个给定的时刻,你可能会想知道推迟航班信息和天气在机场。所以,你可以先阅读在另一个表包含波士顿洛根机场的天气数据。然后,您可以与现有表的合并ByHour表。

因为有很多变量在这个文件中,您可以指定输入格式在使用readtable。这允许您使用*跳过你不感兴趣的变量加载到桌子上。关于指定字符串格式化的更多信息,请参阅在这里在文档中。由于这些数据使用“M”代表缺失的数据,您可以使用“TreatAsEmpty”替换任何实例的“M”标准缺失值指标数值(南)。

FormatStr = [% *年代% s % f 'repmat (% *年代”1,9)' % f 'repmat (% *年代”1、7)' % f ',repmat (% *年代”,1,3),' % f 'repmat (% *年代”1、18)];WeatherData = readtable (“BostonWeather.txt”,“HeaderLines”6“格式”FormatStr,“TreatAsEmpty”,“米”);WeatherData.Properties.VariableNames
ans =“日期”“时间”“DryBulbCelsius”“DewPointCelsius”“风速”

WeatherData包含日期、时间露点和干球温度在摄氏温度,风速。让我们把日期串行日期和轮数小时时间测量。

WeatherData。日期= datenum(WeatherData.Date,“名称”);WeatherData。日期= [];WeatherData。小时= floor(WeatherData.Time/100);

因为有多种天气每小时测量,你可以平均小时使用的数据varfun

ByHourWeather = varfun (@mean WeatherData,“数据源”,{“DryBulbCelsius”,“DewPointCelsius”,“风速”},“GroupingVariables”,{“日期”,“小时”});

现在,您可以合并两个表使用加入使用关键变量匹配的行(列)两个表。加入保持所有的变量从第一个输入表和附加相应的变量从第二个输入表。的表加入创建将使用的关键变量值作为行名称。在这种情况下,这意味着行名称将代表日期和时间数据。

AllData =加入(ByHour ByHourWeather,“钥匙”,{“日期”,“小时”});

策划最终表的数据

现在阴谋的最后数据集了解天气对航班延误的影响。

AllData。TDIFF =abs (AllData。mean_DewPointCelsius - AllData.mean_DryBulbCelsius);散射(AllData。TDIFF AllData.mean_DEP_DELAY,[],AllData.mean_DEP_DELAY“填充”);包含(“abs(露点温度)”)ylabel (的平均延迟离开)
scatter3 (AllData.HOUR AllData.TDIFF AllData.mean_DEP_DELAY,[],AllData.mean_DEP_DELAY“填充”);包含(小时的飞行的)ylabel (“abs(露点温度)”)zlabel (的平均延迟离开)

定性看起来有一个温度接近露点(大降水的变化)的影响出发的时间。还有其他因素在起作用,但这是很高兴知道我们的直觉(航班当天晚些时候,当它是寒冷和下雪可能会有更大的机会被推迟)似乎处理数据。

你的想法呢?

你能看到你自己用表和分类数组吗?让我们知道你的想法,或者如果你有任何问题在你的评论中在这里




发表与MATLAB®R2013b


评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。