Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

按组计算

在实时编辑器中按组进行汇总、变换或过滤

自 R2021b 起

说明

通过按组计算任务,您能够以交互方式对数据执行分组,并针对每个组计算汇总统计量、执行变换或应用过滤器。该任务会自动为您的实时脚本生成 MATLAB® 代码。

使用此任务,您可以:

  • 在数组、表或时间表中定义数据组。

  • 根据每个分组汇总、变换或过滤数据。

  • 输出一个包含计算结果的新表或时间表。

Compute by Group task in the Live Editor

打开任务

要将按组计算任务添加到 MATLAB 编辑器中的实时脚本,请执行以下操作:

  • 实时编辑器选项卡上,选择任务 > 按组计算

  • 在脚本的代码块中,键入相关关键字,例如 group。从建议的命令自动填充项中选择按组计算

示例

全部展开

通过以交互方式对数据分组、指定要运算的变量以及使用实时编辑器中的按组计算任务计算统计量来汇总数据。

使用示例文件 outages.csv 创建一个时间表。该文件包含六列表示电力公司停电信息的数据。将 RegionCause 列向变量转换为分类数组并显示时间表。

outages = readtimetable("outages.csv");
outages.Region = categorical(outages.Region);
outages.Cause = categorical(outages.Cause)
outages=1468×5 timetable
       OutageTime        Region       Loss     Customers     RestorationTime          Cause     
    ________________    _________    ______    __________    ________________    _______________

    2002-02-01 12:18    SouthWest    458.98    1.8202e+06    2002-02-07 16:50    winter storm   
    2003-01-23 00:49    SouthEast    530.14    2.1204e+05                 NaT    winter storm   
    2003-02-07 21:15    SouthEast     289.4    1.4294e+05    2003-02-17 08:14    winter storm   
    2004-04-06 05:44    West         434.81    3.4037e+05    2004-04-06 06:10    equipment fault
    2002-03-16 06:18    MidWest      186.44    2.1275e+05    2002-03-18 23:23    severe storm   
    2003-06-18 02:49    West              0             0    2003-06-18 10:54    attack         
    2004-06-20 14:39    West         231.29           NaN    2004-06-20 19:16    equipment fault
    2002-06-06 19:28    West         311.86           NaN    2002-06-07 00:51    equipment fault
    2003-07-16 16:23    NorthEast    239.93         49434    2003-07-17 01:12    fire           
    2004-09-27 11:09    MidWest      286.72         66104    2004-09-27 16:37    equipment fault
    2004-09-05 17:48    SouthEast    73.387         36073    2004-09-05 20:46    equipment fault
    2004-05-21 21:45    West         159.99           NaN    2004-05-22 04:23    equipment fault
    2002-09-01 18:22    SouthEast    95.917         36759    2002-09-01 19:12    severe storm   
    2003-09-27 07:32    SouthEast       NaN    3.5517e+05    2003-10-04 07:02    severe storm   
    2003-11-12 06:12    West         254.09    9.2429e+05    2003-11-17 02:04    winter storm   
    2004-09-18 05:54    NorthEast         0             0                 NaT    equipment fault
      ⋮

在实时编辑器中打开按组计算任务。要按发生停电的五个区域对数据进行分组,请选择 outages 作为输入数据,并按 Region 变量的唯一值进行分组。然后,通过在计算数据字段中选择所有数值变量,对 LossCustomers 变量执行计算。

按组计算任务可以针对组执行三种不同类型的计算。要汇总停电数据,请将计算类型设置为按组计算统计量。然后,要计算数值变量 LossCustomers 的均值和最大值,请使用计算字段选择均值最大值方法。

生成的时间表包含每个区域停电事件的分组观测值计数、平均电力损失、最大电力损失、平均受影响客户数量和最大受影响客户数量。

要查看此任务生成的代码,请点击任务参数区域底部的 Small arrow pointing down 展开任务显示画面。

