Этот пример показывает, как разделить данные об отключении электроэнергии из таблицы в группы областью и причиной отключений электроэнергии. Затем это показывает, как применить функции, чтобы вычислить статистику для каждой группы и собрать результаты в таблице.
Файл примера, 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