exponenta event banner

Сгруппированные статистические вычисления с массивами Tall

В этом примере показано, как вычислить сгруппированную статистику высокого графика, содержащую данные отключения электроэнергии. В примере используется grouptransform, groupsummary, и groupcounts функции для расчета различных интересующих величин, таких как наиболее распространенная причина отключения электроэнергии в каждом регионе. Несмотря на то, что необработанные данные в этом примере содержат только около 1500 строк, можно использовать методы, представленные здесь для гораздо больших наборов данных, поскольку в отношении размера данных не делается никаких предположений.

Создание хранилища данных и расписания роста

Образец файла, outages.csv, содержит данные, представляющие отключения электроэнергии в Соединенных Штатах. Файл содержит шесть столбцов: Region, OutageTime, Loss, Customers, RestorationTime, и Cause.

Создание хранилища данных для outages.csv файл. Используйте "TextScanFormats" для указания типа данных, содержащихся в каждом столбце: категориальный ("%C"), число с плавающей запятой ("%f") или datetime ("%D").

data_formats = ["%C","%D","%f","%f","%D","%C"];
ds = tabularTextDatastore("outages.csv","TextscanFormats",data_formats);

Создайте высокую таблицу в верхней части хранилища данных и преобразуйте ее в высокое расписание. OutageTime используется для времени строки, поскольку она является первой переменной datetime или duration в таблице.

T = tall(ds);
T = table2timetable(T)
T =

  Mx5 tall timetable

    OutageTime    Region    Loss    Customers    RestorationTime    Cause
    __________    ______    ____    _________    _______________    _____

        ?           ?        ?          ?               ?             ?  
        ?           ?        ?          ?               ?             ?  
        ?           ?        ?          ?               ?             ?  
        :           :        :          :               :             :
        :           :        :          :               :             :

Заменить отсутствующие данные

Некоторые строки в RestorationTime переменные имеют пропущенные времена, представленные NaT значения. Удалите эти строки из таблицы.

T = rmmissing(T,"DataVariables","RestorationTime");

Для числовых переменных в расписании вместо удаления строк с отсутствующими значениями замените отсутствующие значения средним значением для каждой области.

T = grouptransform(T,"Region","meanfill",["Loss","Customers"]);

Использовать ismissing для подтверждения того, что в таблице отсутствуют недостающие данные.

tf = any(ismissing(T),"all");
gather(tf)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 4: Completed in 0.18 sec
- Pass 2 of 4: Completed in 0.47 sec
- Pass 3 of 4: Completed in 0.35 sec
- Pass 4 of 4: Completed in 0.43 sec
Evaluation completed in 2.2 sec
ans = logical
   0

Просмотр данных

Теперь, когда данные не содержат отсутствующих значений, введите небольшое количество строк в память, чтобы получить представление о том, что содержат данные.

gather(head(T))
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 1: Completed in 0.28 sec
Evaluation completed in 0.38 sec
ans=8×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-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    1.5354e+05    2004-06-20 19:16    equipment fault
    2002-06-06 19:28    West         311.86    1.5354e+05    2002-06-07 00:51    equipment fault
    2003-07-16 16:23    NorthEast    239.93         49434    2003-07-17 01:12    fire           

Средняя продолжительность отключения питания по регионам

Определите среднюю продолжительность отключения электроэнергии в каждом регионе с помощью groupsummary. Сначала создайте новую переменную OutageDuration в таблице, содержащей продолжительность каждого простоя, найденную путем вычитания времени простоя из времени восстановления. В вызове для groupsummary, укажите:

  • "Region" в качестве переменной группировки

  • "mean" в качестве метода вычисления

  • "OutageDuration" в качестве переменной для работы.

T.OutageDuration = T.RestorationTime - T.OutageTime;
times = groupsummary(T,"Region","mean","OutageDuration")
times =

  Mx3 tall table

    Region    GroupCount    mean_OutageDuration
    ______    __________    ___________________

      ?           ?                  ?         
      ?           ?                  ?         
      ?           ?                  ?         
      :           :                  :
      :           :                  :

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

times.mean_OutageDuration.Format = "d";
times = gather(times)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 0.67 sec
- Pass 2 of 2: Completed in 0.4 sec
Evaluation completed in 1.4 sec
times=5×3 table
     Region      GroupCount    mean_OutageDuration
    _________    __________    ___________________

    MidWest         138            34.135 days    
    NorthEast       548             24.21 days    
    SouthEast       379            1.7013 days    
    SouthWest        25            2.4799 days    
    West            349            28.061 days    

Наиболее распространенные причины отключения питания по регионам

Определите, как часто в каждом регионе происходит отключение электроэнергии. Использовать groupcounts с Cause и Region переменные как переменные группировки. Соберите результаты в память.

