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?
r
data-cleaning
Jay Godse
fonte
fonte
Respostas:
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 .
fonte
dplyr
, que é uma reformulação otimizada de certasplyr
ferramentas edata.table
que é uma abordagem completamente diferente para manipular dados. Ambos por Hadley Wickham.dplyr
pacote, mas não odata.table
primeiro.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
awk
script 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 ressaltargrep
,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.
fonte
grep
usa o regex básico POSIX por padrão e permite o regex POSIX estendido quando executado comogrep -E
e para PCRE quando executado comogrep -P
.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.
fonte
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.
fonte
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 .
fonte
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.
fonte
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.
fonte