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?
r
data-cleaning
Jay Godse
fuente
fuente
Respuestas:
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 .
fuente
dplyr
, que es una reformulación optimizada de ciertasplyr
herramientas, ydata.table
que es un enfoque completamente diferente para manipular datos. Ambos por Hadley Wickham.dplyr
paquete, pero no deldata.table
uno.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
awk
script 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ñalargrep
,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.
fuente
grep
utiliza la expresión regular básica POSIX por defecto, y permite la expresión regular POSIX extendida cuando se ejecuta comogrep -E
, y para PCRE cuando se ejecuta comogrep -P
.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.
fuente
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.
fuente
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 .
fuente
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.
fuente
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.
fuente