Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Limpiar datos confusos y datos ausentes en MATLAB

Cuando una tabla es confusa y tiene valores de datos ausentes, puede limpiarla de diferentes formas. Primero, puede identificar los datos ausentes con la herramienta de importación o con funciones como summary y ismissing. Después de identificar los valores ausentes, puede estandarizar, rellenar o eliminar los valores ausentes con las funciones standardizeMissing, fillmissing o rmmissing. Después, puede seguir limpiando la tabla reorganizándola. Puede utilizar funciones como sortrows o movevars para reorganizar las filas y variables de la tabla en el orden que convenga.

Examinar datos en un archivo

Examine los datos del archivo de muestra de valores separados por comas (CSV), messy.csv. Una manera de examinar los datos es utilizar la herramienta de importación. Esta herramienta previsualiza los datos y permite especificar cómo importarlos. La herramienta de importación muestra que messy.csv tiene cinco columnas. Algunas columnas tienen texto y las otras tienen valores numéricos.

messy.png

El archivo contiene muchos indicadores de datos ausentes distintos:

  • Texto vacío

  • Punto (.)

  • NA

  • NaN

  • -99

La herramienta de importación reconoce automáticamente algunos indicadores de datos ausentes, como NaN en columnas numéricas y texto vacío en columnas de texto.

La herramienta también resalta otros indicadores como el texto vacío, el punto y NA que aparecen en la columna B. Estos valores no son valores ausentes estándar. Pero como valores no numéricos en una columna numérica, es probable que tengan el propósito de representar valores ausentes. Cuando importa los datos, puede especificar que estos valores también deban tratarse como si fueran NaN.

El valor de -99 también podría considerarse un indicador de valores ausentes. Por el contrario, cuando los datos numéricos constan de valores positivos, algunas personas especifican, a veces, un valor negativo único como indicador de datos ausentes. Si un número como -99 representa datos ausentes en su tabla, debe especificar que se trata de un valor ausente cuando limpie la tabla.

Importar datos como tabla

Puede importar los datos al área de trabajo de MATLAB® desde la herramienta de importación. Pero también puede utilizar la función readtable para leer los datos de un archivo e importarlos como una tabla.

Importe los datos en messy.csv con la función readtable. Para leer los datos de texto en variables de tabla que sean arreglos de cadenas, utilice el argumento nombre-valor "TextType". Para tratar los valores no numéricos especificados de columnas numéricas como valores ausentes, utilice el argumento nombre-valor "TreatAsMissing". En las variables de tabla B, D y E, readtable importa texto vacío, ., y NA como valores NaN. No obstante, los valores que sean -99 no cambiarán porque son numéricos.

Además, readtable trata A y C como texto. Por lo tanto, convierte el texto vacío de esas columnas en cadenas ausentes, que se muestran como <missing>.

messyTable = readtable("messy.csv","TextType","string","TreatAsMissing",[".","NA"])
messyTable=21×5 table
      A        B          C         D       E  
    ______    ____    _________    ____    ____

    "afe1"     NaN    "yes"           3       3
    "egh3"     NaN    "no"            7       7
    "wth4"     -99    "yes"         -99     -99
    "atn2"    23.7    <missing>     NaN    23.7
    "arg1"     NaN    "yes"           5     NaN
    "jre3"    34.6    "yes"        34.6    34.6
    "wen9"     234    "yes"         234     234
    "ple2"       2    "no"            2       2
    "dbo8"       5    "no"            5       5
    "oii4"       5    "yes"           5       5
    "wnk3"     245    "yes"         245     245
    "abk6"     563    "no"          563     563
    "pnj5"     463    "no"          463     463
    "wnn3"       6    "no"            6       6
    "oks9"      23    "yes"          23      23
    "wba3"      14    "yes"          14      14
      ⋮

Ver resumen de tabla

Para ver un resumen de la tabla, utilice la función summary. Para cada variable de tabla, muestra el tipo de datos y otras estadísticas descriptivas. Por ejemplo, summary muestra el número de valores ausentes en cada variable numérica de messyTable.

summary(messyTable)
Variables:

    A: 21x1 string

    B: 21x1 double

        Values:

            Min             -99   
            Median          22.5  
            Max             563   
            NumMissing      3     

    C: 21x1 string

    D: 21x1 double

        Values:

            Min             -99   
            Median          14    
            Max             563   
            NumMissing      2     

    E: 21x1 double

        Values:

            Min             -99   
            Median          21.5  
            Max             563   
            NumMissing      1     

