Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Cálculos estadísticos agrupados con matrices altas

En este ejemplo se muestra cómo utilizar las funciones findgroups y splitapply para calcular las estadísticas agrupadas de un horario alto que contiene datos de interrupción de energía. findgroups y splitapply permiten dividir variables altas en grupos, utilizar esos grupos para separar datos y, a continuación, aplicar una función a cada grupo de datos. También puede utilizar la función grpstats para calcular las estadísticas agrupadas, si tiene estadísticas y machine learning Toolbox ™.

Este ejemplo crea un horario alto para los datos de interrupción de energía, aunque los datos RAW sólo tienen unas 1500 filas. Sin embargo, puede utilizar las técnicas presentadas aquí en conjuntos de datos mucho más grandes porque no se hacen suposiciones sobre el tamaño de los datos.

Crear almacén de almacenes y horarios altos

El archivo de ejemplo, outages.csv, contiene datos que representan interrupciones de la utilidad eléctrica en los Estados Unidos. El archivo contiene seis columnas: Region, OutageTime, Loss, Customers, RestorationTimey Cause.

Cree un almacén de archivos para el archivo outages.csv Utilice la opción 'TextScanFormats' para especificar el tipo de datos que contiene cada columna: categórico ('%C'), numérico de punto flotante ('%f') o DateTime ('%D').

data_formats = {'%C','%D','%f','%f','%D','%C'}; ds = datastore('outages.csv','TextscanFormats',data_formats);

Cree una tabla alta en la parte superior del almacén de los mismos y convierta la tabla alta en un horario alto. La variable OutageTime se utiliza para los tiempos de fila, ya que es la primera variable DateTime o Duration en la tabla.

T = tall(ds); T = table2timetable(T)
T =    M×5 tall timetable      OutageTime    Region    Loss    Customers    RestorationTime    Cause     __________    ______    ____    _________    _______________    _____          ?           ?        ?          ?               ?             ?           ?           ?        ?          ?               ?             ?           ?           ?        ?          ?               ?             ?       :             :         :       :            :                  :     :             :         :       :            :                  :  Preview deferred. Learn more. 

Limpiar datos perdidos

Algunas de las filas de la tabla alta tienen datos que faltan representados por los valores NaN y NaT . Elimine todas las filas que faltan al menos una pieza de datos.

idx = ~any(ismissing(T),2); T = T(idx,:)
T =    M×5 tall timetable      OutageTime    Region    Loss    Customers    RestorationTime    Cause     __________    ______    ____    _________    _______________    _____          ?           ?        ?          ?               ?             ?           ?           ?        ?          ?               ?             ?           ?           ?        ?          ?               ?             ?       :             :         :       :            :                  :     :             :         :       :            :                  :  Preview deferred. Learn more. 

Duración media del corte de energía por región

Determinar la duración media del corte de energía en cada región. La función findgroups agrupa los datos por los valores categóricos en Region. La función splitapply aplica la función especificada a cada grupo de datos y concatena los resultados juntos.

[G,regions] = findgroups(T.Region); times = splitapply(@mean,T.RestorationTime-T.OutageTime,G)
times =    M×1 tall duration array      ?     ?     ?     :     :  Preview deferred. Learn more. 

Cambie el formato de visualización de los resultados de duración en días y coloque los resultados en una tabla en memoria con las regiones asociadas.

times.Format = 'd'; varnames = {'Regions','MeanOutageDuration'}; maxOutageDurations = gather(table(regions,times,'VariableNames',varnames))
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 3: Completed in 0 sec - Pass 2 of 3: Completed in 0 sec - Pass 3 of 3: Completed in 0 sec Evaluation completed in 2 sec 
maxOutageDurations=5×2 table
     Regions     MeanOutageDuration
    _________    __________________

    MidWest          52.258 days   
    NorthEast        1.8538 days   
    SouthEast         1.835 days   
    SouthWest        2.0212 days   
    West            0.99895 days   

Causas más comunes de interrupción de la energía por región

Determinar la frecuencia con la que cada causa de interrupción de energía ocurre en cada región. En primer lugar, agrupe los datos tanto por causa como por región. Especifique tres salidas a findgroups para devolver información sobre la causa y la región para cada dato. A continuación, utilice splitapply para contar el número de ocurrencias de cada causa en cada región.

[G2,causes,regions] = findgroups(T.Cause,T.Region); C = splitapply(@(x) numel(x),T.Cause,G2)
C =    M×1 tall double column vector      ?     ?     ?     :     :  Preview deferred. Learn more. 

Convierta los resultados en una tabla en memoria y desapile las variables 'Count' y 'Region' . Utilice fillmissing en la tabla en memoria para reemplazar los valores de NaN con ceros.

RegionCauses = gather(table(causes,regions,C,'VariableNames',{'Cause','Region','Count'}))
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 2: Completed in 0 sec - Pass 2 of 2: Completed in 0 sec Evaluation completed in 1 sec 
RegionCauses=43×3 table
         Cause           Region      Count
    ________________    _________    _____

    attack              MidWest        4  
    attack              NorthEast     75  
    attack              SouthEast      6  
    attack              West          44  
    earthquake          NorthEast      1  
    earthquake          West           1  
    energy emergency    MidWest       11  
    energy emergency    NorthEast     11  
    energy emergency    SouthEast     39  
    energy emergency    SouthWest      5  

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

    attack                 4          75            6            0         44 
    earthquake             0           1            0            0          1 
    energy emergency      11          11           39            5         19 
    equipment fault        6          13           28            1         50 
    fire                   0           4            2            0         10 
    severe storm          17          54           86            4         13 
    thunder storm         22          37           39            6          4 
    unknown                4           4            2            0          1 
    wind                  12          19           11            3         15 
    winter storm           9          30           23            1         17 

Consulte también

| |

Temas relacionados