主要内容

利用高数组在MATLAB中分析大数据

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

本示例在一台计算机上操作一小部分数据,然后扩展到分析所有数据集。然而,这种分析技术可以进一步扩展,以处理大到无法读取到内存的数据集,或者处理Apache Spark™这样的系统。

高数组介绍

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

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

为文件集合创建数据存储

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

创建数据存储. csv包含航空公司数据的文件。Treat“不”值丢失,以便表格数据存储将它们替换为值。属性的分类数据类型,并选择感兴趣的变量起源桌子变量。预览的内容。

ds = tabularTextDatastore (“airlinesmall.csv”); D.TreatAsMissing=“不”;ds。SelectedVariableNames = {“年”“月”“延迟”“DepDelay”“起源”“目的地”}; ds.选定格式(5:6)={“%C”“%C”};=之前预览(ds)
前=8×6表年月ArrDelay DepDelay起源服务台  ____ _____ ________ ________ ______ ____ 1987年10 8 12松懈SJC 1987 10 8 SJC钻1987 21 1987圣SMF 10 13 12 SJC 1987钻10 4 1 SMF松懈59 1987 63松懈SJC 1987 10 3 1987圣SFO 10 11松懈

创建高数组

高数组与内存中的MATLAB数组类似,只是它们可以有任意数量的行。高数组可以包含数字、逻辑、日期时间、持续时间、日历持续时间、分类或字符串数据。此外,还可以将内存中的任何阵列转换为高阵列。(在内存阵列中)一个必须是受支持的数据类型之一。)金宝app

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

tt =高(ds)
tt = Mx6高表年月ArrDelay DepDelay起源服务台  ____ _____ ________ ________ ______ ____ ?????????? ? ? ? ? ? ? ? ? : : : : : : : : : : : :

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

在高数组上执行计算

您可以使用与使用内存中的MATLAB数组和表类似的方式来使用高数组和高表。

高数组的一个重要方面是,当您使用它们时,MATLAB不会立即执行大多数操作。这些操作看起来执行得很快,因为实际的计算被延迟到您特别请求输出时。这种延迟计算很重要,因为即使是像这样的简单命令大小(X)在一个有十亿行的高数组上执行不是一个快速的计算。

当您使用塔式阵列时,MATLAB会跟踪所有要执行的操作,并优化通过数据的次数。因此,使用未评估的塔式阵列并仅在需要时请求输出是正常的。在您请求阵列b之前,MATLAB不知道未评估的塔式阵列的内容或大小e评估并显示。

计算平均起飞延误。

mDep =意味着(tt。DepDelay,“omitnan”
高双?

将结果收集到工作区中

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

收集函数强制计算所有排队操作,并将结果输出返回到内存中。自收集返回整个结果,你应该确保结果将适合内存。例如,使用收集在高数组上,它是一个函数减少高数组的大小的结果,例如总和最小值意思是,等等。

使用收集计算平均起飞延迟,并把答案记在记忆里。这种计算需要一次遍历数据,但其他计算可能需要多次遍历数据。MATLAB确定计算的最佳通道数,并在命令行中显示该信息。

mDep =收集(mDep)
使用本地MATLAB会话评估tall表达式:-第1次通过(共2次):在0.92秒内完成-第2次通过(共2次):在0.77秒内完成评估在2.2秒内完成
mDep=8.1860

选择高数组的子集

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

h=头部(tt);tl=尾部(tt);[h,tl]=聚集(h,tl)
使用本地MATLAB会话评估tall表达式:-通过1/1:在0.73秒内完成评估在0.91秒内完成
h =8×6表年月ArrDelay DepDelay起源服务台  ____ _____ ________ ________ ______ ____ 1987年10 8 12松懈SJC 1987 10 8 SJC钻1987 21 1987圣SMF 10 13 12 SJC 1987钻10 4 1 SMF松懈59 1987 63松懈SJC 1987 10 3 1987圣SFO 10 11松懈
tl =8×6表年-月ARRRDEPDLAY DEPDLAY Origin Dest(目的地)(目的地)(目的地)(目的地)(目的地)(目的地)(目的地)(目的地)目的地(目的地)目的地(目的地)目的地)目的地(目的地)目的地)目的地(目的地)目的地)目的地(目的地)目的地)目的地

使用在扩展到完整数据集之前,从数据中选择10,000行作为原型代码的子集。

