Procesos organizados para limpiar datos

34

Desde mi limitada experiencia en ciencia de datos con R, me di cuenta de que limpiar datos incorrectos es una parte muy importante de la preparación de datos para el análisis.

¿Existen mejores prácticas o procesos para limpiar los datos antes de procesarlos? Si es así, ¿existen herramientas automatizadas o semiautomáticas que implementen algunas de estas mejores prácticas?

Jay Godse
fuente
1
probablemente sea una buena idea aclarar un poco, lo que quieres decir con los datos de limpieza , parece un poco confuso para mi opinión
MolbOrg
2
Explicar más a fondo qué significan los datos de limpieza sería útil. En el contexto en el que trabajo, la limpieza no tiene nada que ver con el formateo (solo llamaría a eso análisis / importación), sino que significaría hablar de datos ruidosos del usuario y verificar su coherencia. Las técnicas utilizadas son específicas del conjunto de datos, desde simples reglas estadísticas hasta algoritmos difusos, especialmente cuando los datos son escasos.
AdrianBR

Respuestas:

21

R contiene algunos estándar funciones para la manipulación de datos, que pueden ser utilizados para la limpieza de datos, en su base de paquete ( gsub, transform, etc.), así como en varios paquetes de terceros, tales como stringr , reshape / reshape2 , y plyr / dplyr . En el siguiente documento se describen ejemplos y mejores prácticas de uso de estos paquetes y sus funciones: http://vita.had.co.nz/papers/tidy-data.pdf .

Además, R ofrece algunos paquetes específicamente enfocados en la limpieza y transformación de datos:

Un enfoque integral y coherente de datos de limpieza en R, incluyendo ejemplos y el uso de editrules y deducorrect paquetes, así como una descripción de flujo de trabajo ( marco ) de los datos de limpieza en R, se presenta en el siguiente documento, que recomiendo encarecidamente: http : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf .

Aleksandr Blekh
fuente
2
También agregaría dplyr, que es una reformulación optimizada de ciertas plyrherramientas, y data.tableque es un enfoque completamente diferente para manipular datos. Ambos por Hadley Wickham.
shadowtalker
@ssdecontrol: Estoy de acuerdo - actualicé la respuesta. Hadley es el autor del dplyrpaquete, pero no del data.tableuno.
Aleksandr Blekh
16

Desde mi punto de vista, esta pregunta es adecuada para una respuesta de dos pasos. La primera parte, llamémoslo preprocesamiento suave , podría tomarse como el uso de diferentes algoritmos de minería de datos para preprocesar datos de tal manera que los haga adecuados para futuros análisis. Tenga en cuenta que este podría ser el análisis en sí mismo, en caso de que el objetivo sea lo suficientemente simple como para ser abordado de una sola vez.

La segunda parte, el preprocesamiento duro , en realidad es anterior a cualquier otro proceso, y se puede tomar como el uso de herramientas simples o scripts para limpiar datos, seleccionando contenidos específicos para procesar. Para este problema, POSIX nos proporciona un maravilloso conjunto de herramientas mágicas, que se pueden utilizar para componer scripts de preprocesamiento concisos y muy potentes.

Por ejemplo, para las personas que manejan datos provenientes de sitios web sociales (twitter, facebook, ...), la recuperación de datos generalmente genera archivos con un formato muy específico, aunque no siempre está bien estructurado, ya que pueden contener campos faltantes, por lo que . Para estos casos, un simple awkscript podría limpiar los datos, produciendo un archivo de entrada válido para su posterior procesamiento. A partir del conjunto de magia, también se puede señalar grep, sed, cut, join, paste,sort , y toda una multitud de otras herramientas.

