主要内容

集团执行计算的表

你可以在组内的数据执行计算表变量通过使用这些功能:

  • groupsummary,groupcounts,groupfilter,grouptransform

  • varfunrowfun

  • findgroupssplitapply

在大多数情况下,groupsummary是分组计算推荐的功能。简单的使用和返回一个表标签描述的结果。列出的其他功能,然而,还提供功能,在某些情况下是非常有用的。

从文件创建表

示例电子表格outages.csv包含数据值,代表美国电力公司停电。从文件创建一个表,使用readtable函数。从文件读取文本数据到表变量字符串数组,指定TextType名称-值参数为“字符串”

中断= readtable (“outages.csv”,“TextType”,“字符串”)
中断=1468×6表地区OutageTime损失客户RestorationTime引起___________ ___________ ______ __________ ___________ _________________,“西南”2002-02-01 12:18 458.98 - 1.8202 e + 06 2002-02-01 16:50“暴风雪”“东南”2003-01-23 00:49 530.14 - 2.1204 e + 05 NaT“暴风雪”“东南”2003-02-07)21:15 289.4 - 1.4294 e + 05 2003-02-07 08:14“暴风雪”“西方”2004-04-06 05:44 434.81 - 3.4037 e + 05 2004-04-06 06:10“设备故障”“中西部”2002-03-16 06:18 186.44 - 2.1275 e + 05 2002-03-16 23:23“暴风”“西方”2003-06-18 02:49 0 0 2003-06-18 10:54“攻击”“西方”2004-06-20 39 231.29南2004-06-20 19:16“设备故障”“西方”2002-06-06 19:28 311.86南2002-06-06 00:51“设备故障”“东北”2003-07-16十六23 239.93 49434 2003-07-17 01:12“火”“中西部”2004-09-27 11:09 286.72 66104 2004-09-27 16:37“设备故障”“东南”2004-09-05 17:48 73.387 36073 2004-09-05 20:46“设备故障”“西方”2004-05-21 21:45 159.99南2004-05-21 04:23“设备故障”“东南”2002-09-01 95.917十八22 36759 2002-09-01 19:12“暴风”“东南”2003-09-27 07:32南3.5517 e + 05 2003-09-27 07:02“暴风”“西方”2003-11-12 06:12 254.09 - 9.2429 e + 05 2003-11-12 02:04“暴风雪”“东北”2004-09-18 05:54 0 0 NaT⋮“设备故障”

创建分类为分组变量计算

表变量可以包含任意数据类型。但从概念上讲,你也可以认为表有两个通用类型的变量:数据变量分组变量

  • 数据变量使您能够描述单个事件或观察。例如,在中断你能想到的OutageTime,损失,客户,RestorationTime变量数据变量。

  • 分组变量允许您在一起事件或观测组织有一些共同点。例如,在中断你能想到的地区导致变量作为分组变量。你可以组织在一起,分析停电,发生在同一地区或共享相同的原因。

通常,分组变量包含指定一组离散的固定值类别。类别可以属于指定组数据值。的分类数据类型可以是一个方便的类型与种类。

转换地区导致分类变量,使用convertvars函数。

停机期间= convertvars(停机,“地区”,“原因”),“分类”)
中断=1468×6表___________ ______ __________地区OutageTime损失客户RestorationTime引起____ ___________售予西南2002-02-01 12:18 458.98 - 1.8202 e + 06 2002-02-01 16:50暴风雪东南2003-01-23 00:49 530.14 - 2.1204 e + 05 NaT暴风雪东南2003-02-07)21:15 289.4 - 1.4294 e + 05 2003-02-07 08:14暴风雪西2004-04-06 05:44 434.81 - 3.4037 e + 05 2004-04-06 06:10设备故障中西部2002-03-16 06:18 186.44 - 2.1275 e + 05 2002-03-16 23:23暴风西2003-06-18 02:49 0 0 2003-06-18 10:54攻击西方2003-06-18 39 231.29南2004-06-20 19:16设备故障西2004-06-20 19:28 311.86南2002-06-07 00:51设备故障东北2002-06-07十六23 239.93 49434 2003-07-17 01:12火中西部2004-09-27 11:09 286.72 66104 2004-09-27 16:37设备故障东南2004-09-27 17:48 73.387 36073 2004-09-27 20:46设备故障西2004-05-21 21:45 159.99南2004-05-21 04:23设备故障东南2002-09-01 95.917十八22 36759 2002-09-01 19:12暴风东南2003-09-27 07:32南3.5517 e + 05 2003-09-27 07:02暴风西2003-11-12 06:12 254.09 - 9.2429 e + 05 2003-11-12 02:04东北冬季风暴2004-09-18 05:54 0 0⋮NaT设备故障

