主要内容

使用高阵列分析MATLAB中的大数据

此示例显示如何使用高阵列在Matlab®中使用大数据。您可以使用高阵列对不同类型的数据进行各种计算,这些数据不适合内存。这些包括基本计算,以及统计和机器学习工具箱™中的机器学习算法。

此示例在单个计算机上的小数据子集上操作,然后缩放以分析所有数据集。但是,这种分析技术可以进一步扩展到更大的数据集上,它们不能读入存储器,或者在Apache Spark™等系统上工作。

高大阵列简介

高数组和高表用于处理具有任意行数的内存不足数据。不用编写专门的代码来考虑数据的巨大大小,高数组和表让您以类似于内存中的MATLAB®数组的方式处理大数据集。区别在于高的在您请求执行计算之前,阵列通常保持未评估。

该延迟评估使MATLAB能够在可能的情况下将排队的计算组合,并通过数据来获取最小次数。由于通过数据的传递数量大量影响执行时间,因此建议您仅在必要时请求输出。

为文件集合创建数据存储

创建数据存储允许您访问数据集合。数据存储可能会在大量的数据中处理任意大量数据,并且数据甚至可以在多个文件夹中跨多个文件传播。您可以为大多数类型的文件创建数据存储,包括表格文本文件的集合(此处演示),电子表格,图像,SQL数据库(必需的数据库工具箱™),Hadoop®序列文件等。

创建一个数据存储区. csv包含航空数据的文件。对待'na'值缺失如此tabulartextdatastore.用它们取代它们值。属性的分类数据类型,并选择感兴趣的变量起源桌子变量。预览内容。

ds = tabulartextdataStore('airlinesmall.csv');ds.treatasmissing ='na';ds.selectedvariablenames = {'年''月''arrdelay''depdelay''起源''ide'};ds.selectedFormats(5:6)= {'%C''%C'};=之前预览(ds)
pre =8×6表一年arrdelay depdelay orth __________________________________________________JC 1987 10 8 1 SJC BUR 1987 10 21 20 San SMF 1987 10 13 12 Bur SJC 1987 10 4 -1 SMF LAX 1987 10 59 63 LAX SJC 198710 3 -2 San SFO 1987 10 11 -1 Sea Lax

创建高数组

高阵列类似于内存MATLAB阵列,除了它们可以有任何数量的行。高阵列可以包含数字,逻辑,日期时间,持续时间,日历,分类或字符串的数据。此外,您可以将任何内存数组转换为高大的数组。(内存阵列一种必须是支持的数据类型之一。)万博1manbetx

高数组的底层类基于支持它的数据存储的类型。例如,如果数据存储DS.包含表格数据,然后高(DS)返回包含数据的高表。

tt =高(ds)
TT = MX6高表年份升级Arrdelay depdelay Origin est______________ __________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________????????? ? ? ? ? ? ? ? ? : : : : : : : : : : : :

该显示显示了基础数据类型,并包括前几行数据。表的大小显示为“Mx6”,表示MATLAB还不知道有多少行数据。

在高数组上执行计算

您可以以类似的方式使用高阵列和高表,以与内存MATLAB阵列和表一起使用。

高大阵列的一个重要方面是,在您与他们合作时,MATLAB不会立即执行大多数操作。这些操作似乎快速执行,因为在专门请求输出之前延迟了实际计算。这种延迟的评估很重要,因为即使是一个简单的命令尺寸(x)在一个高大的阵列上执行,十亿行不是快速计算。

当您使用高阵列时,MATLAB跟踪要执行的所有操作,并优化通过数据的传递数量。因此,使用未评估的高阵列和仅当您需要时,它是正常的。MATLAB不知道未评估的高阵列的内容或大小,直到您请求阵列被评估和显示。

计算平均出发延迟。

