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.

Analice Big Data en MATLAB con Tall arrays

Este ejemplo muestra cómo utilizar matrices altas para trabajar con Big Data en MATLAB®. Puede utilizar matrices altas para realizar una variedad de cálculos en diferentes tipos de datos que no caben en la memoria. Estos incluyen cálculos básicos, así como algoritmos de aprendizaje automático dentro de estadísticas y machine learning Toolbox™.

Este ejemplo funciona en un pequeño subconjunto de datos en un único equipo y, a continuación, se escala para analizar todo el conjunto de datos. Sin embargo, esta técnica de análisis puede ampliarse aún más para trabajar en conjuntos de datos que son tan grandes que no se pueden leer en la memoria, o para trabajar en sistemas como Apache Spark™.

Introducción a Tall arrays

Los arrays altos y las tablas altas se usan para trabajar con datos de memoria que tienen cualquier número de filas. En lugar de escribir código especializado que tenga en cuenta el enorme tamaño de los datos, los arrays y tablas altos le permiten trabajar con grandes conjuntos de datos de forma similar a las matrices de MATLAB® en memoria. La diferencia es que las matrices normalmente permanecen sin evaluar hasta que se solicita que se realicen los cálculos.tall

Esta evaluación diferida permite a MATLAB combinar los cálculos en cola cuando sea posible y tomar el número mínimo de pasadas a través de los datos. Dado que el número de pasadas a través de los datos afecta en gran medida el tiempo de ejecución, se recomienda que solicite la salida solo cuando sea necesario.

Crear para colección de archivosdatastore

La creación de una permite acceder a una colección de datos.datastore A puede procesar arbitrariamente grandes cantidades de datos, y los datos incluso se pueden propagar a través de varios archivos en varias carpetas.datastore Puede crear un para una colección de archivos de texto tabular (aquí se muestra), hojas de cálculo, imágenes, una base de datos SQL (Database Toolbox™ necesario) o archivos de secuencia de Hadoop®.datastore

Cree una para un archivo que contenga datos de la aerolínea.datastore.csv Trate los valores como faltantes para que los Reemplace con valores.'NA'datastoreNaN Seleccione las variables de interés y especifique un tipo de datos categóricos para las variables y.OriginDest Previsualice el contenido.

ds = datastore('airlinesmall.csv'); ds.TreatAsMissing = 'NA'; ds.SelectedVariableNames = {'Year','Month','ArrDelay','DepDelay','Origin','Dest'}; ds.SelectedFormats(5:6) = {'%C','%C'}; pre = preview(ds)
pre=8×6 table
    Year    Month    ArrDelay    DepDelay    Origin    Dest
    ____    _____    ________    ________    ______    ____

    1987     10          8          12        LAX      SJC 
    1987     10          8           1        SJC      BUR 
    1987     10         21          20        SAN      SMF 
    1987     10         13          12        BUR      SJC 
    1987     10          4          -1        SMF      LAX 
    1987     10         59          63        LAX      SJC 
    1987     10          3          -2        SAN      SFO 
    1987     10         11          -1        SEA      LAX 

Crear Tall array

Las matrices altas son similares a las matrices de MATLAB en memoria, excepto que pueden tener cualquier número de filas. Las matrices altas pueden contener datos numéricos, lógicos, de fecha y hora, duración, calendarDuration, categóricas o cadenas. Además, puede convertir cualquier matriz en memoria en una matriz alta. (La matriz en memoria debe ser uno de los tipos de datos admitidos.)A

La clase subyacente de una matriz alta se basa en el tipo de almacén de datos que lo respalda. Por ejemplo, si el datastore contiene datos tabulares, devuelve una tabla alta que contiene los datos.dstall(ds)

tt = tall(ds)
tt =    Mx6 tall table      Year    Month    ArrDelay    DepDelay    Origin    Dest     ____    _____    ________    ________    ______    ____       ?        ?         ?           ?          ?        ?        ?        ?         ?           ?          ?        ?        ?        ?         ?           ?          ?        ?        :        :         :           :          :        :      :        :         :           :          :        : 

La pantalla indica el tipo de datos subyacente e incluye las primeras varias filas de datos. El tamaño de la tabla se muestra como "Mx6" para indicar que MATLAB todavía no sabe cuántas filas de datos hay.

Realizar cálculos en matrices altas

Puede trabajar con matrices altas y tablas altas de una manera similar en la que trabaje con matrices y tablas de MATLAB en memoria.

Un aspecto importante de los arrays altos es que a medida que trabaja con ellos, MATLAB no realiza la mayoría de las operaciones de inmediato. Estas operaciones parecen ejecutarse rápidamente, porque el cálculo real se aplaza hasta que se solicita específicamente la salida. Esta evaluación diferida es importante porque incluso un comando simple como ejecutado en una matriz alta con mil millones de filas no es un cálculo rápido.size(X)