Live Task
% Compute group summary
outageStats = groupsummary(outages,"Region",["mean","max"],vartype("numeric"))
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 创建一个时间表。该文件包含六列表示电力公司停电信息的数据。将 RegionCause 列向变量转换为分类数组并显示时间表。

outages = readtimetable("outages.csv");
outages.Region = categorical(outages.Region);
outages.Cause = categorical(outages.Cause)
outages=1468×5 timetable
       OutageTime        Region       Loss     Customers     RestorationTime          Cause     
    ________________    _________    ______    __________    ________________    _______________

    2002-02-01 12:18    SouthWest    458.98    1.8202e+06    2002-02-07 16:50    winter storm   
    2003-01-23 00:49    SouthEast    530.14    2.1204e+05                 NaT    winter storm   
    2003-02-07 21:15    SouthEast     289.4    1.4294e+05    2003-02-17 08:14    winter storm   
    2004-04-06 05:44    West         434.81    3.4037e+05    2004-04-06 06:10    equipment fault
    2002-03-16 06:18    MidWest      186.44    2.1275e+05    2002-03-18 23:23    severe storm   
    2003-06-18 02:49    West              0             0    2003-06-18 10:54    attack         
    2004-06-20 14:39    West         231.29           NaN    2004-06-20 19:16    equipment fault
    2002-06-06 19:28    West         311.86           NaN    2002-06-07 00:51    equipment fault
    2003-07-16 16:23    NorthEast    239.93         49434    2003-07-17 01:12    fire           
    2004-09-27 11:09    MidWest      286.72         66104    2004-09-27 16:37    equipment fault
    2004-09-05 17:48    SouthEast    73.387         36073    2004-09-05 20:46    equipment fault
    2004-05-21 21:45    West         159.99           NaN    2004-05-22 04:23    equipment fault
    2002-09-01 18:22    SouthEast    95.917         36759    2002-09-01 19:12    severe storm   
    2003-09-27 07:32    SouthEast       NaN    3.5517e+05    2003-10-04 07:02    severe storm   
    2003-11-12 06:12    West         254.09    9.2429e+05    2003-11-17 02:04    winter storm   
    2004-09-18 05:54    NorthEast         0             0                 NaT    equipment fault
      ⋮

在实时编辑器中打开按组计算任务。要按发生停电的十个原因对数据进行分组,请选择 outages 作为输入数据,并按 Cause 变量的唯一值进行分组。然后,将计算数据设置为 Loss 变量。

按组计算任务可以针对组执行三种不同类型的计算。要变换停电数据,请将计算类型设置为按组转换。然后,要填充缺失的功率损耗值,请将计算设置为用组均值填充缺失值方法。

生成的时间表包含停电数据,其中缺失的电力损失替换为出于相同原因停电的平均电力损失。

要查看此任务生成的代码,请点击任务参数区域底部的 Small arrow pointing down 展开任务显示画面。

