Alguém tem alguma noção dos fluxos de trabalho para análise de dados relacionados à elaboração de relatórios personalizados? O caso de uso é basicamente este:
O cliente envia um relatório que utiliza análise de dados, por exemplo, uma estimativa populacional e mapas relacionados a um distrito de água.
O analista baixa alguns dados, mescla os dados e salva o resultado (por exemplo, adicionando uma coluna para população por unidade ou subconjuntando os dados com base nos limites do distrito).
O analista analisa os dados criados em (2), aproxima-se de seu objetivo, mas vê que precisa de mais dados e volta para (1).
Enxágue repetidamente até que as tabelas e gráficos atendam ao controle de qualidade / qualidade e satisfaçam o cliente.
Escreva um relatório incorporando tabelas e gráficos.
No próximo ano, o cliente satisfeito volta e quer uma atualização. Isso deve ser tão simples quanto atualizar os dados upstream com um novo download (por exemplo, obter as licenças de construção do ano passado) e pressionar um botão "RECALCULAR", a menos que as especificações mudem.
No momento, apenas inicio um diretório e ad-hoc o melhor que posso. Gostaria de uma abordagem mais sistemática, por isso espero que alguém tenha entendido isso ... Uso uma mistura de planilhas, SQL, ARCGIS, R e ferramentas Unix.
Obrigado!
PS:
Abaixo está um Makefile básico que verifica dependências em vários conjuntos de dados intermediários (com .RData
sufixo) e scripts ( .R
sufixo). O Make usa registros de data e hora para verificar as dependências; portanto, se você touch ss07por.csv
, ele verá que esse arquivo é mais novo que todos os arquivos / destinos que dependem dele e executará os scripts fornecidos para atualizá-los adequadamente. Este ainda é um trabalho em andamento, incluindo uma etapa para inserção no banco de dados SQL e uma etapa para uma linguagem de modelagem como sweave. Observe que o Make depende de guias em sua sintaxe; portanto, leia o manual antes de cortar e colar. Aproveite e dê feedback!
http://www.gnu.org/software/make/manual/html_node/index.html#Top
R = / home / wsprague / R-2.9.2 / bin / R persondata.RData: ImportData.R ../../DATA/ss07por.csv Functions.R $ R --slave -f ImportData.R persondata.Munged.RData: MungeData.R persondata.RData Functions.R $ R --slave -f MungeData.R report.txt: TabulateAndGraph.R persondata.Munged.RData Functions.R $ R --slave -f TabulateAndGraph.R> report.txt
fonte
Respostas:
Geralmente, divido meus projetos em quatro partes:
load.R: cuida do carregamento de todos os dados necessários. Normalmente, este é um arquivo curto, que lê dados de arquivos, URLs e / ou ODBC. Dependendo do projeto, neste momento, escreverei a área de trabalho usando
save()
ou manterei as coisas na memória para a próxima etapa.clean.R: É aqui que vivem todas as coisas feias - cuidando dos valores que faltam, mesclando quadros de dados, lidando com outliers.
func.R: Contém todas as funções necessárias para executar a análise real.
source()
Esse arquivo não deve ter efeitos colaterais além de carregar as definições de função. Isso significa que você pode modificar esse arquivo e recarregá-lo sem precisar voltar às etapas 1 e 2 repetidas, o que pode levar muito tempo para ser executado em grandes conjuntos de dados.do.R: Chama as funções definidas em func.R para executar a análise e produzir gráficos e tabelas.
A principal motivação para essa configuração é trabalhar com dados grandes, nos quais você não deseja recarregar os dados toda vez que fizer uma alteração em uma etapa subsequente. Além disso, manter meu código compartimentado dessa maneira significa que eu posso voltar para um projeto esquecido e ler rapidamente o load.R, descobrir quais dados eu preciso atualizar e depois analisar o do.R para descobrir qual análise foi executada.
fonte
Se você quiser ver alguns exemplos, tenho alguns projetos pequenos (e não tão pequenos) de limpeza e análise de dados disponíveis on-line. Na maioria dos casos, você encontrará um script para baixar os dados, um para limpá-los e alguns para explorar e analisar:
Recentemente, comecei a numerar os scripts, por isso é completamente óbvio em que ordem eles devem ser executados. (Se estou me sentindo realmente elegante, às vezes faço com que o script de exploração chame o script de limpeza, que por sua vez chama o script de download, cada um fazendo o trabalho mínimo necessário - geralmente verificando a presença de arquivos de saída
file.exists
. No entanto, na maioria das vezes isso parece exagero).Eu uso o git para todos os meus projetos (um sistema de gerenciamento de código-fonte) para facilitar a colaboração com outras pessoas, ver o que está mudando e reverter facilmente para as versões anteriores.
Se eu faço um relatório formal, geralmente mantenho R e látex separados, mas sempre me certifico de que posso usar
source
meu código R para produzir todo o código e saída necessários para o relatório. Para os tipos de relatórios que eu faço, acho isso mais fácil e limpo do que trabalhar com látex.fonte
source("blah.R")
, verifique se a variável exigido (s) existem em primeiro lugar:if (!exists("foo")) { source("blah.R") }
. Isso evita re-executar dependências se elas já tiverem sido executadas.Concordo com os outros respondentes: Sweave é excelente para escrever relatórios com R. E reconstruir o relatório com resultados atualizados é tão simples quanto chamar novamente a função Sweave. É completamente independente, incluindo todas as análises, dados, etc. E você pode controlar a versão do arquivo inteiro.
Eu uso o plugin StatET do Eclipse para desenvolver os relatórios e o Sweave é integrado (o Eclipse reconhece a formatação de látex, etc.). No Windows, é fácil usar o MikTEX .
Eu também acrescentaria que você pode criar relatórios bonitos com o Beamer . Criar um relatório normal é igualmente simples. Incluí um exemplo abaixo que extrai dados do Yahoo! e cria um gráfico e uma tabela (usando quantmod). Você pode criar este relatório da seguinte maneira:
Aqui está o próprio documento Beamer:
fonte
Eu só queria acrescentar, caso alguém tenha perdido, que há um ótimo post no blog learnr sobre a criação de relatórios repetitivos com o pacote de cervejas de Jeffrey Horner . Matt e Kevin mencionaram a bebida acima. Na verdade, eu não usei muito isso.
As entradas seguem um bom fluxo de trabalho, portanto vale a pena ler:
Na verdade, a produção do relatório após a conclusão das duas primeiras etapas é muito simples:
fonte
Para criar relatórios personalizados, achei útil incorporar muitas das dicas existentes sugeridas aqui.
Gerando relatórios: Uma boa estratégia para gerar relatórios envolve a combinação de Sweave, make e R.
Editor: bons editores para a preparação de documentos Sweave incluem:
Organização de código: Em termos de organização de código, considero duas estratégias úteis:
fonte
Eu uso o Sweave no lado de produção de relatórios, mas também tenho ouvido falar sobre o pacote de fermentação - embora ainda não o tenha examinado.
Essencialmente, tenho várias pesquisas para as quais produzo estatísticas resumidas. Mesmas pesquisas, mesmos relatórios sempre. Criei um modelo Sweave para os relatórios (o que exige um pouco de trabalho). Mas, uma vez concluído o trabalho, tenho um script R separado que me permite apontar os novos dados. Pressiono "Go", o Sweave despeja alguns arquivos .tex, e corro um pequeno script Python para pdflatex todos. Meu antecessor passava ~ 6 semanas por ano nesses relatórios; Passo cerca de três dias (principalmente na limpeza de dados; caracteres de escape são perigosos).
É muito possível que haja abordagens melhores agora, mas se você decidir seguir esse caminho, avise-me - eu pretendo colocar alguns dos meus hacks Sweave, e isso seria um bom chute nas calças. tão.
fonte
Vou sugerir algo em uma direção diferente dos outros remetentes, com base no fato de que você perguntou especificamente sobre o fluxo de trabalho do projeto , em vez de ferramentas . Supondo que você esteja relativamente satisfeito com seu modelo de produção de documentos, parece que seus desafios podem estar mais centrados em questões de rastreamento de versão, gerenciamento de ativos e processo de revisão / publicação.
Se isso parecer correto, sugiro procurar uma ferramenta integrada de gerenciamento de bilhetes / documentação / documentação como o Redmine . Manter artefatos de projetos relacionados, como tarefas pendentes, encadeamentos de discussão e arquivos de dados / código com versão juntos, pode ser uma grande ajuda, mesmo para projetos bem fora do bailiwick de "programação" tradicional.
fonte
Concordou que o Sweave é o caminho a seguir, com o xtable para gerar tabelas LaTeX. Embora eu não tenha passado muito tempo trabalhando com eles, o pacote tikzDevice, lançado recentemente , parece realmente promissor, principalmente quando associado ao pgfSweave (que, até onde eu sei, só está disponível no rforge.net no momento - existe um link para r-forge a partir daí, mas não está respondendo para mim no momento).
Entre os dois, você terá uma formatação consistente entre texto e figuras (fontes, etc.). Com a fermentação, estes podem constituir o santo graal da geração de relatórios.
fonte
Em um nível mais "meta", você pode estar interessado no modelo de processo CRISP-DM .
fonte
"make" é ótimo porque (1) você pode usá-lo para todo o seu trabalho em qualquer idioma (ao contrário, digamos, Sweave and Brew), (2) é muito poderoso (o suficiente para criar todo o software em sua máquina) e (3) evita repetir o trabalho. Este último ponto é importante para mim, porque muito do trabalho é lento; quando coloco um arquivo em latex, gosto de ver o resultado em alguns segundos, e não a hora que levaria para recriar as figuras.
fonte
Eu uso modelos de projeto junto com o R studio, atualmente o meu contém as seguintes pastas:
info
: pdfs, powerpoints, documentos ... que não serão usados por nenhum scriptdata input
: dados que serão usados pelos meus scripts, mas não gerados por elesdata output
: dados gerados pelos meus scripts para uso posterior, mas não como um relatório adequado.reports
: Apenas arquivos que serão realmente mostrados a outra pessoaR
: Todos os scripts RSAS
: Porque às vezes tenho que: '(Escrevi funções personalizadas para poder chamar
smart_save(x,y)
ousmart_load(x)
salvar ou carregarRDS files
para e dadata output
pasta (arquivos nomeados com nomes de variáveis) para não me incomodarpaths
durante a análise.Uma função personalizada
new_project
cria uma pasta de projeto numerada, copia todos os arquivos do modelo, renomeia oRProj
arquivo e edita assetwd
chamadas e define o diretório de trabalho para o novo projeto.Todos os
R
scripts estão naR
pasta, estruturados da seguinte maneira:setwd
00_functions_something.R
, em particular, se eu pretender criar um pacote com algumas delas, eu as separareiinitialize_general.R
script mais geral da minha pasta de modelo que carrega os pacotes e dados que eu sempre uso e não me importo de ter no meu espaço de trabalho00_functions.R
(pré- carregadas )csv/txt
xlsx
RDS
, há uma linha comentada pré-preenchida para cada tipo de arquivodbplyr
para buscar tabelas filtradas e agrupadas do banco de dadosUma vez feito isso, eu desligo um
query_db
booleano e os dados serão recarregados daRDS
próxima vez.Pode acontecer que eu tenha que realimentar os dados para os bancos de dados. Nesse caso, criarei etapas adicionais.
dplyr
/tidyr
material vai para láUma vez feito isso, eu desligo um
build
booleano e os dados serão recarregados daRDS
próxima vez.excel
ecsv
arquivosofficer
setwd
render
setwd
runApp
fonte
Para escrever um relatório ou email preliminar rápido para um colega, acho que pode ser muito eficiente copiar e colar plotagens no MS Word ou em uma página de email ou wiki - geralmente é melhor uma captura de tela de bitmap (por exemplo, no mac, Apple -Shift- (Ctrl) -4). Eu acho que essa é uma técnica subestimada.
Para um relatório mais final, escrever funções R para regenerar facilmente todos os gráficos (como arquivos) é muito importante. Leva mais tempo para codificar isso.
Nas questões maiores do fluxo de trabalho, gosto da resposta de Hadley na enumeração dos arquivos de código / dados para o fluxo de limpeza e análise. Todos os meus projetos de análise de dados têm uma estrutura semelhante.
fonte
Vou adicionar minha voz para sweave. Para análises complicadas e de várias etapas, você pode usar um makefile para especificar as diferentes partes. Pode impedir a repetição de toda a análise se apenas uma parte tiver sido alterada.
fonte
Eu também faço o que Josh Reich faz, apenas faço isso criando meus pacotes R pessoais, pois me ajuda a estruturar meu código e dados, e também é muito fácil compartilhá-los com outras pessoas.
criando meu pacote: devtools :: create ('package_name')
load and clean: eu crio scripts na subpasta / pasta de dados do meu pacote para carregar, limpar e armazenar os objetos de dados resultantes no pacote usando devtools :: use_data (object_name). Então eu compilo o pacote. A partir de agora, a biblioteca de chamada (package_name) disponibiliza esses dados (e eles não são carregados até que seja necessário).
funções: eu coloco as funções para minhas análises na subpasta R / do meu pacote e exporto apenas aquelas que precisam ser chamadas de fora (e não as funções auxiliares, que podem permanecer invisíveis).
do: eu crio um script que usa os dados e funções armazenados no meu pacote. (Se as análises precisarem ser feitas apenas uma vez, também posso inserir esse script na subpasta / pasta de dados, executá-lo e armazenar os resultados no pacote para torná-lo facilmente acessível.)
fonte