グループ別に計算
説明
[グループ別に計算] タスクでは、データを対話的にグループ化して、グループごとに要約統計量を計算したり変換を実行したりフィルターを適用したりできます。このタスクは、ライブ スクリプト用の MATLAB® コードを自動生成します。
このタスクを使用すると、次を行うことができます。
配列、table、または timetable 内のデータのグループを定義する。
各グループ化に基づいてデータの要約、変換、またはフィルター処理を行う。
計算の結果を含む新しい table または timetable を出力する。
その他
関連する関数
[グループ別に計算] では、関数 groupsummary
、grouptransform
、および groupfilter
を使用するコードが生成されます。
![](group.png)
タスクを開く
[グループ別に計算] タスクを 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 には、各地域での停電に関するグループの観測値の数、平均電力損失、最大電力損失、影響を受けた顧客の平均数、影響を受けた顧客の最大数が含まれます。
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 には、欠損している電力損失を原因が同じ停電の平均電力損失に置き換えた停電データが含まれます。
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 倍を超えて離れている外れ値の停電データのみが含まれます。
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 または timetable に含まれている場合は、グループ化の基準とする table 変数も選択します。一意の値でグループ化するか、データをビン化する方法を指定できます。
[計算対象] ドロップダウン リストから、計算対象とするワークスペース データを選択します。データが table または timetable に含まれている場合は、計算対象とする table 変数を選択します。
グループの計算
— 実行する計算のタイプ
Compute stats by group
| Transform by group
| Filter by group
次の計算オプションのいずれかを選択します。
計算タイプ | 説明 |
---|---|
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 で導入R2023a: 一意の要素の数を返す
データの各グループの異なる非欠損要素の数を計算します。[グループ別に統計値を計算] を選択してから、[一意の値の数] または [すべて選択] 計算メソッドを指定します。
R2022a: 入力に 100 万個を超える行がある場合、ライブ エディター タスクは自動実行されない
入力に 100 万個を超える行がある場合、このライブ エディター タスクは自動実行されません。以前のリリースでは、入力がどのようなサイズでもタスクは必ず自動実行されていました。入力の行が多い場合、このタスクで生成されたコードは実行にかなりの時間 (数秒間以上) を要することがあります。
タスクが自動的に実行されない場合、自動実行インジケーターが無効になります。必要に応じてタスクを手動で実行するか、タスクの自動実行の有効化を選択することができます。
参考
関数
ライブ エディター タスク
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)