Encontrar filas con valores ausentes

Para encontrar las filas de messyTable que tengan al menos un valor ausente, utilice la función ismissing. Si tiene valores ausentes no estándar en sus datos, como -99, puede especificarlos junto con los valores ausentes estándar.

La salida de ismissing es un arreglo lógico que identifica los elementos de messyTable que tienen valores ausentes.

missingElements = ismissing(messyTable,{string(missing),NaN,-99})
missingElements = 21x5 logical array

   0   1   0   0   0
   0   1   0   0   0
   0   1   0   1   1
   0   0   1   1   0
   0   1   0   0   1
   0   0   0   0   0
   0   0   0   0   0
   0   0   0   0   0
   0   0   0   0   0
   0   0   0   0   0
      ⋮

Para crear un vector lógico que identifique filas con valores ausentes, utilice la función any.

rowsWithMissingValues = any(missingElements,2)
rowsWithMissingValues = 21x1 logical array

   1
   1
   1
   1
   1
   0
   0
   0
   0
   0
      ⋮

Para indexar en la tabla y devolver únicamente las filas con valores ausentes, utilice el vector lógico rowsWithMissingValues.

missingValuesTable = messyTable(rowsWithMissingValues,:)
missingValuesTable=6×5 table
      A        B          C         D      E  
    ______    ____    _________    ___    ____

    "afe1"     NaN    "yes"          3       3
    "egh3"     NaN    "no"           7       7
    "wth4"     -99    "yes"        -99     -99
    "atn2"    23.7    <missing>    NaN    23.7
    "arg1"     NaN    "yes"          5     NaN
    "gry5"      21    "yes"        NaN      21

Rellenar valores ausentes

Una estrategia para limpiar los valores ausentes en una tabla es reemplazarlos con valores más significativos. Puede reemplazar los valores ausentes no estándar insertando valores ausentes estándar. Y puede rellenar los valores ausentes con valores ajustados. Por ejemplo, puede rellenar valores ausentes con sus vecinos más próximos o con el valor medio de una variable de tabla.

En este ejemplo, -99 es un valor no estándar para indicar un valor ausente. Para reemplazar las instancias de -99 por valores ausentes estándar, utilice la función standardizeMissing. NaN es el valor ausente estándar para arreglos numéricos de punto flotante de precisión simple y de doble precisión.

messyTable = standardizeMissing(messyTable,-99)
messyTable=21×5 table
      A        B          C         D       E  
    ______    ____    _________    ____    ____

    "afe1"     NaN    "yes"           3       3
    "egh3"     NaN    "no"            7       7
    "wth4"     NaN    "yes"         NaN     NaN
    "atn2"    23.7    <missing>     NaN    23.7
    "arg1"     NaN    "yes"           5     NaN
    "jre3"    34.6    "yes"        34.6    34.6
    "wen9"     234    "yes"         234     234
    "ple2"       2    "no"            2       2
    "dbo8"       5    "no"            5       5
    "oii4"       5    "yes"           5       5
    "wnk3"     245    "yes"         245     245
    "abk6"     563    "no"          563     563
    "pnj5"     463    "no"          463     463
    "wnn3"       6    "no"            6       6
    "oks9"      23    "yes"          23      23
    "wba3"      14    "yes"          14      14
      ⋮

Para rellenar los valores ausentes, utilice la función fillmissing. Proporciona muchos métodos para rellenar valores ausentes. Por ejemplo, devuelva una tabla nueva, filledTable, donde rellene valores ausentes con sus vecinos más próximos que no sean valores ausentes.

filledTable = fillmissing(messyTable,"nearest")
filledTable=21×5 table
      A        B        C       D       E  
    ______    ____    _____    ____    ____

    "afe1"    23.7    "yes"       3       3
    "egh3"    23.7    "no"        7       7
    "wth4"    23.7    "yes"       7    23.7
    "atn2"    23.7    "yes"       5    23.7
    "arg1"    34.6    "yes"       5    34.6
    "jre3"    34.6    "yes"    34.6    34.6
    "wen9"     234    "yes"     234     234
    "ple2"       2    "no"        2       2
    "dbo8"       5    "no"        5       5
    "oii4"       5    "yes"       5       5
    "wnk3"     245    "yes"     245     245
    "abk6"     563    "no"      563     563
    "pnj5"     463    "no"      463     463
    "wnn3"       6    "no"        6       6
    "oks9"      23    "yes"      23      23
    "wba3"      14    "yes"      14      14
      ⋮