计算统计组表

你可以计算表中统计的组使用等功能groupsummary,varfun,splitapply。这些功能使您能够指定组内的数据表,对每个小组进行计算的方法。你可以将结果存储在另一个表或数组输出。

例如,确定平均功率损失和客户的影响在每个地区由于中断中断表。推荐的方式来执行这个计算是使用groupsummary函数。指定地区作为分组变量,的意思是方法适用于每组,损失客户作为数据变量。输出列表区域(在地区变量),每地区(在断电GroupCount变量),平均功率损失和客户在每个地区(的影响mean_Lossmean_Customers变量,分别)。

meanLossByRegion = groupsummary(中断、“地区”,“的意思是”,(“损失”,“顾客”])
meanLossByRegion =5×4表中西部地区GroupCount mean_Loss mean_Customers _____ _____ _____ * * * 142 1137.7 - 2.4015 e + 05年东北557 551.65 - 1.4917 e + 05年东南389 495.35 - 1.6776 e + 05年西南26日493.88 - 2.6975 e + 05西354 433.37 - 1.5201 e + 05

groupsummary函数是推荐的几个原因:

  • 您可以指定许多常见方法(如马克斯,最小值,的意思是)的名字,不使用函数处理。

  • 您可以指定一个调用多个方法。

  • 年代,NaT年代,和其他数据中的缺失值自动变量省略了当计算结果。

第三点原因mean_Lossmean_Customers变量没有年代的meanLossByRegion输出表。

指定在一个调用多个方法groupsummary在一个数组,列出它们。例如,计算最大,意思是,通过地区和最小功率损耗。

lossStatsByRegion = groupsummary(中断、“地区”,(“马克斯”,“的意思是”,“最小值”),“损失”)
lossStatsByRegion =5×5表地区GroupCount max_Loss mean_Loss min_Loss _____ __________ ________ ________ ____中西部东南东北142 23141 1137.7 0 557 23418 551.65 0 0西南26 2796 389 8767.3 495.35 433.37 493.88 0西354 16659 0

每个地区的最低损失为零。分析只有那些导致的停机损失大于零,排除的行中断的损失为零。首先创建一个向量的逻辑索引值逻辑1(真正的)行outages.Loss大于零。然后指数为中断返回一个表只包括那些行。计算最大,意思是,通过地区和最小功率损耗。

nonZeroLossIndices =中断。损失> 0;nonZeroLossOutages =中断(nonZeroLossIndices:);nonZeroLossStats = groupsummary (nonZeroLossOutages,“地区”,(“马克斯”,“的意思是”,“最小值”),“损失”)
nonZeroLossStats =5×5表地区GroupCount max_Loss mean_Loss min_Loss _____ __________ ________ ________ ____中西部东南东北81 23141 1264.1 8.9214 180 23418 827.47 0.74042 8767.3 546.16 2.3096 234西南23以西2796 515.35 - 27.882 549.76 - 0.71847 175 16659

使用替代功能分组计算

有替代函数,进行分组计算表。而groupsummary建议,选择函数在某些情况下也很有用。

  • varfun函数对变量执行计算。它类似于groupsummary,但varfun可以进行分组和未分组的计算。

  • rowfun行函数执行计算。您可以指定方法需要多个输入,或者返回多个输出。

  • findgroupssplitapply函数可以执行计算变量或行。您可以指定方法需要多个输入,或者返回多个输出。的输出splitapply是数组,而不是表。