En caso de que el archivo fuente tenga demasiados detalles, también puede ser necesario producir un paquete de métodos para limpiar los datos. En tales casos, generalmente es mejor usar lenguajes de script (que no sean shell), como Python, Ruby y Perl. Esto permite construir API 's para seleccionar datos específicos de una manera muy sencilla y reutilizable. Dichas API a veces se hacen públicas por sus escritores, como IMDbPY , Stack Exchange API y muchos otros.

Entonces, respondiendo a la pregunta: ¿hay mejores prácticas? Por lo general, depende de tu tarea. Si siempre tratará con el mismo formato de datos, generalmente es mejor escribir un script organizado para preprocesarlo; mientras que si solo necesita una limpieza simple y rápida en algún conjunto de datos, cuente con herramientas POSIX para scripts de shell concisos que harán todo el trabajo mucho más rápido que un script de Python, más o menos. Dado que la limpieza depende tanto del conjunto de datos como de sus propósitos, es difícil tener todo listo. Sin embargo, hay muchas API que lo ubican a la mitad del problema.

Rubens
fuente
hm: obtenga datos, formatee datos (awk sed grep stuff), elimine el ruido como primer paso, luego vaya más profundo. así que no es difícil el preprocesamiento viene al principio, si usa sus termias
MolbOrg
@ MolbOrg Sí, a eso me refería. Llamé al preprocesamiento duro del lado de las secuencias de comandos y al preprocesamiento suave del uso de algoritmos de minería de datos que generalmente reducen el tamaño del problema (limpia la base de datos). También noté que la segunda parte, el preprocesamiento duro, en realidad es anterior a cualquier otro proceso . Si no está muy claro con tales términos, con gusto consideraría cualquier otra sugerencia para mejorar la respuesta.
Rubens
1
Ah, sí, no prestó suficiente atención, el procesamiento previo de datos en bruto . Cajero automático probado: sí, el perl oneliner es 3 veces más lento que grep) para cadenas de 3.5kk en 300MB, para perl tomó 1.1 segundos, para grep 0.31 segundos. Vi un artículo donde los puntos en los que Perl Regexp es lento, mucho más lento de lo que puede ser en la práctica (sospecho que también es para grep) http://swtch.com/~rsc/regexp/regexp1.html
MolbOrg
@MolbOrg ¡Buena referencia! AFAIK, greputiliza la expresión regular básica POSIX por defecto, y permite la expresión regular POSIX extendida cuando se ejecuta como grep -E, y para PCRE cuando se ejecuta como grep -P.
Rubens
1
Está es una publicación muy buena. R es excelente para la manipulación de datos, pero puede ser bastante engorroso con la limpieza de datos debido a su sintaxis detallada para la manipulación de cadenas y la adherencia bastante rígida a listas y matrices para estructuras de datos.
shadowtalker
11

Una razón por la cual la limpieza de datos rara vez está completamente automatizada es que se necesita tanto juicio para definir qué significa "limpieza" dado su problema, métodos y objetivos particulares.

Puede ser tan simple como imputar valores para cualquier dato faltante, o puede ser tan complejo como diagnosticar errores de entrada de datos o errores de transformación de datos de procesos automatizados anteriores (por ejemplo, codificación, censura, transformación). En estos dos últimos casos, los datos se ven bien por su apariencia externa, pero son realmente erróneos. Tal diagnóstico a menudo requiere análisis e inspección manuales, y también información fuera de banda, como información sobre las fuentes de datos y los métodos que usaron.

Además, algunos métodos de análisis de datos funcionan mejor cuando los datos erróneos o faltantes se dejan en blanco (o N / A) en lugar de imputarse o recibir un valor predeterminado. Esto es cierto cuando hay representaciones explícitas de incertidumbre e ignorancia, como las funciones de Creencias Dempster-Shafer.

Finalmente, es útil tener diagnósticos y métricas específicas para el proceso de limpieza. Son valores faltantes o erróneos distribuidos al azar o están concentrados de alguna manera que pueda afectar el resultado del análisis. Es útil probar los efectos de estrategias o algoritmos de limpieza alternativos para ver si afectan los resultados finales.