Live Task
% Transform data by group
outageTransform = grouptransform(outages,"Cause","meanfill","Loss")
outageTransform=1468×5 timetable
       OutageTime        Region       Loss     Customers     RestorationTime          Cause     
    ________________    _________    ______    __________    ________________    _______________

    2002-02-01 12:18    SouthWest    458.98    1.8202e+06    2002-02-07 16:50    winter storm   
    2003-01-23 00:49    SouthEast    530.14    2.1204e+05                 NaT    winter storm   
    2003-02-07 21:15    SouthEast     289.4    1.4294e+05    2003-02-17 08:14    winter storm   
    2004-04-06 05:44    West         434.81    3.4037e+05    2004-04-06 06:10    equipment fault
    2002-03-16 06:18    MidWest      186.44    2.1275e+05    2002-03-18 23:23    severe storm   
    2003-06-18 02:49    West              0             0    2003-06-18 10:54    attack         
    2004-06-20 14:39    West         231.29           NaN    2004-06-20 19:16    equipment fault
    2002-06-06 19:28    West         311.86           NaN    2002-06-07 00:51    equipment fault
    2003-07-16 16:23    NorthEast    239.93         49434    2003-07-17 01:12    fire           
    2004-09-27 11:09    MidWest      286.72         66104    2004-09-27 16:37    equipment fault
    2004-09-05 17:48    SouthEast    73.387         36073    2004-09-05 20:46    equipment fault
    2004-05-21 21:45    West         159.99           NaN    2004-05-22 04:23    equipment fault
    2002-09-01 18:22    SouthEast    95.917         36759    2002-09-01 19:12    severe storm   
    2003-09-27 07:32    SouthEast    697.41    3.5517e+05    2003-10-04 07:02    severe storm   
    2003-11-12 06:12    West         254.09    9.2429e+05    2003-11-17 02:04    winter storm   
    2004-09-18 05:54    NorthEast         0             0                 NaT    equipment fault
      ⋮

通过使用按组计算以交互方式对数据进行分组、指定要对其执行运算的变量以及应用组过滤器,关注数据集中的特定信息。

使用示例文件 outages.csv 创建一个时间表。该文件包含六列表示电力公司停电信息的数据。将 RegionCause 列向变量转换为分类数组并显示时间表。

outages = readtimetable("outages.csv");
outages.Region = categorical(outages.Region);
outages.Cause = categorical(outages.Cause)
outages=1468×5 timetable
       OutageTime        Region       Loss     Customers     RestorationTime          Cause     
    ________________    _________    ______    __________    ________________    _______________

    2002-02-01 12:18    SouthWest    458.98    1.8202e+06    2002-02-07 16:50    winter storm   
    2003-01-23 00:49    SouthEast    530.14    2.1204e+05                 NaT    winter storm   
    2003-02-07 21:15    SouthEast     289.4    1.4294e+05    2003-02-17 08:14    winter storm   
    2004-04-06 05:44    West         434.81    3.4037e+05    2004-04-06 06:10    equipment fault
    2002-03-16 06:18    MidWest      186.44    2.1275e+05    2002-03-18 23:23    severe storm   
    2003-06-18 02:49    West              0             0    2003-06-18 10:54    attack         
    2004-06-20 14:39    West         231.29           NaN    2004-06-20 19:16    equipment fault
    2002-06-06 19:28    West         311.86           NaN    2002-06-07 00:51    equipment fault
    2003-07-16 16:23    NorthEast    239.93         49434    2003-07-17 01:12    fire           
    2004-09-27 11:09    MidWest      286.72         66104    2004-09-27 16:37    equipment fault
    2004-09-05 17:48    SouthEast    73.387         36073    2004-09-05 20:46    equipment fault
    2004-05-21 21:45    West         159.99           NaN    2004-05-22 04:23    equipment fault
    2002-09-01 18:22    SouthEast    95.917         36759    2002-09-01 19:12    severe storm   
    2003-09-27 07:32    SouthEast       NaN    3.5517e+05    2003-10-04 07:02    severe storm   
    2003-11-12 06:12    West         254.09    9.2429e+05    2003-11-17 02:04    winter storm   
    2004-09-18 05:54    NorthEast         0             0                 NaT    equipment fault
      ⋮

在实时编辑器中打开按组计算任务。要按停电发生的年份和地区对数据进行分组,请使用分组依据按年份对 OutageTime 变量进行分 bin,并按唯一值对 Region 变量进行分组。然后,通过选择计算数据字段中的 Loss 变量来计算功率损耗。

按组计算任务可以针对组执行三种不同类型的计算。要过滤停电数据,请将计算类型设置为按组过滤。然后,将计算设置为一个新局部函数,并通过编写一个函数来自定义过滤器,该函数为要保留的离群数据提供 true 结果,并为要滤除的非离群数据提供 false 结果。