调用varfun在变量

例如,计算最大的功率损耗的地区使用varfun。输出表也有类似的格式的输出groupsummary

maxLossByVarfun = varfun (@max,中断,“数据源”,“损失”,“GroupingVariables”,“地区”)
maxLossByVarfun =5×3表中西部地区GroupCount max_Loss _____ __________ ________东南东北142 23141 557 23418 389 8767.3 2796年西南26日西354 16659

然而,当你使用有显著差异varfun:

  • 你必须始终指定方法通过使用一个函数处理。

  • 您可以指定只有一个方法。

  • 您可以执行分组未分组的计算。

  • 年代,NaT年代,和其他数据中的缺失值自动变量包括当计算结果。

最后一点的行为是一个重要的区别groupsummaryvarfun。例如,损失变量年代,如果你使用varfun计算的平均损失,那么在默认情况下结果年代,不同于默认值groupsummary结果。

meanLossByVarfun = varfun (@mean,中断,“数据源”,“损失”,“GroupingVariables”,“地区”)
meanLossByVarfun =5×3表东北地区GroupCount mean_Loss _____ _____ _____中西部142南东南557南西南389南26 354南南西

当使用省略缺失值varfun,用一个匿名函数的方法,这样你可以指定“omitnan”选择。

omitnanMean = @ (x)(平均(x,“omitnan”));meanLossOmitNaNs = varfun (omitnanMean,中断,“数据源”,“损失”,“GroupingVariables”,“地区”)
meanLossOmitNaNs =5×3表中西部地区GroupCount Fun_Loss _____ __________ ________东南东北142 1137.7 557 551.65 389 495.35 354年西南26日493.88西433.37

另一个点是指不同但相关的用例中,这是对表执行未归类计算变量。方法应用于所有表变量没有分组,使用varfun。例如,计算最大的功率损耗和客户影响整个表的最大数量。

maxValuesInOutages = varfun (@max,中断,“数据源”,(“损失”,“顾客”])
maxValuesInOutages =1×2表23418 5.9689 e + 06 max_Loss max_Customers ________ _________________

调用rowfun对行

rowfun函数方法适用于表的行。在哪里varfun一种方法适用于每个指定的变量,一个接一个地rowfun将所有指定表变量作为输入参数的方法和应用方法。

例如,计算平均损失/客户在每一个地区。要执行此计算,首先指定一个函数,它有两个输入参数(损失客户),把损失客户的数量,然后返回值。

medianLossCustFcn = @(损失、客户)(中位数(损失。/客户,“omitnan”));

然后调用rowfun。您可以指定一个有意义的输出变量名称使用OutputVariablesNames名称-值参数。

meanLossPerCustomer = rowfun (medianLossCustFcn,中断,“数据源”,(“损失”,“顾客”),“GroupingVariables”,“地区”,“OutputVariableNames”,“MedianLossPerCustomer”)
meanLossPerCustomer =5×3表中西部地区GroupCount MedianLossPerCustomer _____ __________ _____________________东南东北142 0.0042139 557 0.0028512 389 0.0032057 354年西南26日0.0026353西0.002527

您还可以使用rowfun当方法返回多个输出。例如,使用界限计算最小和最大损失/地区在一个调用rowfun。的界限函数返回两个输出参数。

boundsLossPerRegion = rowfun (@bounds,中断,“数据源”,“损失”,“GroupingVariables”,“地区”,“OutputVariableNames”,(“MinLoss”,“MaxLoss”])
boundsLossPerRegion =5×4表中西部地区GroupCount MinLoss __________ MaxLoss ____ ____ ____东南东北142 0 23141 557 23418 0 389 0 8767.3西南26 2796西354 0 16659

调用findgroupssplitapply在变量或行

您可以使用findgroups函数定义组,然后使用splitapply每组应用方法。的findgroups函数返回一个向量组的数字识别哪一组一行数据的一部分。的splitapply函数返回一个数字阵列输出的方法应用到组。

