Processos organizados para limpar dados


34

Do meu limitado interesse pela ciência de dados usando R, percebi que limpar dados ruins é uma parte muito importante da preparação de dados para análise.

Existem práticas recomendadas ou processos para limpar dados antes de processá-los? Em caso afirmativo, existem ferramentas automatizadas ou semi-automatizadas que implementam algumas dessas práticas recomendadas?


11
provavelmente é boa idéia para limpar um pouco, o que quer dizer em dados de limpeza , parece um pouco confuso para minha opinião
MolbOrg

2
Explicar melhor o que significa limpeza de dados seria útil. No contexto em que trabalho, a limpeza não tem nada a ver com a formatação - eu chamaria isso de análise / importação -, mas significaria falar dados ruidosos do usuário e verificar a coerência. As técnicas utilizadas são específicas do conjunto de dados, de regras estatísticas simples a algoritmos difusos, especialmente quando os dados são escassos.
AdrianBR 16/05

Respostas:


21

R contém algumas padrão funções para manipulação de dados, que podem ser utilizados para limpeza de dados, na sua base de pacote ( gsub, transform, etc.), bem como em vários pacotes de terceiros, tais como stringr , remodelagem / reshape2 , e plyr / dplyr . Exemplos e práticas recomendadas de uso para esses pacotes e suas funções são descritos no documento a seguir: http://vita.had.co.nz/papers/tidy-data.pdf .

Além disso, o R oferece alguns pacotes especificamente focados na limpeza e transformação de dados:

Uma abordagem abrangente e coerente para a limpeza de dados em R, incluindo exemplos e uso de editrules e pacotes com deducorreção , bem como uma descrição do fluxo de trabalho ( estrutura ) da limpeza de dados em R, é apresentada no documento a seguir, que eu recomendo: http : //cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf .


2
Eu também acrescentaria dplyr, que é uma reformulação otimizada de certas plyrferramentas e data.tableque é uma abordagem completamente diferente para manipular dados. Ambos por Hadley Wickham.
shadowtalker

@ssdecontrol: Eu concordo - atualizei a resposta. Hadley é o autor do dplyrpacote, mas não o data.tableprimeiro.
Aleksandr Blekh

16

Do meu ponto de vista, esta pergunta é adequada para uma resposta em duas etapas. A primeira parte, vamos chamá-lo de pré - processamento suave , pode ser tomada como o uso de diferentes algoritmos de mineração de dados para pré-processar os dados de maneira a torná-los adequados para análises posteriores. Observe que essa poderia ser a própria análise, caso o objetivo seja simples o suficiente para ser abordado de uma só vez.

A segunda parte, o pré-processamento rígido , na verdade é anterior a qualquer outro processo e pode ser considerada como o uso de ferramentas ou scripts simples para limpar dados, selecionando conteúdos específicos a serem processados. Para esse problema, o POSIX fornece um maravilhoso conjunto de ferramentas mágicas, que podem ser usadas para compor scripts concisos - e muito poderosos - de pré-processamento.

Por exemplo, para pessoas que lidam com dados provenientes de sites sociais (twitter, facebook, ...), a recuperação de dados geralmente gera arquivos com um formato muito específico - embora nem sempre seja bem estruturado, pois podem conter campos ausentes e, portanto, . Nesses casos, um awkscript simples pode limpar os dados, produzindo um arquivo de entrada válido para processamento posterior. A partir do conjunto mágica, pode-se também ressaltar grep, sed, cut, join, paste, sort, e uma multidão inteira de outras ferramentas.

Caso o arquivo de origem tenha muitos detalhes, talvez também seja necessário produzir um conjunto de métodos para limpar os dados. Nesses casos, geralmente é melhor usar linguagens de script (que não sejam shell), como Python, Ruby e Perl. Isso permite a criação de APIs para selecionar dados específicos de uma maneira muito direta e reutilizável. Às vezes, essas APIs são tornadas públicas por seus escritores, como IMDbPY , API Stack Exchange e muitas outras.

Então, respondendo à pergunta: existem práticas recomendadas? Geralmente depende da sua tarefa. Se você sempre lida com o mesmo formato de dados, geralmente é melhor escrever um script organizado para pré-processá-lo; enquanto que, se você precisar de uma limpeza simples e rápida em alguns conjuntos de dados, conte com as ferramentas POSIX para scripts concisos de shell que farão todo o trabalho muito mais rapidamente do que um script Python. Como a limpeza depende do conjunto de dados e dos seus objetivos, é difícil ter tudo pronto. No entanto, existem muitas APIs que o colocam no meio do problema.


hm - obtenha dados, formate dados (awk sed grep stuff), remova o ruído como primeiro passo e depois vá mais fundo. assim is't pré-processamento difícil vem em primeiro lugar, se o uso suas termas
MolbOrg

@MolbOrg Sim, foi isso que eu quis dizer. Chamei pré - processamento rígido do lado dos scripts e pré - processamento suave de uso de algoritmos de mineração de dados que geralmente reduzem o tamanho do problema (limpa o banco de dados). Também observei que a segunda parte, pré-processamento rígido, vem antes de qualquer outro processo . Se não estiver muito claro com esses termos, considerarei com prazer outras sugestões para melhorar a resposta.
Rubens

11
ah sim, não prestou atenção suficiente, pré-processamento de dados brutos . Atm testado - sim, o perl oneliner é 3 vezes mais lento que o grep) para seqüências de caracteres de 3.5kk em 300MB, para o perl demorou 1,1 s e para o grep 0,31 s. Eu vi um artigo em que pontos que o perl regexp é lento, muito mais lento que na prática, (suspeito que também seja para o grep) http://swtch.com/~rsc/regexp/regexp1.html
MolbOrg

