Quando inicio uma análise exploratória em um grande conjunto de dados (muitas amostras, muitas variáveis), geralmente me encontro com centenas de variáveis derivadas e toneladas de gráficos diferentes, e nenhuma maneira real de acompanhar o que está acontecendo para onde. O código acaba como espaguete, porque não há direção desde o início ...
Existem métodos recomendados para manter uma análise exploratória organizada e organizada? Em particular, como você lida com vários ramos da exploração (incluindo os que eram sem saída) e com diferentes versões de parcelas?
Para referência, estou trabalhando em dados geocientíficos (muitas variáveis ao longo do tempo, às vezes também no espaço). Normalmente, trabalho com Python ou R, armazeno tudo no git e também tenho experimentado o IPython Notebook. No entanto, seria bom que as respostas fossem um pouco gerais e úteis para pessoas em todos os campos, com outros tipos de dados (grandes?).
fonte
Respostas:
Penso que, com frequência, a tendência de parecer que você foi a uma toca de coelho com análises exploratórias se deve à perda de vista das perguntas substantivas que você está fazendo. Eu mesmo faço isso ocasionalmente e preciso me lembrar de quais são meus objetivos. Por exemplo, estou tentando criar um modelo específico ou avaliar a adequação de um modelo existente? Estou procurando evidências de problemas com os dados (análise de dados forenses)? Ou é isso nos estágios iniciais da análise, onde estou investigando questões específicas informalmente (por exemplo, existe uma relação entre duas variáveis?) Antes de prosseguir no desenvolvimento de um modelo formal? Em suma, se você se põe em marcha plotagens e tabelas, mas não pode afirmar claramente qual é seu objetivo imediato ou por que essa plotagem / tabela é relevante, então você sabe que '
Tento abordar a análise exploratória de dados, como escrevo, seja escrevendo um programa ou escrevendo um artigo. Em ambos os casos, eu não começaria sem fazer um esboço primeiro. Esse esquema pode mudar (e freqüentemente muda), é claro, mas começar a escrever sem um é ineficiente e geralmente produz um produto final ruim.
Na organização WRT, cada analista precisa encontrar um fluxo de trabalho que funcione para ele - é IMO mais importante do que tentar seguir rigidamente o fluxo de trabalho de outra pessoa (embora seja sempre útil obter idéias do que os outros estão fazendo). Se você estiver trabalhando programaticamente (ou seja, escrevendo código que pode ser executado para gerar / regenerar um conjunto de resultados) e verificando seu trabalho no git, então você já está muito à frente de muitos nesse sentido. Eu suspeito que você pode precisar gastar algum tempo organizando seu código e, por isso, sugiro seguir seu esboço. Por exemplo, mantenha seus arquivos de análise relativamente curtos e direcionados, para que cada um responda a uma pergunta específica (por exemplo, gráficos de diagnóstico para um modelo de regressão específico). Organize-os em subdiretórios em um ou dois níveis, dependendo do tamanho e da complexidade do projeto. Dessa maneira, o projeto se torna auto-documentado; uma exibição de lista dos diretórios, subdiretórios e arquivos (juntamente com o comentário na parte superior de cada arquivo) deve, em teoria, reproduzir seu esboço.
Obviamente, em um projeto grande, você também pode ter um código que faça a limpeza e o gerenciamento de dados, o código que você escreveu para estimar um certo tipo de modelo ou outros utilitários que você escreveu, e eles não se encaixam no substantivo estrutura de tópicos para sua análise de dados, para que eles sejam organizados em uma parte diferente da pasta do projeto.
Atualização: depois de postar isso, percebi que não resolvi sua pergunta diretamente sobre "becos sem saída". Se você realmente decidir que um conjunto inteiro de análises não tem valor, se estiver trabalhando no git, sempre poderá excluir o (s) arquivo (s) correspondente (s) com uma mensagem de confirmação como "Abandonou esta linha de análise porque não era produtivo." Ao contrário de amassar o que você escreveu e jogá-lo no lixo, você sempre pode voltar ao que fez mais tarde, se desejar.
No entanto, acho que você descobrirá que, se seguir um esboço para o qual pensou um pouco, terá menos dos chamados becos sem saída. Em vez disso, se você gastar um tempo investigando uma pergunta relevante e relevante - mesmo que isso leve a uma descoberta nula ou não seja como você previa -, provavelmente ainda desejará manter um registro do que fez e do resultado (em no mínimo, para não cometer o erro de repetir isso mais tarde). Apenas mova-os para o final do seu esboço, em uma espécie de "Apêndice".
fonte
Não sei quão útil será uma resposta geral. Você está perguntando como fazer algo difícil; boas respostas provavelmente dependerão da disciplina e provavelmente serão longas e matizadas. :)
No que diz respeito à organização, você já está usando o git; portanto, você deve começar a usar um makefile para executar a análise. O makefile mostra como diferentes arquivos dependem um do outro (ou seja, quais estatísticas são derivadas de qual código) e quando você chama
make
, tudo o que precisa ser atualizado será.Agora, isso não ajuda na parte exploratória. Para EDA, eu uso (principalmente) R no emacs via ESS. Você precisa de um REPL para EDA. Meu fluxo de trabalho é brincar com gráficos, estimativas etc. no ESS (em um
exploratory.R
arquivo de tipo), decidir o que eu quero manter e depois recodificá-lo para que possa ser executado em lote pelo make. Re: git, eu não sei como você o está usando, mas eu uso um único repositório para cada projeto (geralmente um único artigo) e refiz o inferno da minha base de código para manter um histórico limpo; ou seja, eu usomuito mais do que quando comecei com o git e muito mais do que eu recomendaria a um iniciante. Se você não estiver familiarizado com todos esses comandos e opções, convém aprender mais sobre o git. A maior coisa que me ajudou é ser disciplinado em fazer confirmações logicamente distintas; ou seja, todo commit deve conter todas as alterações que você deseja desfazer todas de uma vez no futuro (e não mais ou menos).
Quanto a explorar os dados, achei esses livros úteis e interessantes, e eles lidam especificamente com grandes conjuntos de dados (pelo menos em partes):
Os gráficos de grandes conjuntos de dados , editados por Unwin, Theus e Hofmann. via springerlink, se você tiver acesso, caso contrário, capítulos individuais provavelmente estarão disponíveis no Google.
O manual de visualização de dados , editado por Chen, Härdle e Unwin. também via springerlink
Análise de dados por Huber (2011).
fonte
Duas palavras: mapa conceitual. Essa é a única maneira eficaz que encontrei de dividir e conquistar grandes conjuntos de dados ou qualquer conceito realmente complicado. http://en.wikipedia.org/wiki/Concept_maps
Pessoalmente, acho melhor no papel do que na tela, por isso, apenas me importo de mapear o que estou lidando antes mesmo de começar a fazer qualquer análise básica. Para um diagrama mais profissional, existem muitos softwares de mapeamento mental http://en.wikipedia.org/wiki/List_of_concept-_and_mind-mapping_software
O mapeamento mental tem várias vantagens:
Editar :
Como exemplo, aqui está o mapa conceitual para análise fatorial: http://www.metacademy.org/graphs/concepts/factor_analysis#focus=factor_analysis&mode=explore Agora, isso é apenas para aprender o conceito, não executar a análise, mas a idéia é o mesmo: mapear antecipadamente o que faz sentido e, em seguida, fazê-lo.
Se você está procurando uma versão automatizada / codificada disso, acho que não existe. Você não pode automatizar o conceito de modelagem quando está tentando entender um sistema. (E isso é bom, porque tiraria muitas pessoas do emprego.)
fonte
Você já está usando o git: por que não usar o controle de versão para organizar sua exploração? Crie uma nova ramificação para cada nova "ramificação" de sua exploração e garanta ramificações para diferentes versões de plotagens. Esse método tornará um pouco mais difícil combinar seus resultados finais, mas você sempre poderá manter um diretório não rastreado, onde poderá inserir as "gemas" de sua análise. Você provavelmente desejaria rotular de alguma forma seus arquivos neste diretório para indicar de qual forquilha / confirmação eles vieram. Esse método possui o benefício adicional de tornar realmente fácil contrastar diferentes análises por meio do
diff
comando.fonte
Gostaria de analisar as ferramentas de Business Intelligence ... onde surgem problemas semelhantes. Em particular (armazéns de dados, análise dimensional), hierarquias e drill downs.
A idéia básica é que você tente representar seus dados subjacentes como quantidades agregáveis (contagens, ganhos etc., em vez de, por exemplo, porcentagens). Em seguida, você cria hierarquias para agregar os detalhes (por exemplo, meses / semanas / ...). Isso permite que você tenha uma visão geral simples de todos os seus dados e depois amplie áreas específicas. veja, por exemplo, http://cubes.databrewery.org/ (python) ou excel power pivot
fonte