Hat jemand Kenntnisse über Workflows für die Datenanalyse im Zusammenhang mit dem Verfassen von benutzerdefinierten Berichten? Der Anwendungsfall ist im Grunde folgender:
Der Kunde gibt einen Bericht in Auftrag, der Datenanalysen verwendet, z. B. eine Bevölkerungsschätzung und zugehörige Karten für ein Wasserviertel.
Der Analyst lädt einige Daten herunter, mungiert die Daten und speichert das Ergebnis (z. B. Hinzufügen einer Spalte für die Bevölkerung pro Einheit oder Unterteilen der Daten basierend auf Bezirksgrenzen).
Die Analystin analysiert die in (2) erstellten Daten, nähert sich ihrem Ziel, sieht jedoch, dass mehr Daten benötigt werden, und geht daher auf (1) zurück.
Wiederholen Sie den Vorgang, bis die Tabellen und Grafiken der Qualitätssicherung / Qualitätskontrolle entsprechen und den Kunden zufrieden stellen.
Schreiben Sie einen Bericht mit Tabellen und Grafiken.
Nächstes Jahr kommt der zufriedene Kunde zurück und möchte ein Update. Dies sollte so einfach sein wie das Aktualisieren der vorgelagerten Daten durch einen neuen Download (z. B. das Abrufen der Baugenehmigungen aus dem letzten Jahr) und das Drücken der Schaltfläche "NEU BERECHNEN", sofern sich die Spezifikationen nicht ändern.
Im Moment starte ich einfach ein Verzeichnis und ad-hoc es so gut ich kann. Ich hätte gerne einen systematischeren Ansatz, also hoffe ich, dass jemand dies herausgefunden hat ... Ich verwende eine Mischung aus Tabellenkalkulations-, SQL-, ARCGIS-, R- und Unix-Tools.
Vielen Dank!
PS:
Im Folgenden finden Sie ein grundlegendes Makefile, das nach Abhängigkeiten von verschiedenen Zwischendatensätzen (mit .RData
Suffix) und Skripten ( .R
Suffix) sucht. Make verwendet Zeitstempel, um Abhängigkeiten zu überprüfen. Wenn Sie touch ss07por.csv
dies tun , wird festgestellt, dass diese Datei neuer ist als alle davon abhängigen Dateien / Ziele, und die angegebenen Skripts ausführen, um sie entsprechend zu aktualisieren. Dies ist noch in Arbeit, einschließlich eines Schritts zum Einfügen in die SQL-Datenbank und eines Schritts zum Erstellen einer Vorlagensprache wie sweave. Beachten Sie, dass Make in seiner Syntax auf Registerkarten basiert. Lesen Sie daher das Handbuch, bevor Sie ausschneiden und einfügen. Viel Spaß und Feedback geben!
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
quelle
Antworten:
Ich teile meine Projekte im Allgemeinen in 4 Teile:
load.R: Kümmert sich um das Laden aller erforderlichen Daten. In der Regel handelt es sich um eine kurze Datei, in der Daten aus Dateien, URLs und / oder ODBC eingelesen werden. Abhängig vom Projekt an dieser Stelle schreibe ich entweder den Arbeitsbereich mit
save()
oder behalte die Dinge für den nächsten Schritt im Speicher.clean.R: Hier leben all die hässlichen Dinge - sich um fehlende Werte kümmern, Datenrahmen zusammenführen, Ausreißer behandeln.
func.R: Enthält alle Funktionen, die zur Durchführung der eigentlichen Analyse erforderlich sind.
source()
Diese Datei sollte keine anderen Nebenwirkungen haben als das Laden der Funktionsdefinitionen. Dies bedeutet, dass Sie diese Datei ändern und neu laden können, ohne die Schritte 1 und 2 wiederholen zu müssen. Die Ausführung großer Datenmengen kann lange dauern.do.R: Ruft die in func.R definierten Funktionen auf, um die Analyse durchzuführen und Diagramme und Tabellen zu erstellen.
Die Hauptmotivation für diese Einrichtung ist die Arbeit mit großen Datenmengen, wobei Sie die Daten nicht jedes Mal neu laden müssen, wenn Sie Änderungen an einem nachfolgenden Schritt vornehmen. Wenn ich meinen Code so unterteilt halte, kann ich zu einem längst vergessenen Projekt zurückkehren und load.R schnell lesen und herausfinden, welche Daten ich aktualisieren muss, und dann do.R betrachten, um herauszufinden, welche Analyse durchgeführt wurde.
quelle
Wenn Sie einige Beispiele sehen möchten, stehen mir online einige kleine (und nicht so kleine) Datenbereinigungs- und Analyseprojekte zur Verfügung. In den meisten Fällen finden Sie ein Skript zum Herunterladen der Daten, eines zum Bereinigen und einige zum Erkunden und Analysieren:
Vor kurzem habe ich begonnen, die Skripte zu nummerieren, daher ist es völlig offensichtlich, in welcher Reihenfolge sie ausgeführt werden sollen. (Wenn ich wirklich Lust habe, mache ich es manchmal so, dass das Explorationsskript das Reinigungsskript aufruft, das wiederum das Download-Skript aufruft, wobei jedes die minimal erforderliche Arbeit erledigt - normalerweise indem es prüft, ob Ausgabedateien mit vorhanden sind
file.exists
. Meistens scheint dies jedoch übertrieben zu sein.Ich verwende git für alle meine Projekte (ein Quellcodeverwaltungssystem), damit es einfach ist, mit anderen zusammenzuarbeiten, zu sehen, was sich ändert, und einfach auf frühere Versionen zurückzusetzen.
Wenn ich einen formellen Bericht erstelle, halte ich normalerweise R und Latex getrennt, aber ich stelle immer sicher, dass ich
source
meinen R-Code verwenden kann, um den gesamten Code und die Ausgabe zu erstellen, die ich für den Bericht benötige. Für die Art von Berichten, die ich mache, finde ich das einfacher und sauberer als die Arbeit mit Latex.quelle
source("blah.R")
Überprüfen Sie stattdessen zuerst , ob die erforderlichen Variablen vorhanden sind :if (!exists("foo")) { source("blah.R") }
. Dadurch wird vermieden, dass Abhängigkeiten erneut ausgeführt werden, wenn sie bereits ausgeführt wurden.Ich stimme den anderen Antwortenden zu: Sweave eignet sich hervorragend zum Verfassen von Berichten mit R. Das Wiederherstellen des Berichts mit aktualisierten Ergebnissen ist so einfach wie das erneute Aufrufen der Sweave-Funktion. Es ist vollständig in sich geschlossen, einschließlich aller Analysen, Daten usw. Und Sie können die Versionskontrolle der gesamten Datei durchführen.
Ich verwende das StatET-Plugin für Eclipse zum Entwickeln der Berichte, und Sweave ist integriert (Eclipse erkennt die Latexformatierung usw.). Unter Windows ist es einfach, MikTEX zu verwenden .
Ich möchte auch hinzufügen, dass Sie mit Beamer wunderschöne Berichte erstellen können . Das Erstellen eines normalen Berichts ist genauso einfach. Ich habe unten ein Beispiel eingefügt, das Daten von Yahoo! und erstellt ein Diagramm und eine Tabelle (mit quantmod). Sie können diesen Bericht folgendermaßen erstellen:
Hier ist das Beamer-Dokument selbst:
quelle
Ich wollte nur hinzufügen, falls jemand es verpasst hat, dass es im Lernblog einen großartigen Beitrag über das Erstellen sich wiederholender Berichte mit Jeffrey Horners Braupaket gibt . Matt und Kevin haben beide oben das Gebräu erwähnt. Ich habe es selbst nicht viel benutzt.
Die Einträge folgen einem schönen Workflow, daher lohnt es sich zu lesen:
Die Erstellung des Berichts nach Abschluss der ersten beiden Schritte ist sehr einfach:
quelle
Ich habe es für nützlich befunden, viele der hier vorgeschlagenen Tipps zu integrieren, um benutzerdefinierte Berichte zu erstellen.
Generieren von Berichten: Eine gute Strategie zum Generieren von Berichten umfasst die Kombination von Sweave, make und R.
Herausgeber: Gute Herausgeber für die Vorbereitung von Sweave-Dokumenten sind:
Code-Organisation: In Bezug auf die Code-Organisation finde ich zwei Strategien nützlich:
quelle
Ich benutze Sweave für die Berichterstellung, aber ich habe auch von dem Braupaket gehört - obwohl ich es noch nicht untersucht habe.
Im Wesentlichen habe ich eine Reihe von Umfragen, für die ich zusammenfassende Statistiken erstelle. Gleiche Umfragen, jedes Mal dieselben Berichte. Ich habe eine Sweave-Vorlage für die Berichte erstellt (was ein wenig Arbeit erfordert). Sobald die Arbeit erledigt ist, habe ich ein separates R-Skript, mit dem ich auf die neuen Daten hinweisen kann. Ich drücke "Go", Sweave gibt ein paar Score-.tex-Dateien aus und ich führe ein kleines Python-Skript aus, um sie alle zu pdflatexen. Mein Vorgänger verbrachte jedes Jahr ~ 6 Wochen mit diesen Berichten; Ich verbringe ungefähr 3 Tage (hauptsächlich mit der Bereinigung von Daten; Fluchtzeichen sind gefährlich).
Es ist sehr wahrscheinlich, dass es jetzt bessere Ansätze gibt, aber wenn Sie sich für diesen Weg entscheiden, lassen Sie es mich wissen - ich wollte einige meiner Sweave-Hacks durchführen, und das wäre ein guter Kick in die Hose so.
quelle
Ich werde etwas in eine andere Richtung vorschlagen als die anderen Einreicher, basierend auf der Tatsache, dass Sie speziell nach dem Projektworkflow und nicht nach Tools gefragt haben . Angenommen, Sie sind relativ zufrieden mit Ihrem Dokumentproduktionsmodell, dann scheinen sich Ihre Herausforderungen möglicherweise eher auf Fragen der Versionsverfolgung, des Asset-Managements und des Überprüfungs- / Veröffentlichungsprozesses zu konzentrieren.
Wenn das richtig klingt, würde ich vorschlagen, ein integriertes Ticketing- / Quellcodeverwaltungs- / Dokumentations-Tool wie Redmine in Betracht zu ziehen . Das Zusammenhalten verwandter Projektartefakte wie ausstehender Aufgaben, Diskussionsthreads und versionierter Daten- / Codedateien kann eine große Hilfe sein, selbst für Projekte, die weit außerhalb der traditionellen "Programmier" -Bailiwick liegen.
quelle
Einverstanden, dass Sweave der richtige Weg ist, mit xtable zum Generieren von LaTeX-Tabellen. Obwohl ich nicht zu viel Zeit mit ihnen verbracht habe, sieht das kürzlich veröffentlichte tikzDevice- Paket sehr vielversprechend aus, insbesondere in Verbindung mit pgfSweave (das meines Wissens derzeit nur auf rforge.net verfügbar ist - es gibt ein Link zu R-Forge von dort, aber es reagiert im Moment nicht für mich).
Zwischen den beiden erhalten Sie eine konsistente Formatierung zwischen Text und Abbildungen (Schriftarten usw.). Beim Brauen könnten diese den heiligen Gral der Berichterstellung darstellen.
quelle
Auf einer "Meta" -Ebene könnte Sie das CRISP-DM- Prozessmodell interessieren .
quelle
"make" ist großartig, weil (1) Sie es für alle Ihre Arbeiten in einer beliebigen Sprache verwenden können (im Gegensatz zu beispielsweise Sweave and Brew), (2) es ist sehr leistungsfähig (genug, um die gesamte Software auf Ihrem Computer zu erstellen) und (3) es vermeidet wiederholte Arbeiten. Dieser letzte Punkt ist mir wichtig, weil ein Großteil der Arbeit langsam ist; Wenn ich eine Datei latexe, möchte ich das Ergebnis in wenigen Sekunden sehen, nicht in der Stunde, die benötigt wird, um die Zahlen neu zu erstellen.
quelle
Ich verwende Projektvorlagen zusammen mit R Studio. Derzeit enthält meine folgende Ordner:
info
: pdfs, powerpoints, docs ... die von keinem Skript verwendet werdendata input
: Daten, die von meinen Skripten verwendet, aber nicht von ihnen generiert werdendata output
: Daten, die von meinen Skripten zur weiteren Verwendung generiert wurden, jedoch nicht als ordnungsgemäßer Bericht.reports
: Nur Dateien, die tatsächlich jemand anderem angezeigt werdenR
: Alle R-SkripteSAS
: Weil ich manchmal muss: '(Ich habe benutzerdefinierte Funktionen geschrieben, damit ich sie aufrufen
smart_save(x,y)
odersmart_load(x)
speichern undRDS files
in und aus demdata output
Ordner (Dateien mit Variablennamen) laden kann , damit michpaths
meine Analyse nicht stört .Eine benutzerdefinierte Funktion
new_project
erstellt einen nummerierten Projektordner, kopiert alle Dateien aus der Vorlage, benennt dieRProj
Datei um und bearbeitet diesetwd
Aufrufe und setzt das Arbeitsverzeichnis auf ein neues Projekt.Alle
R
Skripte befinden sich imR
Ordner und sind wie folgt strukturiert:setwd
00_functions_something.R
, insbesondere wenn ich vorhabe, aus einigen ein Paket zu machen, werde ich sie auseinander setzeninitialize_general.R
Skripts aus meinem Vorlagenordner, der die Pakete und Daten lädt, die ich immer verwende und die ich gerne in meinem Arbeitsbereich habe00_functions.R
(vorgefüllt)csv/txt
xlsx
RDS
, gibt es eine vorbelegt kommentierte Zeile für jede Art von Dateidbplyr
zum Abrufen gefilterter und gruppierter Tabellen aus der DatenbankSobald es fertig ist, schalte ich einen
query_db
Booleschen Wert aus und die Daten werden beimRDS
nächsten Mal neu geladen .Es kann vorkommen, dass ich Daten an DBs weiterleiten muss. Wenn ja, werde ich zusätzliche Schritte erstellen.
dplyr
/ dastidyr
Zeug geht dorthinSobald es fertig ist, schalte ich einen
build
Booleschen Wert aus und die Daten werden beimRDS
nächsten Mal neu geladen .excel
undcsv
Dateienofficer
setwd
render
setwd
runApp
quelle
Um einen kurzen vorläufigen Bericht oder eine E-Mail an einen Kollegen zu schreiben, finde ich, dass es sehr effizient sein kann, Diagramme in MS Word oder eine E-Mail- oder Wiki-Seite zu kopieren und einzufügen - oft ist ein Bitmap-Screenshot am besten (z. B. auf einem Mac oder Apple) -Schalt- (Strg) -4). Ich denke, das ist eine unterschätzte Technik.
Für einen endgültigeren Bericht ist es sehr wichtig, R-Funktionen zu schreiben, um alle Diagramme (als Dateien) einfach neu zu generieren. Das Codieren dauert länger.
Bei den größeren Workflow-Problemen gefällt mir Hadleys Antwort auf die Aufzählung der Code- / Datendateien für den Reinigungs- und Analyseablauf. Alle meine Datenanalyseprojekte haben eine ähnliche Struktur.
quelle
Ich werde meine Stimme hinzufügen, um zu schwenken. Für eine komplizierte, mehrstufige Analyse können Sie ein Makefile verwenden , um die verschiedenen Teile anzugeben. Kann verhindern, dass die gesamte Analyse wiederholt werden muss, wenn sich nur ein Teil geändert hat.
quelle
Ich mache auch das, was Josh Reich macht, nur ich mache das Erstellen meiner persönlichen R-Pakete, da es mir hilft, meinen Code und meine Daten zu strukturieren, und es ist auch ziemlich einfach, diese mit anderen zu teilen.
Erstellen meines Pakets: devtools :: create ('Paketname')
Laden und Bereinigen: Ich erstelle Skripte im Daten-Raw / Unterordner meines Pakets zum Laden, Bereinigen und Speichern der resultierenden Datenobjekte im Paket mit devtools :: use_data (Objektname). Dann kompiliere ich das Paket. Von nun an stellt der Aufruf der Bibliothek (Paketname) diese Daten zur Verfügung (und sie werden erst bei Bedarf geladen).
Funktionen: Ich lege die Funktionen für meine Analysen in den R / -Unterordner meines Pakets und exportiere nur diejenigen, die von außen aufgerufen werden müssen (und nicht die Hilfsfunktionen, die unsichtbar bleiben können).
do: Ich erstelle ein Skript, das die in meinem Paket gespeicherten Daten und Funktionen verwendet. (Wenn die Analysen nur einmal durchgeführt werden müssen, kann ich dieses Skript auch in den Daten-Roh- / Unterordner einfügen, ausführen und die Ergebnisse im Paket speichern, um es leicht zugänglich zu machen.)
quelle