Разделение данных табличных переменных и применение функций

В этом примере показано, как разделить данные об отключении степени из таблицы на группы по областям и причинам отключения степени. Затем показано, как применить функции для вычисления статистики для каждой группы и сбора результатов в таблице.

Загрузка данных отключения степени

Образец файла, 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   

Вычисление максимальных потерь степени

Определите наибольшие потери степени из-за отключения степени в каждой области. The findgroups функция возвращает G, вектор чисел групп, созданный из T.Region. The 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  

См. также

| | |

Похожие примеры

Подробнее о