生成的时间表仅包含停电离群数据,其中电力损失超出该年份和该地区平均电力损失的三倍标准差。

要查看此任务生成的代码,请点击任务参数区域底部的 Small arrow pointing down 展开任务显示画面。

Live Task
% Filter data by group
outageFilter = groupfilter(outages,["OutageTime","Region"],["year","none"],...
    @myFilterFcn,"Loss")
outageFilter=159×6 timetable
       OutageTime        Region       Loss     Customers     RestorationTime          Cause         year_OutageTime
    ________________    _________    ______    __________    ________________    _______________    _______________

    2004-04-06 05:44    West         434.81    3.4037e+05    2004-04-06 06:10    equipment fault         2004      
    2002-06-06 19:28    West         311.86           NaN    2002-06-07 00:51    equipment fault         2002      
    2005-03-08 16:37    SouthEast    1339.2    4.3003e+05    2005-03-10 20:42    winter storm            2005      
    2004-07-02 09:16    MidWest       15128    2.0104e+05    2004-07-06 14:11    thunder storm           2004      
    2002-04-20 16:46    MidWest       23141           NaN                 NaT    unknown                 2002      
    2002-12-10 10:45    MidWest       14493    3.0879e+06    2002-12-11 18:06    unknown                 2002      
    2002-05-18 11:04    MidWest      1389.1    1.3447e+05    2002-05-21 01:22    unknown                 2002      
    2003-09-22 00:53    MidWest      3995.8    6.7808e+05    2003-09-23 03:45    unknown                 2003      
    2005-11-05 12:46    NorthEast    2966.1           NaN    2005-11-06 21:40    unknown                 2005      
    2002-08-17 09:05    NorthEast     21673           NaN    2002-08-19 21:45    unknown                 2002      
    2004-09-16 19:42    NorthEast      4718           NaN                 NaT    unknown                 2004      
    2002-05-20 10:57    NorthEast    9116.6    2.4983e+06    2002-05-21 15:22    unknown                 2002      
    2003-09-05 20:15    SouthEast    1700.1    1.6393e+05    2003-09-10 19:59    thunder storm           2003      
    2004-09-20 12:37    SouthEast    8767.3    2.2249e+06    2004-10-02 06:00    severe storm            2004      
    2005-09-14 15:45    SouthEast    1839.2    3.4144e+05                 NaT    severe storm            2005      
    2003-09-14 16:09    NorthEast    2011.3    6.9368e+05    2003-09-24 07:44    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数据的汇总(或聚合),如均值或最大值。您还可以通过提供局部函数名称或函数句柄来提供自定义函数。该函数必须按组返回一个其第一个维度长度为 1 的实体。有关详细信息,请参阅 groupsummary
Transform by group变换数据,例如,按 2-范数缩放数据或填充缺失数据。您还可以通过提供局部函数名称或函数句柄来提供自定义函数。该函数必须返回一个其第一个维度长度为 1 或行数与输入数据相同的实体。有关详细信息,请参阅 grouptransform
Filter by group通过提供定义过滤计算的局部函数或函数句柄来过滤每个组中的成员。该函数必须返回逻辑标量或与数据具有相同行数的逻辑列向量,用于指示要选择的组成员。如果函数返回逻辑标量,则要么滤除组中的所有成员(当值为 false 时),要么不滤除任何成员(当值为 true 时)。如果函数返回逻辑向量,则当对应的元素是 false 时滤除组的成员。当对应元素为 true 时,组成员将被保留。有关详细信息,请参阅 groupfilter

对于所有计算类型,您可以点击新建在实时脚本中创建一个用于定义计算的新函数。点击新建会自动将一个示例函数插入到实时脚本中,该示例函数使用适合所选计算类型的语法。如果您更改示例函数的名称,则要使用新函数名称,请从实时任务的下拉列表中重新选择方法。

版本历史记录

在 R2021b 中推出

全部展开