Dadas estas preocupaciones, sospecho mucho de cualquier método o proceso que trate la limpieza de datos de manera superficial, arrogante o totalmente automatizada. Hay muchos demonios escondidos en esos detalles y vale la pena prestarles mucha atención.

MrMeritology
fuente
1
Como comentario adicional: creo que detectar datos errosos causados ​​por algún problema más adelante en el proceso es una habilidad de oro. Muchas veces me he preguntado por qué mi análisis produjo resultados extraños y cuando miré la tubería encontré algún tipo de error. Por ejemplo: me preguntaba por qué todos mis datos estaban muy sesgados hacia los altos precios, FUERA de mi modelo mental. Cuando pregunté, descubrí que algún subcontratista entendió mal la información y entregó datos para grupos de altos ingresos, mientras que queríamos datos mixtos ...
Christian Sauer
¡Sí! Los errores de datos son frecuentemente signos de problemas de proceso. Saber en qué parte del proceso se introdujeron los errores y también el mecanismo, será de gran ayuda con el proceso de limpieza. Pero aún mejor es solucionar los problemas del proceso para que produzcan datos limpios (o más limpios).
MrMeritology
5

Acerca de la limpieza automática: Realmente no puede limpiar los datos automáticamente, porque la cantidad de errores y la definición de un error a menudo dependen de los datos. Por ejemplo: la columna "Ingresos" puede contener valores negativos, que son un error. Debe hacer algo al respecto. Por otro lado, una columna "ahorros mensuales" podría contener razonablemente valores negativos.

Dichos errores dependen mucho del dominio, por lo que para encontrarlos, debe tener conocimiento del dominio, algo en lo que los humanos se destacan, los procesos automatizados no tanto.

Donde puede y debe automatizar es proyectos repetidos. Por ejemplo, un informe que debe producirse mensualmente. Si detecta errores, debe colocar algún proceso automatizado que pueda detectar este tipo de errores en los meses siguientes, liberando su tiempo.

Christian Sauer
fuente
5

Creo que no existe una técnica universal para "limpiar" los datos antes de hacer una investigación real. Por otro lado, estoy apuntando a hacer tanta investigación reproducible posible. Al hacer una investigación reproducible, si usó técnicas de limpieza con errores o con parámetros / supuestos deficientes, otros podrían detectarlo.

Hay un buen tejedor de paquetes R que ayuda mucho en la investigación reproducible.

Por supuesto, no toda la investigación podría reproducirse completamente (por ejemplo, datos de Twitter en vivo), pero al menos puede documentar fácilmente los pasos de limpieza, formateo y preprocesamiento.

Puede consultar mi evaluación preparada para el curso de Investigación reproducible en Coursera .

Damian Melniczuk
fuente
3

OpenRefine (anteriormente Google Refine) es una gran herramienta donde puede realizar de forma interactiva la limpieza y transformación de datos. Su salida final se puede exportar a una variedad de formatos estándar (json, csv) o cualquier formato personalizado (por ejemplo: wiki).

Los duplicados exactos se pueden manejar en OpenRefine ordenando + usando la función "en blanco". También tiene una función de agrupación de cadenas aproximadas (difusa) donde puede agrupar duplicados de aspecto similar, como nombres o direcciones de empresas. Esta característica sola lo hace increíble.

Thyag
fuente
1
Esta es una herramienta fantástica y poco informada.
thanks_in_advance
2

Hay un curso completo dedicado a esto en Coursera. Es posible que desee repasar las técnicas que mencionan y la parte importante es saber cuándo usar qué.

https://www.coursera.org/learn/data-cleaning

Siempre es mejor hacerlo manualmente en lugar de automatizar, ya que cada conjunto de datos tiene sus propios problemas y problemas, y no todos los pasos son aplicables a todos los conjuntos de datos.

RAM
fuente