mDep =意味着(tt。DepDelay,'omitnan'
mdep =高大的双倍?

收集结果进入工作区

延迟求值的好处是,当使用MATLAB执行计算时,通常可以将操作组合成通过数据的次数最小化的方式。因此,即使您执行许多操作,MATLAB也只在绝对必要时对数据进行额外的传递。

收集功能力量评估所有排队的操作,并将结果输出带回内存。自从收集返回整个结果,你应该确保结果将适合内存。例如,使用收集在高数组上,它是一个函数减少高数组的大小的结果,例如意思,等等。

采用收集计算平均出发延迟并将答案带入内存中。此计算需要单一通过数据,但其他计算可能需要多次通过数据。MATLAB确定计算的最佳数量,并在命令行中显示此信息。

mdep =聚集(mdep)
using the Local MATLAB Session: - Pass 1 of 2: Completed in 0.82 sec - Pass 2 of 2: Completed in 0.74 sec
mdep = 8.1860.

选择高数组的子集

您可以通过下标或索引从高数组中提取值。您可以从顶部或底部开始索引数组,或者使用逻辑索引。的函数尾巴是索引的有用替代方案,使您能够探索高阵列的第一个和最后一部分。同时收集两个变量,以避免额外通过数据。

h =头(tt);tl =尾部(tt);[H,TL] =聚集(H,TL)
using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.72 sec
h =8×6表一年arrdelay depdelay orth __________________________________________________JC 1987 10 8 1 SJC BUR 1987 10 21 20 San SMF 1987 10 13 12 Bur SJC 1987 10 4 -1 SMF LAX 1987 10 59 63 LAX SJC 198710 3 -2 San SFO 1987 10 11 -1 Sea Lax
tl =8×6表年份Arrdelay depdelay Origin _________ ________________________t24 1 DAB ATL 2008 12 -8 -1 ATL TPA 2008 12 -8 -4 ATL CLT 2008 12 15 -2 BOS LGA 2008 12  -15 -1 SFO ATL 2008 12 -12 1 DAB ATL 2008 12 -1 11 ATL IAD

采用在缩放到完整数据集之前,从数据的数据中选择10,000行的子集。

ttsubset = head(tt,10000);

按条件选择数据

您可以在高数组上使用典型的逻辑操作,这对于使用逻辑索引选择相关数据或删除离群值非常有用。逻辑表达式创建一个高的逻辑向量,然后用它来下标,标识条件为真的行。

通过比较分类变量的元素,仅选择距离波士顿的航班起源价值'bos'

idx =(ttsubset.origin =='bos');bosflights = ttSubset (idx:)
bosflights = 207 x6高表年月ArrDelay DepDelay起源服务台  ____ _____ ________ ________ ______ ____ 1987年10 8 0 BOS LGA 1987 -13 1 BOS LGA 1987 10 1987年12 11日机场BOS BWI 10 3 0 BOS英文文宣写作研习营1987 10 5 0 BOS奥德1987 10 1987年31日19日BOS PHL 10 3 0 BOS蜡烛1987 11 5 5 BOS STL  : : : : : : : : : : : :

您可以使用相同的索引技术从高阵列中删除具有缺失数据或NAN值的行。

IDX = ANY(ISMISSING(TTSUBSET),2);ttsubset(idx,:) = [];

确定最大延迟

由于大数据的性质,使用传统的方法对所有数据进行排序,如种类要么排队效率低下。然而topkrows.高大阵列的功能返回顶部K.排序顺序排列。

计算十大最严重的起飞延误。

biggestDelays = topkrows (ttSubset 10'depdelay');biggestDelays =收集(biggestDelays)
使用当地MATLAB会话评估高表达:评估完成为0.066秒
biggestdelays =10×6表一年arrdelay depdelay起源_________ ________ _________________________________________________________________________j2 785 447 MDT ORD 1988 12 397 425 SJU BWI 1987 12 339 360 DEN STL 1988 3 261 273 BWI PBI 1988 7 261 268 BWI PBI 1988 2257 253 ORD BTV 1988 3 236 240 EWR FLL 1989 2 263 227 BNA MOM 1989 6 224 225 DFW JAX

在高数组中可视化数据

在大数据集中绘制每个点是不可行的。因此,高阵列的可视化涉及使用采样或排放来减少数据点数。

用直方图可视化每年的飞行次数。可视化函数传递数据并在您调用它们时立即评估解决方案,所以收集不需要。

直方图(ttSubset。一年,“BinMethod”“整数”
使用本地MATLAB会话评估高表达:评估在0.42秒内完成
Xlabel('年')ylabel(航班的数量) 标题('航班数量,1987年 -  1989年'

图中包含一个坐标轴。标题为“航班数量,1987 - 1989年”的坐标轴包含一个直方图类型的对象。

缩放到整个数据集

而不是使用返回的较小数据,您可以通过使用的结果对整个数据集执行计算高(DS)

tt =高(DS);IDX =任何(ISMISSING(TT),2);tt(idx,:) = [];mndelay =平均值(tt.depdelay,'omitnan');biggestDelays = topkrows (tt 10'depdelay');[Mndelay,Biggestdelays] =聚集(Mndelay,Biggestdelays)
使用本地MATLAB会话评估高表达: - 通过第1章:在0.46秒内完成 -  PASS 2的第2条:在0.81秒评估中完成,在1.4秒内完成
Mndelay = 8.1310.
biggestdelays =10×6表年月ArrDelay DepDelay产地目的地____ _____ ________ ________ ______ ____ 1991年3 -8 1438 MCO BWI 1998年12 -12 1433 CVG ORF 1995年11 1014 1014 HNL LAX 2007年4 914 924 JFK DTW 2001年4 887 884 MCO DTW 2008年7 845 855 CMH ORD1988 3 772 785 ORD LEX 2008 4 710 713 EWR RDU 1998 10 679 673 MCI DFW 2006 6 603 626 ABQ PHX
直方图(tt.year,“BinMethod”“整数”
使用本地MATLAB会话评估高表达: - 通过1的第1条:完成在1.2秒 - 通过2的2:在0.6秒评估中完成2.1秒
Xlabel('年')ylabel(航班的数量) 标题('一年的航班数量,1987  -  2008'

图中包含一个坐标轴。标题为Number of Flights by Year, 1987 - 2008的坐标轴包含一个直方图类型的对象。

采用histogram2将整个数据集按月进一步分解飞行次数。因为箱子提前了解,指定箱边缘,以避免额外通过数据。

年份= 1986.5:2008.5;月份= 0.5:12.5;TICTOMG2(TT.YEAR,TT.MONTH,年度,月份,'displaystyle''瓦'
using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.1 sec
colorbar包含('年')ylabel('月') 标题('航空公司航班逐年和年,1987  -  2008'

图中包含一个坐标轴。1987  -  2008年,带有标题航空公司航班的轴,1987年 -  2008年包含了直方图2的对象。

高数组的数据分析和机器学习

使用Statistics和machine learning Toolbox™中的函数,您可以对高数组执行更复杂的统计分析,包括计算预测分析和执行机器学习。

有关更多信息,请参阅高阵列的大数据分析(统计和机器学习工具箱)

缩放到大数据系统

MATLAB高阵列的一个关键能力是与大数据平台的连接,例如计算群集和Apache Spark™。

此示例仅划伤了高数据的高阵列可能的表面。看扩展高数组与其他产品s manbetx 845有关使用的更多信息:

  • 统计和机器学习工具箱™

  • Database Toolbox™

  • 并行计算工具箱™

  • MATLAB®PartantServer™

  • Matlab Compiler™

也可以看看

相关话题