causes = groupcounts(T,["Cause","Region"]);
causes = gather(causes)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 0.2 sec
- Pass 2 of 2: Completed in 0.25 sec
Evaluation completed in 0.73 sec
causes=43×4 table
         Cause           Region      GroupCount    Percent 
    ________________    _________    __________    ________

    attack              MidWest          12         0.83391
    attack              NorthEast       135          9.3815
    attack              SouthEast        19          1.3204
    attack              West            126          8.7561
    earthquake          NorthEast         1        0.069493
    earthquake          West              1        0.069493
    energy emergency    MidWest          19          1.3204
    energy emergency    NorthEast        29          2.0153
    energy emergency    SouthEast        79          5.4899
    energy emergency    SouthWest         7         0.48645
    energy emergency    West             46          3.1967
    equipment fault     MidWest           9         0.62543
    equipment fault     NorthEast        17          1.1814
    equipment fault     SouthEast        40          2.7797
    equipment fault     SouthWest         2         0.13899
    equipment fault     West             85          5.9069
      ⋮

Каждая причина возникает в таблице несколько раз, поэтому, даже если таблица содержит правильные данные, она не имеет надлежащего формата, чтобы увидеть, как часто каждая причина возникает в каждой области. Чтобы улучшить представление данных, разобрать GroupCount переменная, так что каждый столбец соответствует области, и каждая строка соответствует причине отключения.

RegionCauses = gather(unstack(causes,"GroupCount","Region","GroupingVariables","Cause"))
RegionCauses=10×6 table
         Cause          MidWest    NorthEast    SouthEast    SouthWest    West
    ________________    _______    _________    _________    _________    ____

    attack                 12         135           19          NaN       126 
    earthquake            NaN           1          NaN          NaN         1 
    energy emergency       19          29           79            7        46 
    equipment fault         9          17           40            2        85 
    fire                  NaN           5            3          NaN        17 
    severe storm           30         139          132            6        22 
    thunder storm          31         102           54            6         7 
    unknown                 4          10            3          NaN         4 
    wind                   16          40           13            3        22 
    winter storm           17          70           36            1        19 

Не все комбинации причин и областей простоя представлены в данных, поэтому полученная таблица содержит некоторые NaNs. Заполните NaN значения с нулями.

RegionCauses = fillmissing(RegionCauses,"constant",{"",0,0,0,0,0})
RegionCauses=10×6 table
         Cause          MidWest    NorthEast    SouthEast    SouthWest    West
    ________________    _______    _________    _________    _________    ____

    attack                12          135           19           0        126 
    earthquake             0            1            0           0          1 
    energy emergency      19           29           79           7         46 
    equipment fault        9           17           40           2         85 
    fire                   0            5            3           0         17 
    severe storm          30          139          132           6         22 
    thunder storm         31          102           54           6          7 
    unknown                4           10            3           0          4 
    wind                  16           40           13           3         22 
    winter storm          17           70           36           1         19 

Наихудшие отключения электроэнергии в каждом регионе

Рассчитайте самое широкое влияние на клиента при каждом отключении электроэнергии в каждом регионе.

WorstOutages = groupsummary(T,["Region","Cause"],"max","Customers");
WorstOutages = gather(WorstOutages)
Evaluating tall expression using the Local MATLAB Session:
- Pass 1 of 2: Completed in 0.16 sec
- Pass 2 of 2: Completed in 0.25 sec
Evaluation completed in 0.56 sec
WorstOutages=43×4 table
     Region           Cause          GroupCount    max_Customers
    _________    ________________    __________    _____________

    MidWest      attack                  12         2.4403e+05  
    MidWest      energy emergency        19         5.0376e+05  
    MidWest      equipment fault          9         2.4403e+05  
    MidWest      severe storm            30          3.972e+06  
    MidWest      thunder storm           31         3.8233e+05  
    MidWest      unknown                  4         3.0879e+06  
    MidWest      wind                    16         2.8666e+05  
    MidWest      winter storm            17         7.7697e+05  
    NorthEast    attack                 135         1.5005e+05  
    NorthEast    earthquake               1                  0  
    NorthEast    energy emergency        29         1.5005e+05  
    NorthEast    equipment fault         17          1.667e+05  
    NorthEast    fire                     5         4.5139e+05  
    NorthEast    severe storm           139         1.0735e+06  
    NorthEast    thunder storm          102         5.9689e+06  
    NorthEast    unknown                 10         2.4983e+06  
      ⋮

Объединение данных в Region и Cause переменные в одну категориальную переменную путем их краткого преобразования в строки. Затем создайте категориальную гистограмму максимального количества затронутых клиентов для каждой причины в каждом регионе.

WorstOutages.RegionCause = categorical(string(WorstOutages.Region)+" ("+string(WorstOutages.Cause)+")");
histogram("Categories",WorstOutages.RegionCause,"BinCounts",WorstOutages.max_Customers,...
    "DisplayOrder","descend")
ylabel("Max # Affected Customers")

Figure contains an axes. The axes contains an object of type categoricalhistogram.

См. также

| |

Связанные темы