例如,计算最大的功率损耗的地区使用findgroupssplitapply

G = findgroups (outages.Region)
G =1468×14 3 3 1 5 5 5 2 1⋮
maxLossArray = splitapply (@max outages.Loss, G)
maxLossArray =5×1104×2.3141 2.3418 0.8767 0.2796 1.6659

就像rowfun,splitapply使您可以指定返回多个输出的方法。计算最小值和最大值,使用界限

[minLossArray, maxLossArray] = splitapply (@bounds outages.Loss, G)
minLossArray =5×10 0 0 0 0
maxLossArray =5×1104×2.3141 2.3418 0.8767 0.2796 1.6659

您还可以指定需要多个输入的方法。例如,使用medianLossCustFcn函数来计算平均每客户损失。但这一次,还在每个地区每个客户平均损失一个数组。

medianLossCustFcn = @(损失、客户)(中位数(损失。/客户,“omitnan”));medianLossArray = splitapply (medianLossCustFcn outages.Loss outages.Customers, G)
medianLossArray =5×10.0042 0.0029 0.0032 0.0026 0.0025

的数字输出findgroupssplitapply不带注释的喜欢的输出吗groupsummary。然而,返回数值输出可以有其他好处:

  • 您可以使用的输出findgroups在多个调用splitapply。您可能想要使用findgroupssplitapply使许多分组时效率计算的一张大桌子上。

  • 你可以用不同的格式创建一个结果表通过构建它的输出findgroupssplitapply

  • 您可以调用方法返回多个输出。

  • 你可以附加的输出splitapply现有的表。

添加新的计算现有表

如果你已经有一个表的结果,您可以添加另一个表的计算结果。例如,计算每个区域的平均停电持续时间小时。附加的平均持续时间作为一个新的变量lossStatsByRegion表。

减去停机时间恢复次返回停电的时间。把这些时间小时使用小时函数。

D =中断。RestorationTime - outages.OutageTime;H =小时(D)
H =1468×1105×0.0015南0.0023 0.0000 0.0007 0.0001 0.0000 0.0001 0.0001 0.0001⋮

下一个使用的意思是计算平均持续时间。停机时间有一些值,因为中断和恢复时间有一些缺失值。和之前一样,包装一个匿名函数指定的方法“omitnan”选择。

omitnanMean = @ (x)(平均(x,“omitnan”));

计算平均停电持续时间的地区。将它添加到lossStatsByRegion作为一个新表变量。

G = findgroups (outages.Region);lossStatsByRegion。的意思是_Outage = splitapply(omitnanMean,H,G)
lossStatsByRegion =5×6表地区GroupCount max_Loss mean_Loss min_Loss mean_Outage _____ __________ ________ ________ ____ ___________中西部东北142 23141 0 1137.7 819.25 581.04 551.65 557 23418 0东南389 8767.3 495.35 59.519 40.83 2796年西南26日493.88 0西354 673.45 16659 433.37 0

集团指定为垃圾箱

还有另一种方法来指定组。而不是指定类别作为分组变量,惟一的值可以本值在一个变量值连续分布。然后您可以使用这些箱子指定组。

例如,本停电。数的数量每年断电,使用groupcounts函数。

outagesByYear = groupcounts(中断、“OutageTime”,“年”)
outagesByYear =13×3表year_OutageTime GroupCount ____ %售予__________ 2002 36 2.4523 2003 62 4.2234 2004 5.0409 79 5.3815 2005 74 2006 108 7.3569 2007 7.8338 91 6.1989 2008 115 2009 142 9.673 2010 12.943 177 12.057 2011 190 2012 207 0.06812 14.101 12.67 2013 186 2014 1

可视化的数量每年中断。数量每年增加随着时间在这个数据集。

栏(outagesByYear.year_OutageTime outagesByYear.GroupCount)

图包含一个坐标轴对象。坐标轴对象包含一个对象类型的酒吧。

