Flux de travail pour l'analyse statistique et la rédaction de rapport
Quelqu'un a une sagesse sur les flux de travail pour l'analyse des données liées à la coutume de la rédaction du rapport? Le cas d'utilisation est essentiellement ceci:
-
Client commande un rapport qui utilise l'analyse de données, par exemple une estimation de la population et cartes relatives pour un district de l'eau.
-
L'analyste télécharge des données, munges les données et enregistre le résultat (par exemple, l'ajout d'une colonne pour la population par unité, ou subsetting les données sont basées sur les limites du district).
-
L'analyste analyse les données créées dans (2), est proche de son but, mais voit qui a besoin de plus de données et va donc revenir à (1).
-
Rincer répéter jusqu'à ce que les tableaux et les graphiques rencontrer d'AQ/CQ et de satisfaire le client.
-
Rédiger le rapport intégrant des tableaux et des graphiques.
-
L'année prochaine, le client heureux est de retour et veut une mise à jour. Cela devrait être aussi simple que la mise à jour des données en amont, par un nouveau téléchargement (par exemple, obtenir le permis de construire de l'année dernière), et appuyez sur "RECALCULER" bouton, à moins que les spécifications de changement.
Pour le moment, je viens de commencer un répertoire ad-hoc mieux que je peux. Je voudrais adopter une approche plus systématique, donc je suis en espérant que quelqu'un a compris cela... j'utilise un mélange de feuilles de calcul, SQL, ARCGIS, R, et des outils Unix.
Merci!
PS:
Ci-dessous est une base Makefile qui vérifie les dépendances sur les différents intermédiaires ensembles de données (w/.RData
suffixe) et les scripts (.R
suffixe). Faire utilise les horodatages pour vérifier les dépendances, donc si vous touch ss07por.csv
, il va voir que ce fichier est plus récent que tous les fichiers cibles, qui dépendent d'elle, et exécuter le scripts afin de les mettre à jour en conséquence. C'est toujours un travail en cours, y compris une étape pour la mise en base de données SQL, et une étape pour une création de modèles de langue comme sweave. Veuillez noter que la marque s'appuie sur des onglets dans sa syntaxe, afin de lire le manuel avant de découpage et de collage. Profiter et donner de la rétroaction!
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 Fonctions.R $R --esclave -f ImportData.R persondata.Munged.RData : MungeData.R persondata.RData Fonctions.R $R --esclave -f MungeData.R report.txt: TabulateAndGraph.R persondata.Munged.RData Fonctions.R $R --esclave -f TabulateAndGraph.R > report.txt
- Oh mon. ceux qui entrez ici, méfiez-vous: les réponses à cette question étaient excellentes, il y a cinq ans. Ils sont aujourd'hui complètement dépassée. Aujourd'hui, je vous conseille fortement contre suivant l'une des réponses ici. Il y a maintenant beaucoup mieux les outils disponibles. Pour commencer, je vais reportez-vous à un exemple de projet à l'aide de fichiers Makefile et Knitr.
- R ordinateurs Portables, pilotes odbc, git et git lfs sont tous envoyé du ciel pour ce problème.
- Je vous recommande fortement de mettre en place le projet selon les principes énoncés e.g ici(github.com/ropensci/rrrpkg). Le soi-disant "recherche compedium" est une aubaine quand on fait reproductible de la science des données
Vous devez vous connecter pour publier un commentaire.
En général, je pause mes projets en 4 morceaux:
charge.R: s'occupe du chargement de toutes les données nécessaires. Généralement, un court de fichier, la lecture des données à partir de fichiers, Url et/ou ODBC. Selon le projet à ce stade, je vais écrire l'espace de travail en utilisant
save()
ou tout simplement garder les choses en mémoire pour la prochaine étape.propre.R: C'est là où le laid trucs de la vie - prendre soin de valeurs manquantes, la fusion des trames de données, la manipulation des valeurs aberrantes.
la touche func.R: Contient toutes les fonctions nécessaires pour effectuer l'analyse.
source()
'ing ce fichier ne doit pas avoir d'effets secondaires autres que le chargement jusqu'à la définition d'une fonction. Cela signifie que vous pouvez modifier ce fichier et de le recharger sans avoir à revenir en arrière une répétez les étapes 1 & 2, ce qui peut prendre beaucoup de temps pour exécuter de grands ensembles de données.faire.R: les Appels de fonctions définies dans la touche func.R pour effectuer l'analyse et de produire des graphiques et des tableaux.
La motivation principale de ce jeu est de travailler avec de grandes données à laquelle vous ne voulez pas avoir à recharger les données chaque fois que vous apportez une modification à une étape ultérieure. Aussi, en gardant mon code compartimentée comme cela signifie que je peux revenir à une longue oublié de projet et de lire rapidement la charge.R et quelles sont les données que j'ai besoin de mettre à jour, et ensuite chercher à le faire.R travailler ce que l'analyse a été effectuée.
do.R
peut être assez méchant comme bien. Certainement bon pour trouver les endroits où les choses peuvent être séparés, de sorte que vous n'avez pas besoin de faire tout votre analyse juste de re-calculer un seul graphique. Je trouve aussi qu'il est utile d'avoir unplot_functions.R
, qui comprend la totalité de la parcelle de code, à l'intérieur d'une fonction pour chaque parcelle. Ensuite, vous pouvez simplement ouvrir un périphérique graphique, exécutez l'intrigue, et ne pas avoir à se soucier d'autre chose. @poisson-globe: Vous pouvez enregistrer la sortie declean.R
à la fin, puis vérifiez que le fichier existe et de le charger, au lieu de courirclean.R
de nouveau.source
, par exemplesource("load.R"); source("clean.R")
Si vous voulez voir quelques exemples, j'ai quelques petites (et moins petites) nettoyage des données et de l'analyse des projets de disponibles en ligne. En plus, vous trouverez un script pour télécharger les données, une pour le nettoyer, et un peu de faire de l'exploration et de l'analyse:
Récemment, j'ai commencé la numérotation des scripts, il est donc tout à fait évident dans quel ordre ils doivent être exécutés. (Si je me sens vraiment de fantaisie, je vais parfois faire en sorte que l'exploration script appelle le nettoyage script qui appelle à son tour le téléchargement de script, faisant chacun l'un minimum de travail nécessaire généralement de vérifier la présence de fichiers de sortie avec
file.exists
. Cependant, la plupart du temps cela semble exagéré).J'utilise git pour tous mes projets (un code source sur le système de gestion de sorte que son facile à collaborer avec les autres, voir ce qui est en train de changer et facilement restaurer les versions précédentes.
Si je fais un rapport officiel, j'ai l'habitude de garder de la R de latex et distinct, mais je m'assure toujours que je peux
source
mon R code pour produire tout le code de sortie et que j'ai besoin pour le rapport. Pour les sortes de rapports que je fais, je trouve cela plus facile et plus propre que de travailler avec latex.source("blah.R")
, vérifier si la variable(s) existent d'abord:if (!exists("foo")) { source("blah.R") }
. Qui évite de ré-exécuter les dépendances si elles ont déjà.Je suis d'accord avec les autres intervenants: Sweave est excellent pour la rédaction du rapport de R. Et de reconstruire le rapport avec la mise à jour des résultats est aussi simple que de re-appel de la Sweave fonction. Il est complètement autonome, y compris toutes les analyses, de données, etc. Et vous pouvez contrôler la version du fichier en entier.
- Je utiliser le StatET plugin pour Eclipse pour le développement de l'rapports, et Sweave est intégré (Eclipse reconnaît le formatage de latex, etc). Sur Windows, il est facile à utiliser MikTEX.
Je voudrais aussi ajouter, que vous pouvez créer de beaux rapports avec Vidéoprojecteur. La création d'un rapport normal est tout aussi simple. J'ai inclus un exemple ci-dessous qui extrait des données à partir de Yahoo! et crée un graphique et un tableau (à l'aide quantmod). Vous pouvez construire ce rapport comme suit:
Voici le vidéo Projecteur document lui-même:
Je voulais juste ajouter, au cas où quelqu'un raté, que il y a un excellent post sur le learnr blog sur la création de rapports répétitif avec Jeffrey Horner s brew paquet. Matt et Kevin à la fois mentionné brew ci-dessus. Je n'ai pas réellement utilisé beaucoup de moi-même.
Les entrées suit un joli flux de travail, donc c'est bien intéressant à lire:
En fait la production du rapport une fois les deux premières étapes sont complètes est très simple:
Pour la création de rapports personnalisés, je l'ai trouvé utile d'intégrer un grand nombre de conseils suggéré ici.
Génération de rapports:
Une bonne stratégie pour générer des rapports implique la combinaison de Sweave, faire, et R.
Éditeur:
De bons éditeurs pour la préparation de Sweave documents comprennent:
Code de l'organisation:
En termes de code d'organisation, j'ai trouver deux stratégies utiles:
Josh Reich des idées, de ma propre présentation sur la R de flux de travail
Les diapositives
et Vidéo )
- Je utiliser Sweave pour le rapport produisant côté de cela, mais j'ai aussi entendu parler de la brew paquet - bien que je n'ai pas encore penché sur elle.
En gros, j'ai un certain nombre d'enquêtes pour lequel je produire des statistiques sommaires. Même les enquêtes, les mêmes rapports à chaque fois. J'ai construit un Sweave modèle pour les rapports (qui prend un peu de travail). Mais une fois que le travail est fait, j'ai séparé pour la R script qui me permet de souligner les nouvelles données. J'ai appuyer sur "Go", Sweave déverse un peu de score .tex fichiers, et j'ai un petit script Python pour pdflatex tous. Mon prédécesseur a passé environ 6 semaines chaque année sur ces rapports; je passe sur 3 jours (la plupart du temps sur le nettoyage des données; caractères d'échappement sont dangereux).
Il est très possible qu'il existe des approches mieux maintenant, mais si vous décidez d'aller dans cette voie, permettez-moi de savoir - j'ai eu l'intention de mettre en place certains de mes Sweave hacks, et que ce serait un bon coup de pied dans le pantalon pour le faire.
Je vais proposer quelque chose dans une autre sorte de sens de l'autre des auteurs, basée sur le fait que vous avez demandé spécifiquement sur projet de flux de travail, plutôt que de outils. En supposant que vous êtes relativement satisfait de votre document-modèle de production, il semble que votre défi peut être plus axées sur les questions de suivi de version, gestion d'actifs, et de l'examen/le processus de publication.
Si cela vous semble correct, je suggère de regarder dans une billetterie intégrée/de source/de la gestion de la documentation de l'outil comme Redmine. Liées par des artefacts de projet tels que les tâches en attente, des fils de discussion, et des données versionnées/fichiers de code, ensemble, peuvent être d'une grande aide, même pour les projets à l'extérieur de l'traditionnel "programmation" bailliage.
Convenu que Sweave est le chemin à parcourir, avec xtable pour la génération de LaTeX tables. Bien que je n'ai pas passé trop de temps à travailler avec eux, les a récemment publié tikzDevice paquet a l'air vraiment prometteur, en particulier lorsqu'il est couplé avec pgfSweave (qui, autant que je sache, n'est disponible que sur rforge.net à cette époque -, il y a un lien à la r-forge à partir de là, mais ce n'est pas de répondre pour moi en ce moment).
Entre les deux, vous obtiendrez une mise en forme cohérente entre le texte et les chiffres (polices, etc.). Avec brew, ceux-ci pourraient constituer le saint graal de la génération de rapports.
Plus "méta", vous pourriez être intéressé par le CRISP-DM modèle de processus.
"faire" est grande, parce que (1) vous pouvez l'utiliser pour tous vos travaux dans n'importe quelle langue (contrairement, disons, Sweave et Brew), (2) il est très puissant (à la construction de tous les logiciels installés sur votre machine), et (3) il évite de répéter le travail. Ce dernier point est important pour moi parce que beaucoup de travail est lent; quand j'ai un fichier latex, j'aime voir le résultat dans quelques secondes, pas l'heure qu'il faudrait pour recréer les chiffres.
Pour la rédaction d'un rapide rapport préliminaire ou un courriel à un collègue, je trouve que ça peut être très efficace pour copier-coller des parcelles dans MS Word ou un e-mail ou une page wiki -- souvent le mieux est un bitmap capture d'écran (par exemple, sur mac, Pomme-Shift-(Ctrl)-4). Je pense que c'est une sous-estimé technique.
Pour plus de rapport final, l'écriture de fonctions R facilement régénérer toutes les parcelles (sous forme de fichiers) est très important. Il ne faudra plus de temps pour le code de cette.
Sur les grands problèmes de flux de travail, j'aime Hadley, en réponse à l'énumération de code/fichiers de données pour le nettoyage et l'analyse des flux. L'ensemble de mes données l'analyse des projets ont une structure similaire.
Je vais ajouter ma voix à sweave. Pour les complexes, multi-étape de l'analyse, vous pouvez utiliser un makefile pour spécifier les différentes parties. Pouvez éviter d'avoir à répéter l'ensemble de l'analyse, si seulement une partie a changé.
- Je utiliser des modèles de projet avec R studio, actuellement le mien contient les dossiers suivants:
info
: pdf, présentations powerpoint, documents... ce qui ne sera pas utilisé par un scriptdata input
: les données qui seront utilisées par mes scripts, mais ne sont pas générées par leurdata output
: les données générées par mes scripts pour une utilisation ultérieure, mais pas comme d'un bon rapport.reports
: Seuls les fichiers qui seront effectivement montré à quelqu'un d'autreR
: Tous les R scriptsSAS
: Parce que je dois parfois :'(J'ai écrit des fonctions personnalisées pour que je puisse appeler
smart_save(x,y)
ousmart_load(x)
pour enregistrer ou chargerRDS files
et de ladata output
dossier (fichiers nommés avec les noms de variable) donc je ne suis pas gêné parpaths
au cours de mon analyse.Une fonction personnalisée
new_project
crée un numéro de dossier du projet, des copies de tous les fichiers à partir du modèle, renomme leRProj
fichier, modifier lesetwd
appels, et de définir le répertoire de travail d'un nouveau projet.Tous
R
scripts sont dans leR
dossier, structuré de la façon suivante :setwd
00_functions_something.R
, en particulier si j'ai l'intention de faire un paquet de certains d'entre eux je vais les mettre à partinitialize_general.R
script à partir de mon modèle de dossier qui charge les paquets de données et je l'utilise toujours et ne me dérange pas d'avoir dans mon espace de travail00_functions.R
(pré-rempli)csv/txt
xlsx
RDS
, il y a un préremplie ligne de commentaires pour chaque type de fichierdbplyr
chercher filtrée et groupées des tables de la DBUne fois qu'il a été fait une fois j'ai éteint une
query_db
booléens et les données seront rechargées à partirRDS
la prochaine fois.Il peut arriver que je refeed données de DBs, Si je vais donc créer des étapes supplémentaires.
dplyr
/tidyr
des choses, il yUne fois qu'il a été fait une fois j'ai éteint une
build
booléens et les données seront rechargées à partirRDS
la prochaine fois.excel
etcsv
fichiersofficer
setwd
render
setwd
runApp
Je fais aussi ce que Josh Reich n', seulement je n'ai que la création de mon personnel de R-paquets, comme il m'aide à structurer mon code et des données, et il est également très facile de les partager avec les autres.
la création de mon colis: devtools::create('package_name')
chargement et nettoyage: j'ai créer des scripts dans la base de données raw/sous-dossier de mon colis pour le chargement, le nettoyage et le stockage de l'résultant des objets de données dans le paquet à l'aide de devtools::use_data(object_name). Puis-je compiler le paquet.
À partir de maintenant, l'appel de la bibliothèque(package_name) rend ces données disponibles (et ils ne sont pas chargés jusqu'à ce que nécessaire).
fonctions: j'ai mis les fonctions pour mes analyses dans le R/sous-dossier de mon colis, et de l'exportation uniquement ceux qui ont besoin d'être appelé de l'extérieur (et non pas les fonctions d'assistance, qui peut rester invisible).
faire: j'ai créer un script qui utilise les données et les fonctions stockées dans mon colis.
(Si les analyses doivent être faites une fois, je peux mettre ce script dans les données brutes/sous-dossier, l'exécuter, et de stocker les résultats dans le paquet afin de le rendre facilement accessible.)