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     
    ____________________    _________    ______    __________    ____________________    _______________

    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 变量的唯一值进行分组。然后,通过在计算数据字段中选择所有数值变量,对 LossCustomers 变量执行计算。

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

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

Live Task
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     
    ____________________    _________    ______    __________    ____________________    _______________

    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 变量。

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

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

Live Task
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 创建一个时间表。该文件包含六列表示电力公司停电信息的数据。将 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     
    ____________________    _________    ______    __________    ____________________    _______________

    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 结果。

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

Live Task
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数据的汇总(或聚合),如均值或最大值。您还可以通过提供局部函数名称或函数句柄来提供自定义函数。该函数必须按组返回一个其第一个维度长度为 1 的实体。有关详细信息,请参阅 groupsummary
Transform by group变换数据,例如,按 2-范数缩放数据或填充缺失数据。您还可以通过提供局部函数名称或函数句柄来提供自定义函数。该函数必须返回一个其第一个维度长度为 1 或行数与输入数据相同的实体。有关详细信息,请参阅 grouptransform
Filter by group通过提供定义过滤计算的局部函数或函数句柄来过滤每个组中的成员。该函数必须返回逻辑标量或与数据具有相同行数的逻辑列向量,用于指示要选择的组成员。如果函数返回逻辑标量,则要么滤除组中的所有成员(当值为 false 时),要么不滤除任何成员(当值为 true 时)。如果函数返回逻辑向量,则当对应的元素是 false 时滤除组的成员。当对应元素为 true 时,组成员将被保留。有关详细信息,请参阅 groupfilter

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

版本历史记录

在 R2021b 中推出

全部展开