이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

테이블 데이터 변수를 분할하고 함수 적용하기

이 예제에서는 테이블의 정전 데이터를 정전 지역과 원인을 기준으로 그룹으로 분할하는 방법을 보여줍니다. 그런 다음 함수를 적용하여 각 그룹에 대한 통계량을 계산하고 그 결과를 테이블로 수집하는 방법을 보여줍니다.

정전 데이터 불러오기

샘플 파일 outages.csv에는 미국 내의 정전 기록을 나타내는 데이터가 들어 있습니다. 이 파일에는 Region, OutageTime, Loss, Customers, RestorationTime, Cause와 같은 6개 열이 포함되어 있습니다. outages.csv를 테이블로 읽어 들입니다.

T = readtable('outages.csv');

RegionCause를 categorical형 배열로 변환하고, OutageTimeRestorationTimedatetime형 배열로 변환합니다. 처음 5개 행을 표시합니다.

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 함수는 T.Region에서 생성된 그룹 번호의 벡터인 G를 반환합니다. splitapply 함수는 G를 사용하여 T.Loss를 다섯 지역에 해당하는 5개 그룹으로 분할합니다. 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 

T1이 테이블이므로 powerLosses는 테이블입니다. 최대 손실을 또 하나의 테이블 변수로 추가할 수 있습니다.

각 지역의 최대 전력 손실을 원인별로 계산합니다. RegionCause가 그룹화 변수임을 명시하려면 테이블 인덱싱을 사용하십시오. 최대 전력 손실이 포함된 테이블을 생성하고, 처음 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.LossNaN 값이 포함되어 있으므로, 익명 함수로 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.RestorationTimeNaT 값이 있으므로, 평균 지속시간을 계산할 때 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  

참고 항목

| | |

관련 예제

세부 정보