@MolbOrg Nice reference! O AFAIK, grepusa o regex básico POSIX por padrão e permite o regex POSIX estendido quando executado como grep -Ee para PCRE quando executado como grep -P.
Rubens

11
Este é um post muito bom. R é excelente para manipulação de dados, mas pode ser bastante complicado com a limpeza de dados, devido à sua sintaxe detalhada para manipulação de cadeias e à aderência bastante rígida a listas e matrizes para estruturas de dados.
shadowtalker

11

Uma razão pela qual a limpeza de dados raramente é totalmente automatizada é que há muito julgamento necessário para definir o que "limpo" significa, dado seu problema, métodos e objetivos específicos.

Pode ser tão simples quanto imputar valores para quaisquer dados ausentes ou pode ser tão complexo quanto diagnosticar erros de entrada de dados ou erros de transformação de dados de processos automatizados anteriores (por exemplo, codificação, censura, transformação). Nestes dois últimos casos, os dados parecem bons pela aparência externa, mas são realmente errôneos. Esse diagnóstico geralmente requer análise e inspeção manuais e também informações fora de banda, como informações sobre as fontes de dados e métodos que eles usaram.

Além disso, alguns métodos de análise de dados funcionam melhor quando dados errados ou ausentes são deixados em branco (ou N / A) em vez de imputados ou com um valor padrão. Isso é verdade quando há representações explícitas de incerteza e ignorância, como as funções de Dempster-Shafer Belief.

Por fim, é útil ter diagnósticos e métricas específicos para o processo de limpeza. Os valores ausentes ou incorretos são distribuídos aleatoriamente ou estão concentrados de alguma maneira que possa afetar o resultado da análise. É útil testar os efeitos de estratégias ou algoritmos de limpeza alternativos para verificar se eles afetam os resultados finais.

Dadas essas preocupações, desconfio de qualquer método ou processo que trate a limpeza de dados de maneira superficial, descuidada ou totalmente automatizada. Há muitos demônios escondidos nesses detalhes e vale a pena dar-lhes muita atenção.


11
Como um comentário secundário: acho que detectar dados errôneos causados ​​por algum problema mais adiante é uma habilidade de ouro. Muitas vezes me perguntei por que minha análise produziu resultados estranhos e, quando olhei para o pipeline, encontrei algum tipo de erro. Por exemplo: eu me perguntava por que todos os meus dados estavam fortemente direcionados para preços altos - FORA do meu modelo mental. Quando eu perguntei por aí, descobri que alguns subcontratante incompreendido o briefing e os dados entregues para grupos de alta renda, enquanto nós whanted dados mistos ...
Christian Sauer

Sim! Erros de dados são frequentemente sinais de problemas no processo. Saber onde os erros foram introduzidos e também o mecanismo ajudará bastante no processo de limpeza. Mas o melhor ainda é corrigir os problemas do processo para que eles produzam dados limpos (ou mais limpos).
MrMeritology

5

Sobre a limpeza automática: você realmente não pode limpar os dados automaticamente, porque o número de erros e a definição de um erro geralmente dependem dos dados. Por exemplo: sua coluna "Renda" pode conter valores negativos, o que é um erro - você precisa fazer algo sobre os casos. Por outro lado, uma coluna "economia mensal" pode conter valores negativos razoavelmente.

Esses erros são altamente dependentes do domínio - portanto, para encontrá-los, você deve ter conhecimento do domínio, algo em que os humanos se destacam, processos automatizados nem tanto.

Onde você pode e deve automatizar seus projetos é repetido. Por exemplo, um relatório que deve ser produzido mensalmente. Se você detectar erros, deverá colocar algum processo automatizado que possa detectar esses tipos de erros nos meses subsequentes, liberando seu tempo.


5

Eu acho que não existe uma técnica universal para "limpar" os dados antes de fazer uma pesquisa real. Por outro lado, pretendo fazer o máximo possível de pesquisa reproduzível . Ao fazer uma pesquisa reproduzível, se você usou técnicas de limpeza com bugs ou com parâmetros / suposições ruins, isso pode ser detectado por outras pessoas.

Existe um bom pacote R knitr, que ajuda muito na pesquisa reproduzível.

Obviamente, nem toda a pesquisa pode ser totalmente reproduzida (por exemplo, dados ao vivo do Twitter), mas pelo menos você pode documentar as etapas de limpeza, formatação e pré-processamento com facilidade.

Você pode conferir minha avaliação preparada para o curso de Pesquisa Reproduzível na Coursera .


3

O OpenRefine (anteriormente Google Refine) é uma ótima ferramenta onde você pode executar interativamente a limpeza e as transformações de dados. Sua saída final pode ser exportada para vários formatos padrão (json, csv) ou qualquer formato personalizado (por exemplo: wiki).

As duplicatas exatas podem ser tratadas no OpenRefine, classificando + usando o recurso "em branco para baixo". Além disso, possui um recurso aproximado de agrupamento de strings (difusos), onde é possível agrupar duplicatas com aparência semelhante, como nomes ou endereços de empresas. Somente esse recurso o torna incrível.


11
Essa é uma ferramenta fantástica e subnotificada.
17136

2

Existe um curso inteiro dedicado a isso no Coursera. Você pode revisar as técnicas mencionadas e a parte importante é saber quando usar o quê.

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

É sempre melhor fazê-lo manualmente, em vez de automatizar, pois cada conjunto de dados tem seus próprios problemas e problemas e nem todas as etapas são aplicáveis ​​a todos os conjuntos de dados.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.