A medida que trabaja con matrices altas, MATLAB realiza un seguimiento de todas las operaciones que se realizarán y optimiza el número de pasadas a través de los datos. Por lo tanto, es normal trabajar con matrices altas no evaluadas y solicitar la salida solo cuando la necesite. MATLAB no conoce el contenido ni el tamaño de matrices altas no evaluadas hasta que solicite que se evalúe y se muestre la matriz.

Calcule el retardo de salida medio.

mDep = mean(tt.DepDelay,'omitnan')
mDep =    tall double      ? 

Recopile resultados en Workspace

El beneficio de la evaluación diferida es que cuando llegue el momento de que MATLAB realice los cálculos, a menudo es posible combinar las operaciones de tal manera que se minimice el número de pasadas a través de los datos. Por lo tanto, incluso si realiza muchas operaciones, MATLAB solo realiza pases adicionales a través de los datos cuando sea absolutamente necesario.

La función fuerza la evaluación de todas las operaciones en cola y lleva la salida resultante a la memoria.gather Dado que devuelve el resultado en MATLAB, debe asegurarse de que el resultado se ajuste en la memoria.gatherentire Por ejemplo, se utiliza en matrices altas que son el resultado de una función que reduce el tamaño de la matriz alta, por ejemplo,,, y así sucesivamente.gathersumminmean

Se utiliza para calcular el retardo de salida medio y llevar la respuesta a la memoria.gather Este cálculo requiere una sola pasada a través de los datos, pero otros cálculos pueden requerir varias pasadas a través de los datos. MATLAB determina el número óptimo de pasadas para el cálculo y muestra esta información en la línea de mandatos.

mDep = gather(mDep)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 2: Completed in 1.1 sec - Pass 2 of 2: Completed in 1 sec Evaluation completed in 2.5 sec 
mDep = 8.1860 

Seleccione subconjunto de Tall array

Puede extraer valores de una matriz alta mediante subíndices o indexado. Puede indexar la matriz a partir de la parte superior o inferior, o mediante un índice lógico. Las funciones y son alternativas útiles a la indexación, lo que le permite explorar las partes primera y última de una matriz alta.headtail Reúna ambas variables al mismo tiempo para evitar pases adicionales a través de los datos.

h = head(tt); tl = tail(tt); [h,tl] = gather(h,tl)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 0.84 sec Evaluation completed in 0.99 sec 
h=8×6 table
    Year    Month    ArrDelay    DepDelay    Origin    Dest
    ____    _____    ________    ________    ______    ____

    1987     10          8          12        LAX      SJC 
    1987     10          8           1        SJC      BUR 
    1987     10         21          20        SAN      SMF 
    1987     10         13          12        BUR      SJC 
    1987     10          4          -1        SMF      LAX 
    1987     10         59          63        LAX      SJC 
    1987     10          3          -2        SAN      SFO 
    1987     10         11          -1        SEA      LAX 

tl=8×6 table
    Year    Month    ArrDelay    DepDelay    Origin    Dest
    ____    _____    ________    ________    ______    ____

    2008     12         14           1        DAB      ATL 
    2008     12         -8          -1        ATL      TPA 
    2008     12          1           9        ATL      CLT 
    2008     12         -8          -4        ATL      CLT 
    2008     12         15          -2        BOS      LGA 
    2008     12        -15          -1        SFO      ATL 
    2008     12        -12           1        DAB      ATL 
    2008     12         -1          11        ATL      IAD 

Se usa para seleccionar un subconjunto de 10.000 filas de los datos para el código de creación de prototipos antes de escalar al conjunto de datos completo.head

ttSubset = head(tt,10000);

Seleccione datos por condición

Puede utilizar operaciones lógicas típicas en matrices altas, que son útiles para seleccionar datos relevantes o eliminar valores atípicos con indexación lógica. La expresión lógica crea un vector lógico alto, que luego se utiliza para subíndice, identificando las filas donde la condición es verdadera.

Seleccione solo los vuelos fuera de Boston comparando los elementos de la variable categórica con el valor.Origin'BOS'

idx = (ttSubset.Origin == 'BOS'); bosflights = ttSubset(idx,:)
bosflights =    207x6 tall table      Year    Month    ArrDelay    DepDelay    Origin    Dest     ____    _____    ________    ________    ______    ____      1987     10         -8           0        BOS      LGA      1987     10        -13          -1        BOS      LGA      1987     10         12          11        BOS      BWI      1987     10         -3           0        BOS      EWR      1987     10         -5           0        BOS      ORD      1987     10         31          19        BOS      PHL      1987     10         -3           0        BOS      CLE      1987     11          5           5        BOS      STL       :        :         :           :          :        :      :        :         :           :          :        : 

Puede utilizar la misma técnica de indexación para eliminar filas con datos faltantes o valores NaN de la matriz Tall.

idx = any(ismissing(ttSubset),2);  ttSubset(idx,:) = [];

Determine los mayores retrasos

