Main Content

グループ別に計算

ライブ エディターでのグループごとの要約、変換、またはフィルター処理

R2021b 以降

説明

[グループ別に計算] タスクでは、データを対話的にグループ化して、グループごとに要約統計量を計算したり変換を実行したりフィルターを適用したりできます。このタスクは、ライブ スクリプト用の MATLAB® コードを自動生成します。

このタスクを使用すると、次を行うことができます。

  • 配列、table、または timetable 内のデータのグループを定義する。

  • 各グループ化に基づいてデータの要約、変換、またはフィルター処理を行う。

  • 計算の結果を含む新しい table または timetable を出力する。

関連する関数

[グループ別に計算] では、関数 groupsummarygrouptransform、および groupfilter を使用するコードが生成されます。

Compute by Group task in the Live Editor

タスクを開く

[グループ別に計算] タスクを MATLAB エディターでライブ スクリプトに追加するには、次を行います。

  • [ライブ エディター] タブで [タスク][グループ別に計算] を選択します。

  • スクリプトのコード ブロック内に、group などの関連キーワードを入力します。コマンドの補完候補から [グループ別に計算] を選択します。

すべて展開する

ライブ エディターの [グループ別に計算] タスクを使用してデータを対話的にグループ化し、演算の対象とする変数を指定して統計量を計算することで、データを要約します。

サンプル ファイル outages.csv を使用して timetable を作成します。このファイルには、電力会社の停電を表す 6 列のデータが含まれています。列方向の変数 Region および Cause を categorical 配列に変換して、timetable を表示します。

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
      ⋮

ライブ エディターで [グループ別に計算] タスクを開きます。停電が発生した 5 つの地域別にデータをグループ化するには、outages を入力データとして選択し、変数 Region の一意の値でグループ化します。次に、[計算対象] フィールドで [すべての数値変数] を選択して変数 Loss および Customers に対して計算を行います。

[グループ別に計算] タスクでは、グループに対して 3 種類の計算を実行できます。停電データを要約するには、計算タイプを [グループ別に統計値を計算] に設定します。次に、数値変数 Loss および Customers の平均値と最大値を計算するには、[グループごとの計算] フィールドを使用して [平均値] メソッドと [最大値] メソッドを選択します。

結果の timetable には、各地域での停電に関するグループの観測値の数、平均電力損失、最大電力損失、影響を受けた顧客の平均数、影響を受けた顧客の最大数が含まれます。

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 を使用して timetable を作成します。このファイルには、電力会社の停電を表す 6 列のデータが含まれています。列方向の変数 Region および Cause を categorical 配列に変換して、timetable を表示します。

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
      ⋮

ライブ エディターで [グループ別に計算] タスクを開きます。停電が発生した 10 個の原因別にデータをグループ化するには、outages を入力データとして選択し、変数 Cause の一意の値でグループ化します。次に、[計算対象] を変数 Loss に設定します。

[グループ別に計算] タスクでは、グループに対して 3 種類の計算を実行できます。停電データを変換するには、計算タイプを [グループごとの変換] に設定します。次に、欠損している電力損失値を埋めるには、[グループごとの計算][グループ平均で欠損を埋める] メソッドに設定します。

結果の timetable には、欠損している電力損失を原因が同じ停電の平均電力損失に置き換えた停電データが含まれます。

Live Task
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 を使用して timetable を作成します。このファイルには、電力会社の停電を表す 6 列のデータが含まれています。列方向の変数 Region および Cause を categorical 配列に変換して、timetable を表示します。

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 を年別にビン化し、変数 Region を一意の値でグループ化します。次に、[計算対象] フィールドで変数 Loss を選択して電力損失に対して計算を行います。

[グループ別に計算] タスクでは、グループに対して 3 種類の計算を実行できます。停電データをフィルター処理するには、計算タイプを [グループ別にフィルター処理] に設定します。次に、[グループごとの計算] を新しいローカル関数に設定し、保持する外れ値データについては true、除外する非外れ値データについては false の結果を示す関数を記述してフィルターをカスタマイズします。

結果の timetable には、電力損失が年と地域における損失の平均値から標準偏差の 3 倍を超えて離れている外れ値の停電データのみが含まれます。

Live Task
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

関連する例

パラメーター

すべて展開する

[グループ化] ドロップダウン リストから有効なワークスペース グループ化変数を選択してグループを指定します。データが table または timetable に含まれている場合は、グループ化の基準とする table 変数も選択します。一意の値でグループ化するか、データをビン化する方法を指定できます。

[計算対象] ドロップダウン リストから、計算対象とするワークスペース データを選択します。データが table または timetable に含まれている場合は、計算対象とする table 変数を選択します。

次の計算オプションのいずれかを選択します。

計算タイプ説明
Compute stats by group平均値や最大値などのデータの要約 (または集計)。ローカル関数名または関数ハンドルを指定することでカスタム関数も指定できます。この関数は、最初の次元の長さが 1 であるグループごとに 1 つのエンティティを返さなければなりません。詳細については、groupsummary を参照してください。
Transform by groupデータを変換します。たとえば、データを 2 ノルムでスケーリングしたり、欠損データを埋めたりします。ローカル関数名または関数ハンドルを指定することでカスタム関数も指定できます。この関数は、最初の次元の長さが 1、または入力データと同じ行数をもつ 1 つのエンティティを返さなければなりません。詳細については、grouptransform を参照してください。
Filter by groupフィルター処理計算を定義するローカル関数または関数ハンドルを指定して、各グループからメンバーをフィルター処理します。この関数は、logical スカラーを返すか、データと同じ行数をもち、選択するグループ メンバーを示す logical 列ベクトルを返さなければなりません。関数が logical スカラーを返す場合、グループのすべてのメンバーがフィルター処理されるか (値が false のとき)、何も処理されません (値が true のとき)。関数が logical ベクトルを返す場合、対応する要素が false であるグループ メンバーがフィルター処理されます。対応する要素が true であるメンバーが保持されます。詳細については、groupfilter を参照してください。

どの計算タイプでも、[新規] をクリックすると、ライブ スクリプトで計算を定義する新しい関数を作成できます。[新規] をクリックすると、選択した計算タイプに適した構文を使用するサンプル関数がライブ スクリプトに自動的に挿入されます。サンプル関数の名前を変更する場合、新しい関数名を使用するには、ライブ タスクのドロップダウン リストからメソッドを再度選択します。

バージョン履歴

R2021b で導入

すべて展開する