ttSubset=人头(tt,10000);

按条件选择数据

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

通过比较分类变量的元素,仅选择从波士顿起飞的航班起源价值“BOS”

idx = (ttSubset。起源= =“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  : : : : : : : : : : : :

您可以使用相同的索引技术从tall数组中删除缺少数据或NaN值的行。

idx=any(ismissing(ttSubset),2);ttSubset(idx,:)=[];

确定最大延迟

由于大数据的性质,使用传统的方法对所有数据进行排序,如分类索特罗斯是低效的。然而,托普克罗斯用于高数组的函数返回顶部k按排序顺序排列的行。

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

biggestDelays = topkrows (ttSubset 10“DepDelay”);biggestDelays =收集(biggestDelays)
使用本地MATLAB会话评估tall表达式:评估在0.093秒内完成
最大的延误=10×6表年月ArrDelay DepDelay起源服务台  ____ _____ ________ ________ ______ ____ 1988 3 772 785奥德LEX 1989 3 453 447联合化疗奥德1988 397 425机场SJU BWI 1987 1988 3 261 273 339 360窝STL PHL机场民国1988 7 261 268 BWI PBI 1988 1988 3 236 240 257 253奥德北京电视台英文文宣写作研习营算法1989 2 263 227 1989 6 224 225 DFW JAX BNA暴民

在高数组中可视化数据

在大数据集中绘制每个点是不可行的。由于这个原因,高数组的可视化涉及使用抽样或装箱来减少数据点的数量。

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

直方图(ttSubset。一年,“BinMethod”“整数”
使用本地MATLAB会话评估高表达式:评估在0.57秒完成
xlabel(“年”)伊拉贝尔(航班的数量)头衔(‘按年份划分的航班数量,1987-1989’

图中包含一个Axis对象。Axis对象的标题为1987-1989年间的航班数量,包含一个histogram类型的对象。

缩放到整个数据集

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

tt =高(ds);idx =任何(ismissing (tt), 2);tt (idx:) = [];mnDelay =意味着(tt。DepDelay,“omitnan”);biggestDelays = topkrows (tt 10“DepDelay”);[mnDelay, biggestDelays] =收集(mnDelay biggestDelays)
using the Local MATLAB Session: - Pass 1 of 2: Completed in 0.57 sec - Pass 2 of 2: Completed in 0.83 sec
mnDelay = 8.1310
最大的延误=10×6表年月ArrDelay DepDelay起源服务台  ____ _____ ________ ________ ______ ____ 1991 3 1998 1438机场MCO BWI 12 -12 1433总经理汇报ORF 1995 11 1014 1014 HNL松懈DTW 2001 4 887 884 2007 4 914 924肯尼迪MCO DTW奥德1988 3 772 785 2008 7 845 855他而言不啻奥德LEX 2008 4 710 713英文文宣写作研习营RDU 1998 679 673 MCI DFW 2006 6 603 626 ABQ PHX
直方图(tt.Year,“BinMethod”“整数”
使用本地MATLAB会话评估tall表达式:-通过2中的第1步:在1秒内完成-通过2中的第2步:在0.66秒内完成评估在2秒内完成
xlabel(“年”)伊拉贝尔(航班的数量)头衔(“1987 - 2008年按年划分的航班数”

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

使用histogram2将整个数据集按月进一步分解飞行次数。因为箱子一年,指定箱子边以避免对数据进行额外的传递。

year_edges = 1986.5:2008.5;month_edges = 0.5:12.5;histogram2 (tt.Year tt.Month、year_edges month_edges,“显示样式”“瓦”
using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.5 sec
colorbar包含(“年”)伊拉贝尔(“月”)头衔(‘1987-2008年按月份和年份划分的航空航班’

图中包含Axis对象。标题为1987-2008年航空公司航班的Axis对象包含histogram2类型的对象。

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

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

有关详细信息,请参阅用高数组分析大数据(统计学和机器学习工具箱)

扩展到大数据系统

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

此示例仅触及了大数据的高阵列可能存在的问题的表面。请参阅扩展高数组与其他产品下载188bet金宝搏有关使用的详细信息,请参阅:

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

  • 数据库工具箱™

  • 并行计算工具箱™

  • MATLAB®并行服务器™

  • MATLAB编译器™

另请参阅

相关话题