В этом примере показано, как разделить данные о перебоях в подаче электроэнергии из таблицы на группы по регионам и причинам перебоев в подаче электроэнергии. Затем показано, как применять функции для вычисления статистики для каждой группы и сбора результатов в таблице.
Образец файла, outages.csv, содержит данные, представляющие отключения электроэнергии в Соединенных Штатах. Файл содержит шесть столбцов: Region, OutageTime, Loss, Customers, RestorationTime, и Cause. Читать outages.csv в таблицу.
T = readtable('outages.csv');Новообращенный Region и Cause категориальным массивам, и OutageTime и RestorationTime кому datetime массивы. Просмотрите первые пять строк.
T.Region = categorical(T.Region); T.Cause = categorical(T.Cause); T.OutageTime = datetime(T.OutageTime); T.RestorationTime = datetime(T.RestorationTime); T(1:5,:)
ans=5×6 table
Region OutageTime Loss Customers RestorationTime Cause
_________ ________________ ______ __________ ________________ _______________
SouthWest 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 winter storm
SouthEast 2003-01-23 00:49 530.14 2.1204e+05 NaT winter storm
SouthEast 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 winter storm
West 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 equipment fault
MidWest 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 severe storm
Определите наибольшие потери электроэнергии из-за отключения питания в каждом регионе. findgroups функция возвращает G, вектор номеров групп, созданных из T.Region. splitapply функции использует G разделяться T.Loss на пять групп, соответствующих пяти регионам. splitapply применяет max функция для каждой группы и объединяет максимальные потери мощности в вектор.
G = findgroups(T.Region); maxLoss = splitapply(@max,T.Loss,G)
maxLoss = 5×1
104 ×
2.3141
2.3418
0.8767
0.2796
1.6659
Рассчитайте максимальную потерю мощности из-за отключения питания по причине. Чтобы указать, что Cause является переменной группирования, используйте индексирование таблицы. Создайте таблицу, содержащую максимальные потери мощности и их причины.
T1 = T(:,'Cause');
[G,powerLosses] = findgroups(T1);
powerLosses.maxLoss = splitapply(@max,T.Loss,G)powerLosses=10×2 table
Cause maxLoss
________________ _______
attack 582.63
earthquake 258.18
energy emergency 11638
equipment fault 16659
fire 872.96
severe storm 8767.3
thunder storm 23418
unknown 23141
wind 2796
winter storm 2883.7
powerLosses является таблицей, потому что T1 является таблицей. Можно добавить максимальные потери в качестве другой табличной переменной.
Рассчитайте максимальную потерю мощности по причине в каждом регионе. Чтобы указать, что Region и Cause - это группирующие переменные, использующие индексирование таблиц. Создайте таблицу, содержащую максимальные потери мощности, и просмотрите первые 15 строк.
T1 = T(:,{'Region','Cause'});
[G,powerLosses] = findgroups(T1);
powerLosses.maxLoss = splitapply(@max,T.Loss,G);
powerLosses(1:15,:)ans=15×3 table
Region Cause maxLoss
_________ ________________ _______
MidWest attack 0
MidWest energy emergency 2378.7
MidWest equipment fault 903.28
MidWest severe storm 6808.7
MidWest thunder storm 15128
MidWest unknown 23141
MidWest wind 2053.8
MidWest winter storm 669.25
NorthEast attack 405.62
NorthEast earthquake 0
NorthEast energy emergency 11638
NorthEast equipment fault 794.36
NorthEast fire 872.96
NorthEast severe storm 6002.4
NorthEast thunder storm 23418
Определение влияния отключения электроэнергии на клиентов по причинам и регионам. Поскольку T.Loss содержит NaN значения, перенос sum в анонимной функции для использования 'omitnan' входной аргумент.
osumFcn = @(x)(sum(x,'omitnan'));
powerLosses.totalCustomers = splitapply(osumFcn,T.Customers,G);
powerLosses(1:15,:)ans=15×4 table
Region Cause maxLoss totalCustomers
_________ ________________ _______ ______________
MidWest attack 0 0
MidWest energy emergency 2378.7 6.3363e+05
MidWest equipment fault 903.28 1.7822e+05
MidWest severe storm 6808.7 1.3511e+07
MidWest thunder storm 15128 4.2563e+06
MidWest unknown 23141 3.9505e+06
MidWest wind 2053.8 1.8796e+06
MidWest winter storm 669.25 4.8887e+06
NorthEast attack 405.62 2181.8
NorthEast earthquake 0 0
NorthEast energy emergency 11638 1.4391e+05
NorthEast equipment fault 794.36 3.9961e+05
NorthEast fire 872.96 6.1292e+05
NorthEast severe storm 6002.4 2.7905e+07
NorthEast thunder storm 23418 2.1885e+07
Определите среднюю продолжительность всех отключений электроэнергии в США в часах. Добавьте среднюю продолжительность отключения электроэнергии к powerLosses. Поскольку T.RestorationTime имеет NaT значения, опустить результирующие NaN значения при расчете средних длительностей.
D = T.RestorationTime - T.OutageTime;
H = hours(D);
omeanFcn = @(x)(mean(x,'omitnan'));
powerLosses.meanOutage = splitapply(omeanFcn,H,G);
powerLosses(1:15,:)ans=15×5 table
Region Cause maxLoss totalCustomers meanOutage
_________ ________________ _______ ______________ __________
MidWest attack 0 0 335.02
MidWest energy emergency 2378.7 6.3363e+05 5339.3
MidWest equipment fault 903.28 1.7822e+05 17.863
MidWest severe storm 6808.7 1.3511e+07 78.906
MidWest thunder storm 15128 4.2563e+06 51.245
MidWest unknown 23141 3.9505e+06 30.892
MidWest wind 2053.8 1.8796e+06 73.761
MidWest winter storm 669.25 4.8887e+06 127.58
NorthEast attack 405.62 2181.8 5.5117
NorthEast earthquake 0 0 0
NorthEast energy emergency 11638 1.4391e+05 77.345
NorthEast equipment fault 794.36 3.9961e+05 87.204
NorthEast fire 872.96 6.1292e+05 4.0267
NorthEast severe storm 6002.4 2.7905e+07 2163.5
NorthEast thunder storm 23418 2.1885e+07 46.098
findgroups | rowfun | splitapply | varfun