您可以使用groupsummary与箱组。例如,计算中间值和功率损失影响的客户。

medianLossesByYear = groupsummary(中断、“OutageTime”,“年”,“中值”,(“顾客”,“损失”])
medianLossesByYear =13×4表year_OutageTime GroupCount median_Customers median_Loss售予__________ ___________ ___________ 2002 36 1.7101 e + 05年277.02 2003 295.6 62 1.0204 e + 05年2004 79 1.0108 e + 05年252.44 210.08 265.16 2005 74 91536 2006 108 86020 2007 91 1.0529 e + 05年232.12 83.491 205.77 2008 115 86356 2009 142 63119 2010 177 66212 2011 190 48200 155.76 75.286 69.596 78.289 2012 207 66994 2013 186 55669 2014 1南南

可视化客户的平均数量每年受中断影响。尽管中断的数量随着时间的增加,影响客户的平均次数减少。

情节(medianLossesByYear“year_OutageTime”,“median_Customers”)

图包含一个坐标轴对象。坐标轴对象包含y e r _ O t u g e t i m e ylabel m e d i n _ C u s t O m e r s包含一个类型的对象。

返回的行中断多年来有超过75中断。指数为中断那些年,使用groupfilter函数。发现箱子有超过75行,指定一个匿名函数,它返回一个逻辑1如果在本的行数大于75。

outages75 = groupfilter(中断、“OutageTime”,“年”@ (x)元素个数(x) > 75)
outages75 =1295×7表地区OutageTime损失客户RestorationTime引起year_OutageTime _____ ___________ ______ __________ ___________售予售予西2004-04-06 05:44 434.81 - 3.4037 e + 05 2004-04-06 06:10设备故障2004西2004-06-20 39 231.29南2004-06-20 19:16设备故障2004中西部2004-09-27 11:09 286.72 66104 2004-09-27 16:37设备故障2004东南2004-09-05 17:48 73.387 36073 2004-09-05 20:46设备故障2004西2004-05-21 21:45 159.99南2004-05-21 04:23设备故障2004东北2004-09-18 05:54 0 0 NaT设备故障2004东北2004-11-13 42南1.4227 e + 05 2004-11-19 02:31冬季风暴2004东南2004-12-06 23:18南以西37136 2004 03:21冬季风暴2004-12-14 2004-12-21 18:50 112.05 - 7.985 e + 05 2004-12-21 03:46冬季风暴2004东北2004-12-26 22:18 255.45 - 1.0444 e + 05 2004十四11冬季风暴2004-12-27西南2004-06-06 05:27 559.41 - 2.19 e + 05 2004-06-06 05:55设备故障2004中西部2004-07-02 09:16 15128 2.0104 e + 05年西南2004十四11雷雨2004-07-06 2004-07-18 40 340.35 - 1.4963 e + 05 2004-07-18 23:34暴风2004东北2004-09-16 19:42东南4718南NaT未知2004 2004-09-20 37 8767.3 - 2.2249 e + 06 2004-09-20 2004年暴风06:00时原因中西部2004-11-09 18:44 470.83 67587 2004-11-09 21:24 2004⋮风

总结和建议的行为

使用这些技巧和建议来决定使用哪个函数来执行组计算。

  • 指定组使用分组变量或垃圾箱创建的数字,datetime,或持续时间变量。

  • 通过小组执行计算数据表或时间表,使用推荐的功能groupsummary。相关的功能groupcounts,groupfilter,grouptransform也有用。

  • 考虑使用varfun(如自动包括缺失值年代和NaT当应用组数据的方法。同时,varfun可以进行分组和未分组的计算。

  • 考虑使用findgroupssplitapply连续效率当你做出许多分组计算的一张大桌子上。

  • 考虑使用findgroupssplitapply新数组附加到一个现有表的结果。

  • 使用方法,执行计算返回多个输出,如界限,使用rowfunsplitapply

  • 使用一个方法来执行计算沿行,需要多个输入参数,使用rowfunsplitapply

另请参阅

||||||||||||||

相关的话题