按组计算
说明
通过按组计算任务,您能够以交互方式对数据执行分组,并针对每个组计算摘要统计量、执行变换或应用过滤器。该任务会自动为您的实时脚本生成 MATLAB® 代码。
使用此任务,您可以:
在数组、表或时间表中定义数据组。
根据每个分组汇总、变换或过滤数据。
输出一个包含计算结果的新表或时间表。
打开任务
要将按组计算任务添加到 MATLAB 编辑器中的实时脚本,请执行以下操作:
在实时编辑器选项卡上,选择任务 > 按组计算。
在脚本的代码块中,键入相关关键字,例如
group
。从建议的命令自动填充项中选择按组计算。
示例
按组计算统计量
通过以交互方式对数据分组、指定要运算的变量以及使用实时编辑器中的按组计算任务计算统计量来汇总数据。
使用示例文件 outages.csv
创建一个时间表。该文件包含六列表示电力公司停电信息的数据。将 Region
和 Cause
列向变量转换为分类数组并显示时间表。
outages = readtimetable("outages.csv");
outages.Region = categorical(outages.Region);
outages.Cause = categorical(outages.Cause)
outages=1468×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
____________________ _________ ______ __________ ____________________ _______________
01-Feb-2002 12:18:00 SouthWest 458.98 1.8202e+06 07-Feb-2002 16:50:00 winter storm
23-Jan-2003 00:49:00 SouthEast 530.14 2.1204e+05 NaT winter storm
07-Feb-2003 21:15:00 SouthEast 289.4 1.4294e+05 17-Feb-2003 08:14:00 winter storm
06-Apr-2004 05:44:00 West 434.81 3.4037e+05 06-Apr-2004 06:10:00 equipment fault
16-Mar-2002 06:18:00 MidWest 186.44 2.1275e+05 18-Mar-2002 23:23:00 severe storm
18-Jun-2003 02:49:00 West 0 0 18-Jun-2003 10:54:00 attack
20-Jun-2004 14:39:00 West 231.29 NaN 20-Jun-2004 19:16:00 equipment fault
06-Jun-2002 19:28:00 West 311.86 NaN 07-Jun-2002 00:51:00 equipment fault
16-Jul-2003 16:23:00 NorthEast 239.93 49434 17-Jul-2003 01:12:00 fire
27-Sep-2004 11:09:00 MidWest 286.72 66104 27-Sep-2004 16:37:00 equipment fault
05-Sep-2004 17:48:00 SouthEast 73.387 36073 05-Sep-2004 20:46:00 equipment fault
21-May-2004 21:45:00 West 159.99 NaN 22-May-2004 04:23:00 equipment fault
01-Sep-2002 18:22:00 SouthEast 95.917 36759 01-Sep-2002 19:12:00 severe storm
27-Sep-2003 07:32:00 SouthEast NaN 3.5517e+05 04-Oct-2003 07:02:00 severe storm
12-Nov-2003 06:12:00 West 254.09 9.2429e+05 17-Nov-2003 02:04:00 winter storm
18-Sep-2004 05:54:00 NorthEast 0 0 NaT equipment fault
⋮
在实时编辑器中打开按组计算任务。要按发生停电的五个区域对数据进行分组,请选择 outages
作为输入数据,并按 Region
变量的唯一值进行分组。然后,通过在计算数据字段中选择所有数值变量,对 Loss
和 Customers
变量执行计算。
按组计算任务可以针对组执行三种不同类型的计算。要汇总停电数据,请将计算类型设置为按组计算统计量。然后,要计算数值变量 Loss
和 Customers
的均值和最大值,请使用计算字段选择均值和最大值方法。
生成的时间表包含每个区域停电事件的分组观测值计数、平均电力损失、最大电力损失、平均受影响客户数量和最大受影响客户数量。
outageStats=5×6 table
Region GroupCount mean_Loss max_Loss mean_Customers max_Customers
_________ __________ _________ ________ ______________ _____________
MidWest 142 1137.7 23141 2.4015e+05 3.972e+06
NorthEast 557 551.65 23418 1.4917e+05 5.9689e+06
SouthEast 389 495.35 8767.3 1.6776e+05 2.2249e+06
SouthWest 26 493.88 2796 2.6975e+05 1.8202e+06
West 354 433.37 16659 1.5201e+05 4.26e+06
按组变换
通过在实时编辑器中使用按组计算任务以交互方式对数据进行分组、指定要对其执行运算的变量以及应用变换操作,改善数据的可解释性或外观。
使用示例文件 outages.csv
创建一个时间表。该文件包含六列表示电力公司停电信息的数据。将 Region
和 Cause
列向变量转换为分类数组并显示时间表。
outages = readtimetable("outages.csv");
outages.Region = categorical(outages.Region);
outages.Cause = categorical(outages.Cause)
outages=1468×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
____________________ _________ ______ __________ ____________________ _______________
01-Feb-2002 12:18:00 SouthWest 458.98 1.8202e+06 07-Feb-2002 16:50:00 winter storm
23-Jan-2003 00:49:00 SouthEast 530.14 2.1204e+05 NaT winter storm
07-Feb-2003 21:15:00 SouthEast 289.4 1.4294e+05 17-Feb-2003 08:14:00 winter storm
06-Apr-2004 05:44:00 West 434.81 3.4037e+05 06-Apr-2004 06:10:00 equipment fault
16-Mar-2002 06:18:00 MidWest 186.44 2.1275e+05 18-Mar-2002 23:23:00 severe storm
18-Jun-2003 02:49:00 West 0 0 18-Jun-2003 10:54:00 attack
20-Jun-2004 14:39:00 West 231.29 NaN 20-Jun-2004 19:16:00 equipment fault
06-Jun-2002 19:28:00 West 311.86 NaN 07-Jun-2002 00:51:00 equipment fault
16-Jul-2003 16:23:00 NorthEast 239.93 49434 17-Jul-2003 01:12:00 fire
27-Sep-2004 11:09:00 MidWest 286.72 66104 27-Sep-2004 16:37:00 equipment fault
05-Sep-2004 17:48:00 SouthEast 73.387 36073 05-Sep-2004 20:46:00 equipment fault
21-May-2004 21:45:00 West 159.99 NaN 22-May-2004 04:23:00 equipment fault
01-Sep-2002 18:22:00 SouthEast 95.917 36759 01-Sep-2002 19:12:00 severe storm
27-Sep-2003 07:32:00 SouthEast NaN 3.5517e+05 04-Oct-2003 07:02:00 severe storm
12-Nov-2003 06:12:00 West 254.09 9.2429e+05 17-Nov-2003 02:04:00 winter storm
18-Sep-2004 05:54:00 NorthEast 0 0 NaT equipment fault
⋮
在实时编辑器中打开按组计算任务。要按发生停电的十个原因对数据进行分组,请选择 outages
作为输入数据,并按 Cause
变量的唯一值进行分组。然后,将计算数据设置为 Loss
变量。
按组计算任务可以针对组执行三种不同类型的计算。要变换停电数据,请将计算类型设置为按组转换。然后,要填充缺失的功率损耗值,请将计算设置为用组均值填充缺失值方法。
生成的时间表包含停电数据,其中缺失的电力损失替换为出于相同原因停电的平均电力损失。
outageTransform=1468×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
____________________ _________ ______ __________ ____________________ _______________
01-Feb-2002 12:18:00 SouthWest 458.98 1.8202e+06 07-Feb-2002 16:50:00 winter storm
23-Jan-2003 00:49:00 SouthEast 530.14 2.1204e+05 NaT winter storm
07-Feb-2003 21:15:00 SouthEast 289.4 1.4294e+05 17-Feb-2003 08:14:00 winter storm
06-Apr-2004 05:44:00 West 434.81 3.4037e+05 06-Apr-2004 06:10:00 equipment fault
16-Mar-2002 06:18:00 MidWest 186.44 2.1275e+05 18-Mar-2002 23:23:00 severe storm
18-Jun-2003 02:49:00 West 0 0 18-Jun-2003 10:54:00 attack
20-Jun-2004 14:39:00 West 231.29 NaN 20-Jun-2004 19:16:00 equipment fault
06-Jun-2002 19:28:00 West 311.86 NaN 07-Jun-2002 00:51:00 equipment fault
16-Jul-2003 16:23:00 NorthEast 239.93 49434 17-Jul-2003 01:12:00 fire
27-Sep-2004 11:09:00 MidWest 286.72 66104 27-Sep-2004 16:37:00 equipment fault
05-Sep-2004 17:48:00 SouthEast 73.387 36073 05-Sep-2004 20:46:00 equipment fault
21-May-2004 21:45:00 West 159.99 NaN 22-May-2004 04:23:00 equipment fault
01-Sep-2002 18:22:00 SouthEast 95.917 36759 01-Sep-2002 19:12:00 severe storm
27-Sep-2003 07:32:00 SouthEast 697.41 3.5517e+05 04-Oct-2003 07:02:00 severe storm
12-Nov-2003 06:12:00 West 254.09 9.2429e+05 17-Nov-2003 02:04:00 winter storm
18-Sep-2004 05:54:00 NorthEast 0 0 NaT equipment fault
⋮
按组过滤
通过使用按组计算以交互方式对数据进行分组、指定要对其执行运算的变量以及应用组过滤器,关注数据集中的特定信息。
使用示例文件 outages.csv
创建一个时间表。该文件包含六列表示电力公司停电信息的数据。将 Region
和 Cause
列向变量转换为分类数组并显示时间表。
outages = readtimetable("outages.csv");
outages.Region = categorical(outages.Region);
outages.Cause = categorical(outages.Cause)
outages=1468×5 timetable
OutageTime Region Loss Customers RestorationTime Cause
____________________ _________ ______ __________ ____________________ _______________
01-Feb-2002 12:18:00 SouthWest 458.98 1.8202e+06 07-Feb-2002 16:50:00 winter storm
23-Jan-2003 00:49:00 SouthEast 530.14 2.1204e+05 NaT winter storm
07-Feb-2003 21:15:00 SouthEast 289.4 1.4294e+05 17-Feb-2003 08:14:00 winter storm
06-Apr-2004 05:44:00 West 434.81 3.4037e+05 06-Apr-2004 06:10:00 equipment fault
16-Mar-2002 06:18:00 MidWest 186.44 2.1275e+05 18-Mar-2002 23:23:00 severe storm
18-Jun-2003 02:49:00 West 0 0 18-Jun-2003 10:54:00 attack
20-Jun-2004 14:39:00 West 231.29 NaN 20-Jun-2004 19:16:00 equipment fault
06-Jun-2002 19:28:00 West 311.86 NaN 07-Jun-2002 00:51:00 equipment fault
16-Jul-2003 16:23:00 NorthEast 239.93 49434 17-Jul-2003 01:12:00 fire
27-Sep-2004 11:09:00 MidWest 286.72 66104 27-Sep-2004 16:37:00 equipment fault
05-Sep-2004 17:48:00 SouthEast 73.387 36073 05-Sep-2004 20:46:00 equipment fault
21-May-2004 21:45:00 West 159.99 NaN 22-May-2004 04:23:00 equipment fault
01-Sep-2002 18:22:00 SouthEast 95.917 36759 01-Sep-2002 19:12:00 severe storm
27-Sep-2003 07:32:00 SouthEast NaN 3.5517e+05 04-Oct-2003 07:02:00 severe storm
12-Nov-2003 06:12:00 West 254.09 9.2429e+05 17-Nov-2003 02:04:00 winter storm
18-Sep-2004 05:54:00 NorthEast 0 0 NaT equipment fault
⋮
在实时编辑器中打开按组计算任务。要按停电发生的年份和地区对数据进行分组,请使用分组依据按年份对 OutageTime
变量进行分 bin,并按唯一值对 Region
变量进行分组。然后,通过选择计算数据字段中的 Loss
变量来计算功率损耗。
按组计算任务可以针对组执行三种不同类型的计算。要过滤停电数据,请将计算类型设置为按组过滤。然后,将计算设置为一个新局部函数,并通过编写一个函数来自定义过滤器,该函数为要保留的离群数据提供 true 结果,并为要滤除的非离群数据提供 false 结果。
生成的时间表仅包含停电离群数据,其中电力损失超出该年份和该地区平均电力损失的三倍标准差。
outageFilter=159×6 timetable
OutageTime Region Loss Customers RestorationTime Cause year_OutageTime
____________________ _________ ______ __________ ____________________ _______________ _______________
06-Apr-2004 05:44:00 West 434.81 3.4037e+05 06-Apr-2004 06:10:00 equipment fault 2004
06-Jun-2002 19:28:00 West 311.86 NaN 07-Jun-2002 00:51:00 equipment fault 2002
08-Mar-2005 16:37:00 SouthEast 1339.2 4.3003e+05 10-Mar-2005 20:42:00 winter storm 2005
02-Jul-2004 09:16:00 MidWest 15128 2.0104e+05 06-Jul-2004 14:11:00 thunder storm 2004
20-Apr-2002 16:46:00 MidWest 23141 NaN NaT unknown 2002
10-Dec-2002 10:45:00 MidWest 14493 3.0879e+06 11-Dec-2002 18:06:00 unknown 2002
18-May-2002 11:04:00 MidWest 1389.1 1.3447e+05 21-May-2002 01:22:00 unknown 2002
22-Sep-2003 00:53:00 MidWest 3995.8 6.7808e+05 23-Sep-2003 03:45:00 unknown 2003
05-Nov-2005 12:46:00 NorthEast 2966.1 NaN 06-Nov-2005 21:40:00 unknown 2005
17-Aug-2002 09:05:00 NorthEast 21673 NaN 19-Aug-2002 21:45:00 unknown 2002
16-Sep-2004 19:42:00 NorthEast 4718 NaN NaT unknown 2004
20-May-2002 10:57:00 NorthEast 9116.6 2.4983e+06 21-May-2002 15:22:00 unknown 2002
05-Sep-2003 20:15:00 SouthEast 1700.1 1.6393e+05 10-Sep-2003 19:59:00 thunder storm 2003
20-Sep-2004 12:37:00 SouthEast 8767.3 2.2249e+06 02-Oct-2004 06:00:00 severe storm 2004
14-Sep-2005 15:45:00 SouthEast 1839.2 3.4144e+05 NaT severe storm 2005
14-Sep-2003 16:09:00 NorthEast 2011.3 6.9368e+05 24-Sep-2003 07:44:00 severe storm 2003
⋮
function tf = myFilterFcn(x) % x is the data in a group from one computation variable % tf is true, false, or a logical column vector with the same height as x tf = isoutlier(x); end
相关示例
参数
输入数据
— 来自工作区的有效分组数据
向量 | 矩阵 | 表 | 时间表
通过从分组依据下拉列表中选择有效的工作区分组变量来指定组。当数据包含在表或时间表中时,请另外选择要作为分组依据的表变量。您可以按唯一值分组或指定如何对数据进行 bin 运算。
从计算数据下拉列表中,选择要对其进行计算的工作区数据。当数据包含在表或时间表中时,请选择要对其进行计算的表变量。
组数据计算方法
— 要执行的计算的类型
Compute stats by group
| Transform by group
| Filter by group
选择以下计算选项之一:
计算类型 | 描述 |
---|---|
Compute stats by group | 数据的汇总(或聚合),如均值或最大值。您还可以通过提供局部函数名称或函数句柄来提供自定义函数。该函数必须按组返回一个其第一个维度长度为 1 的实体。有关详细信息,请参阅 groupsummary 。 |
Transform by group | 变换数据,例如,按 2-范数缩放数据或填充缺失数据。您还可以通过提供局部函数名称或函数句柄来提供自定义函数。该函数必须返回一个其第一个维度长度为 1 或行数与输入数据相同的实体。有关详细信息,请参阅 grouptransform 。 |
Filter by group | 通过提供定义过滤计算的局部函数或函数句柄来过滤每个组中的成员。该函数必须返回逻辑标量或与数据具有相同行数的逻辑列向量,用于指示要选择的组成员。如果函数返回逻辑标量,则要么滤除组中的所有成员(当值为 false 时),要么不滤除任何成员(当值为 true 时)。如果函数返回逻辑向量,则当对应的元素是 false 时滤除组的成员。当对应元素为 true 时,组成员将被保留。有关详细信息,请参阅 groupfilter 。 |
对于所有计算类型,您可以点击新建在实时脚本中创建一个用于定义计算的新函数。点击新建会自动将一个示例函数插入到实时脚本中,该示例函数使用适合所选计算类型的语法。如果您更改示例函数的名称,则要使用新函数名称,请从实时任务的下拉列表中重新选择方法。
版本历史记录
在 R2021b 中推出R2023a: 返回唯一元素的数量
计算每组数据中不同非缺失元素的数量。选择按组计算统计量,然后指定唯一值的数目或全选计算方法。
R2022a: 如果输入包含的行超过一百万个,则实时编辑器任务不会自动运行
如果输入包含的行超过一百万个,则此实时编辑器任务不会自动运行。在以前的版本中,对于任何大小的输入,该任务始终自动运行。如果输入包含大量的行,则由此任务生成的代码可能需要一点儿时间来运行(超过几秒)。
当任务不自动运行时,自动运行指示符会被禁用。您可以在需要时手动运行任务,也可以选择启用任务自动运行。
另请参阅
函数
实时编辑器任务
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)