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.
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
table
| ismissing
| standardizeMissing
| fillmissing
| rmmissing
| sortrows
| movevars
| Import Tool
| readtable
| summary