Eliminar filas con valores ausentes

Otra estrategia para limpiar los valores ausentes en una tabla es eliminar las filas que los contienen.

Para eliminar filas con valores ausentes, utilice la función rmmissing.

remainingTable = rmmissing(messyTable)
remainingTable=15×5 table
      A        B        C       D       E  
    ______    ____    _____    ____    ____

    "jre3"    34.6    "yes"    34.6    34.6
    "wen9"     234    "yes"     234     234
    "ple2"       2    "no"        2       2
    "dbo8"       5    "no"        5       5
    "oii4"       5    "yes"       5       5
    "wnk3"     245    "yes"     245     245
    "abk6"     563    "no"      563     563
    "pnj5"     463    "no"      463     463
    "wnn3"       6    "no"        6       6
    "oks9"      23    "yes"      23      23
    "wba3"      14    "yes"      14      14
    "pkn4"       2    "no"        2       2
    "adw3"      22    "no"       22      22
    "poj2"    34.6    "yes"    34.6    34.6
    "bas8"      23    "no"       23      23

Ordenar las filas de una tabla

Una vez que haya limpiado una tabla, puede organizarla de otras maneras. Por ejemplo, puede ordenar las filas de una tabla por los valores de una o más variables.

Ordene las filas por los valores de la primera variable, A.

sortedTable = sortrows(remainingTable)
sortedTable=15×5 table
      A        B        C       D       E  
    ______    ____    _____    ____    ____

    "abk6"     563    "no"      563     563
    "adw3"      22    "no"       22      22
    "bas8"      23    "no"       23      23
    "dbo8"       5    "no"        5       5
    "jre3"    34.6    "yes"    34.6    34.6
    "oii4"       5    "yes"       5       5
    "oks9"      23    "yes"      23      23
    "pkn4"       2    "no"        2       2
    "ple2"       2    "no"        2       2
    "pnj5"     463    "no"      463     463
    "poj2"    34.6    "yes"    34.6    34.6
    "wba3"      14    "yes"      14      14
    "wen9"     234    "yes"     234     234
    "wnk3"     245    "yes"     245     245
    "wnn3"       6    "no"        6       6

Ordene las filas en orden descendente por C y, a continuación, ordénelas por orden ascendente por A.

sortedBy2Vars = sortrows(remainingTable,["C","A"],["descend","ascend"])
sortedBy2Vars=15×5 table
      A        B        C       D       E  
    ______    ____    _____    ____    ____

    "jre3"    34.6    "yes"    34.6    34.6
    "oii4"       5    "yes"       5       5
    "oks9"      23    "yes"      23      23
    "poj2"    34.6    "yes"    34.6    34.6
    "wba3"      14    "yes"      14      14
    "wen9"     234    "yes"     234     234
    "wnk3"     245    "yes"     245     245
    "abk6"     563    "no"      563     563
    "adw3"      22    "no"       22      22
    "bas8"      23    "no"       23      23
    "dbo8"       5    "no"        5       5
    "pkn4"       2    "no"        2       2
    "ple2"       2    "no"        2       2
    "pnj5"     463    "no"      463     463
    "wnn3"       6    "no"        6       6

Ordenándolas por C, las filas se agrupan primero por "yes", seguidas de "no". Por lo tanto, ordenándolas por A, las filas se clasifican alfabéticamente.

Para reordenar la tabla de forma que A y C estén juntas, utilice la función movevars.

sortedRowsAndMovedVars = movevars(sortedBy2Vars,"C","After","A")
sortedRowsAndMovedVars=15×5 table
      A         C       B       D       E  
    ______    _____    ____    ____    ____

    "jre3"    "yes"    34.6    34.6    34.6
    "oii4"    "yes"       5       5       5
    "oks9"    "yes"      23      23      23
    "poj2"    "yes"    34.6    34.6    34.6
    "wba3"    "yes"      14      14      14
    "wen9"    "yes"     234     234     234
    "wnk3"    "yes"     245     245     245
    "abk6"    "no"      563     563     563
    "adw3"    "no"       22      22      22
    "bas8"    "no"       23      23      23
    "dbo8"    "no"        5       5       5
    "pkn4"    "no"        2       2       2
    "ple2"    "no"        2       2       2
    "pnj5"    "no"      463     463     463
    "wnn3"    "no"        6       6       6

Consulte también

| | | | | | | | |

Temas relacionados