Debido a la naturaleza del Big Data, ordenar todos los datos usando métodos tradicionales como o es ineficiente.sortsortrows Sin embargo, la función para matrices altas devuelve las filas superiores en orden ordenado.topkrowsk

Calcule los 10 mejores retrasos de salida.

biggestDelays = topkrows(ttSubset,10,'DepDelay'); biggestDelays = gather(biggestDelays)
Evaluating tall expression using the Local MATLAB Session: Evaluation completed in 0.1 sec 
biggestDelays=10×6 table
    Year    Month    ArrDelay    DepDelay    Origin    Dest
    ____    _____    ________    ________    ______    ____

    1988      3        772         785        ORD      LEX 
    1989      3        453         447        MDT      ORD 
    1988     12        397         425        SJU      BWI 
    1987     12        339         360        DEN      STL 
    1988      3        261         273        PHL      ROC 
    1988      7        261         268        BWI      PBI 
    1988      2        257         253        ORD      BTV 
    1988      3        236         240        EWR      FLL 
    1989      2        263         227        BNA      MOB 
    1989      6        224         225        DFW      JAX 

Visualice datos en Tall arrays

Trazar todos los puntos de un conjunto de datos grandes no es factible. Por esa razón, la visualización de matrices altas implica reducir el número de puntos de datos mediante muestreo o binning.

Visualice el número de vuelos por año con un histograma. Las funciones de visualización pasan a través de los datos y evalúan inmediatamente la solución cuando se llaman, por lo que no es necesario.gather

histogram(ttSubset.Year,'BinMethod','integers')
Evaluating tall expression using the Local MATLAB Session: Evaluation completed in 0.64 sec 
xlabel('Year') ylabel('Number of Flights') title('Number of Flights by Year, 1987 - 1989')

Escalar a conjunto de datos completo

En lugar de usar los datos más pequeños devueltos, puede escalar verticalmente para realizar los cálculos en todo el conjunto de datos mediante el uso de los resultados de.headtall(ds)

tt = tall(ds); idx = any(ismissing(tt),2);  tt(idx,:) = []; mnDelay = mean(tt.DepDelay,'omitnan'); biggestDelays = topkrows(tt,10,'DepDelay');  [mnDelay,biggestDelays] = gather(mnDelay,biggestDelays)
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 2: Completed in 0.64 sec - Pass 2 of 2: Completed in 0.96 sec Evaluation completed in 1.7 sec 
mnDelay = 8.1310 
biggestDelays=10×6 table
    Year    Month    ArrDelay    DepDelay    Origin    Dest
    ____    _____    ________    ________    ______    ____

    1991      3          -8        1438       MCO      BWI 
    1998     12         -12        1433       CVG      ORF 
    1995     11        1014        1014       HNL      LAX 
    2007      4         914         924       JFK      DTW 
    2001      4         887         884       MCO      DTW 
    2008      7         845         855       CMH      ORD 
    1988      3         772         785       ORD      LEX 
    2008      4         710         713       EWR      RDU 
    1998     10         679         673       MCI      DFW 
    2006      6         603         626       ABQ      PHX 

histogram(tt.Year,'BinMethod','integers')
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 2: Completed in 1.7 sec - Pass 2 of 2: Completed in 0.84 sec Evaluation completed in 3 sec 
xlabel('Year') ylabel('Number of Flights') title('Number of Flights by Year, 1987 - 2008')

Se utiliza para desglosar aún más el número de vuelos por mes para todo el conjunto de datos.histogram2 Dado que las ubicaciones para y se conocen con antelación, especifique las aristas de la ubicación para evitar un paso adicional a través de los datos.MonthYear

year_edges = 1986.5:2008.5; month_edges = 0.5:12.5; histogram2(tt.Year,tt.Month,year_edges,month_edges,'DisplayStyle','tile')
Evaluating tall expression using the Local MATLAB Session: - Pass 1 of 1: Completed in 1.5 sec Evaluation completed in 1.5 sec 
colorbar xlabel('Year') ylabel('Month') title('Airline Flights by Month and Year, 1987 - 2008')

Análisis de datos y aprendizaje automático con Tall arrays

Puede realizar análisis estadísticos más sofisticados en matrices altas, incluido el cálculo del análisis predictivo y la realización del aprendizaje automático, utilizando las funciones de estadísticas y machine learning Toolbox™.

Para obtener más información, consulte.Soporte para Tall array, notas de uso y limitaciones (Statistics and Machine Learning Toolbox)

Escalar a sistemas de Big Data

Una capacidad clave de las matrices altas en MATLAB es la conectividad con plataformas de macrodatos, como los clústeres de computación y Apache Spark™.

Este ejemplo solo raye la superficie de lo que es posible con matrices altas para Big Data. Consulte para obtener más información sobre el uso de:Extienda los arrays altos con otros productos

  • Herramientas de estadísticas y aprendizaje automático™

  • Database Toolbox™

  • Caja de herramientas de computación paralela™

  • MATLAB® servidor paralelo™

  • Compilador de MATLAB™

Consulte también

Temas relacionados