統計分析とレポート作成のワークフロー


186

カスタムレポートの作成に関連するデータ分析のワークフローについて、知識はありますか?ユースケースは基本的にこれです:

  1. クライアントは、データ分析を使用するレポートを委託します。たとえば、水区の人口推定や関連マップなどです。

  2. アナリストは一部のデータをダウンロードし、データを変更して結果を保存します(たとえば、単位あたりの人口の列を追加したり、地区の境界に基づいてデータをサブセット化したりします)。

  3. アナリストは、(2)で作成されたデータを分析し、彼女の目標に近づきますが、さらに多くのデータが必要であるため、(1)に戻ります。

  4. テーブルとグラフィックスがQA / QCを満たし、クライアントを満足させるまで繰り返します。

  5. 表とグラフィックを組み込んだレポートを作成します。

  6. 来年、幸せなクライアントが戻ってきて、更新を求めています。これは、仕様が変更されない限り、新しいダウンロード(たとえば、昨年の建築許可の取得)によってアップストリームデータを更新し、[RECALCULATE]ボタンを押すのと同じくらい簡単なはずです。

現時点では、ディレクトリを作成して、できる限りその場限りで作成します。もっと体系的なアプローチが欲しいので、誰かがこれを理解してくれることを願っています...私は、スプレッドシート、SQL、ARCGIS、R、およびUnixツールを組み合わせて使用​​しています。

ありがとう!

PS:

以下は、さまざまな中間データセット(.RDataサフィックス付き)とスクリプト(.Rサフィックス)の依存関係をチェックする基本的なMakefileです。Makeはタイムスタンプを使用して依存関係をチェックします。そのためtouch ss07por.csv、このファイルが依存しているすべてのファイル/ターゲットよりも新しいことがわかり、指定されたスクリプトを実行してそれらを適宜更新します。これは、SQLデータベースに入れるステップや、sweaveなどのテンプレート言語のステップを含む、まだ進行中の作業です。Makeは構文がタブに依存していることに注意してください。したがって、カットアンドペーストする前にマニュアルをお読みください。楽しんでフィードバックしてください!

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


11
ああ。ここに入る人は注意してください:この質問の答えは5年前は素晴らしかったです。それらはすべて完全に古くなっています。今日、私はここでの答えのいずれかに従うことを強くお勧めします。現在、より優れたツールが利用可能です。まず、MakefileとKnitrを使用たサンプルプロジェクトを参照します。
Konrad Rudolph

R Notebooksodbcドライバーgitgit lfsはすべて、この問題に対処するための天国です。
DaveRGP 2018年

ここで概説されている原則に従ってプロジェクトを設定することを強くお勧めします(github.com/ropensci/rrrpkg)。いわゆる「研究コンペディウム」は、再現可能なデータサイエンスを行う際の天の恵みです
Kresten

回答:


195

私は通常、プロジェクトを4つの部分に分割します。

  1. load.R
  2. clean.R
  3. func.R
  4. do.R

load.R:必要なすべてのデータの読み込みを処理します。通常、これは短いファイルで、ファイル、URL、ODBCからデータを読み取ります。この時点でのプロジェクトに応じて、save()次のステップのためにワークスペースを使用して書き込むか、メモリに保持します。

clean.R:これは、すべての醜い要素が存在する場所です-欠損値の処理、データフレームのマージ、異常値の処理。

func.R:実際の分析を実行するために必要なすべての関数が含まれています。source()このファイルを作成しても、関数定義をロードする以外の副作用はありません。つまり、大きなデータセットの実行に時間がかかる可能性があるステップ1と2を繰り返す必要がなく、このファイルを変更して再ロードできます。

do.R:func.Rで定義された関数を呼び出して、分析を実行し、チャートとテーブルを生成します。

このセットアップの主な動機は、後続のステップに変更を加えるたびにデータをリロードする必要がないようにしたい大きなデータを操作することです。また、コードをこのように区分しておくと、長い間忘れられていたプロジェクトに戻ってすぐにload.Rを読み取り、更新する必要のあるデータを確認してから、do.Rを確認して、実行された分析を確認できます。


12
これは本当に良いワークフローです。私はワークフローの設計に苦労しており、周りの人に尋ねると、「何ですか?ワークフロー?えっ?」だから私は彼らがこれについてあまり考えていないと思います。私はReichian LCFDモデルを採用します。
JD Long

1
これは私のワークフローにかなり近いです。インポートスクリプト、分析スクリプト、レポートスクリプトがよくあります
kpierce8 '10

4
LCFD:一般的に汚されたデータの最小値
William Doane

2
このワークフローを組み込んだJeromy Anglimによる素晴らしいプレゼンテーションビデオとスライドがあります。ここではvcasmo.com/video/drewconway/10362
David LeBauer


95

いくつかの例をご覧になりたい場合は、オンラインで利用できる少数の(それほど小規模ではない)データクリーニングおよび分析プロジェクトを用意しています。ほとんどの場合、データをダウンロードするスクリプト、データをクリーンアップするスクリプト、および探索と分析を行うスクリプトが見つかります。

最近、スクリプトに番号を付け始めたので、実行する順序が完全にわかります。(私が本当にファンシーだと感じている場合は、探索スクリプトがクリーニングスクリプトを呼び出し、ダウンロードスクリプトが呼び出されるように設定することがあります。それぞれが必要な最小限の作業を実行しますfile.exists。通常、で出力ファイルの存在を確認します。ただし、ほとんどの場合、これはやり過ぎのようです。

私はすべてのプロジェクト(ソースコード管理システム)にgitを使用しているため、他のユーザーとの共同作業、変更点の確認、以前のバージョンへのロールバックを簡単に行うことができます。

正式なレポートを作成する場合、通常はRとlatexを別々に保持しsourceますが、レポートに必要なすべてのコードと出力をRコードで生成できることを常に確認しています。私が行う種類のレポートについては、これは、latexを使用するよりも簡単でわかりやすいと思います。


上記のMakefileについてコメントしましたが、Makefileを調べてみてください。これは、従来の依存関係チェック言語です。また、ggplot2を学習しようと思います。
forkandwait 2009

私はファイル間の依存関係を指定する方法があるというアイデアが好きですが、m4を学ぶ必要があることは大きな転換点です。Rで書かれたrakenのようなものがあったらいいのに
ハドリー2009

2
依存関係については、Rファイル内でも実行できます。を行う代わりにsource("blah.R")、必要な変数が最初に存在するかどうかを確認しますif (!exists("foo")) { source("blah.R") }。これにより、依存関係が既に実行されている場合、依存関係の再実行を回避できます。
naught101 2013

17

他のレスポンダーに同意します。SweaveはRでのレポート作成に最適です。更新された結果を使用してレポートを再構築することは、Sweave関数を再呼び出しするのと同じくらい簡単です。すべての分析やデータなどを含め、完全に自己完結型です。また、ファイル全体をバージョン管理できます。

私はレポートの開発にEclipseのStatETプラグインを使用しており、Sweaveが統合されています(Eclipseはラテックスのフォーマットなどを認識します)。Windowsでは、MikTEXを使用するのは簡単です

Beamerで美しいレポートを作成できることも付け加えておきます。通常のレポートの作成も同じくらい簡単です。以下に、Yahoo!からデータを取得する例を含めました。チャートとテーブルを作成します(quantmodを使用)。このレポートは次のように作成できます。

Sweave(file = "test.Rnw")

Beamerドキュメント自体は次のとおりです。

% 
\documentclass[compress]{beamer}
\usepackage{Sweave}
\usetheme{PaloAlto} 
\begin{document}

\title{test report}
\author{john doe}
\date{September 3, 2009} 

\maketitle

\begin{frame}[fragile]\frametitle{Page 1: chart}

<<echo=FALSE,fig=TRUE,height=4, width=7>>=
library(quantmod)
getSymbols("PFE", from="2009-06-01")
chartSeries(PFE)
@

\end{frame}


\begin{frame}[fragile]\frametitle{Page 2: table}

<<echo=FALSE,results=tex>>=
library(xtable)
xtable(PFE[1:10,1:4], caption = "PFE")
@

\end{frame}

\end{document}

6
クリーンなマシンでテストするまで、Sweaveレポートが再現可能であるとは思わないでください。暗黙的な外部依存関係を持つことは簡単です。
ジョンD.クック

16

誰かが見逃した場合に備えて、Jeffrey Hornerのbrewパッケージを使用して繰り返しレポート作成することについて、学習者のブログにすばらしい投稿があることを追加したいと思います。マットとケビンはどちらも上記の醸造について述べました。自分ではあまり使っていません。

エントリは素晴らしいワークフローに従うので、一読する価値は十分にあります。

  1. データを準備します。
  2. レポートテンプレートを準備します。
  3. レポートを作成します。

最初の2つのステップが完了すると、実際にレポートを作成するのは非常に簡単です。

library(tools)
library(brew)
brew("population.brew", "population.tex")
texi2dvi("population.tex", pdf = TRUE)

小さな文法エラーを修正する際に、wordpress.comのアドレスをめちゃくちゃにしました。したがって、正しいリンクは learnr.wordpress.com/2009/09/09/…です
学習者

14

カスタムレポートを作成するには、ここで提案されている既存のヒントの多くを組み込むと便利です。

レポートの生成:レポート を生成するための優れた戦略には、Sweave、make、およびRの組み合わせが含まれます。

エディター: Sweave文書を準備するための優れたエディターには、次のものがあります。

  • StatETとEclipse
  • EmacsとESS
  • VimとVim-R
  • Rスタジオ

コード編成: コード編成の観点から、私は2つの戦略が役立つと思います。


7

私はSweaveをレポート作成側に使用していますが、brewパッケージについても聞いています-まだ調べていませんが。

基本的に、私は要約統計を作成するためにいくつかの調査を行っています。毎回同じ調査、同じレポート。レポート用のSweaveテンプレートを作成しました(少し作業がかかります)。しかし、作業が完了すると、新しいデータを指摘できる別のRスクリプトができます。「Go」を押すと、Sweaveがいくつかのスコア.texファイルをダンプし、小さなPythonスクリプトを実行して、それらすべてをpdflatexします。私の前任者はこれらのレポートに毎年約6週間を費やしました。私は約3日間を費やしています(主にデータのクリーニングに使用しています。エスケープ文字は危険です)。

今より良いアプローチがある可能性は非常に高いですが、もしあなたがこのルートに行くことに決めたなら、私に知らせてください-私は私のSweaveハックのいくつかを置くつもりでした、そしてそれはパンツの良いキックになるでしょうそう。


これらの「Sweaveハック」のいくつかを見たいと思います。頭痛の種です!
Brandon Bertelsen、

7

ツールではなくプロジェクトワークフローについて具体的に質問したという事実に基づいて、他の提出者とは異なる方向で何かを提案します。ドキュメント作成モデルに比較的満足しているとすると、バージョントラッキング、資産管理、およびレビュー/公開プロセスの問題にもっと重点が置かれているように思えます。

それが正しいように思える場合は、Redmineのような統合されたチケット/ソース管理/ドキュメントツールを検討することをお勧めします。保留中のタスク、ディスカッションスレッド、バージョン管理されたデータ/コードファイルなど、関連するプロジェクトアーティファクトをまとめておくことは、従来の「プログラミング」ベイリウィックの外にあるプロジェクトにとっても非常に役立ちます。


5

LaweX テーブルを生成するためのxtableを使用して、Sweaveが進むべき道であることに同意しました。私はそれらを扱うのにあまり時間を費やしていませんが、最近リリースされたtikzDeviceパッケージは、特にpgfSweave組み合わせたときに本当に有望に見えます(現時点では、これはrforge.netでのみ利用可能です-そこからr-forgeにリンクしますが、現時点では応答していません)。

2つの間で、テキストと図(フォントなど)の間で一貫したフォーマットが得られます。brewでは、これらはレポート生成の聖杯を構成する可能性があります。


開発者が新しいtikzDeviceを組み込む時間がなかったので、pgfSweaveは現在「開発段階」にあります。ここでは、通常のSweaveドキュメント内からtikzDeviceを使用することをお勧めします。ユーザーは、デバイスを開いたり閉じたり、結果の出力を含めたりするだけでよいのです。
シャーピー

@Sharpie:pgfSweaveの開発状況に関する更新はありますか?見栄えは良いですが、私が試したどのシステムでも動作しないようです。
アリB.フリードマン、

@ gsk3他の開発者はpgfSweaveを最新の状態に保つことに非常に積極的であり、そのコメントを投稿して以来、多くの作業を行ってきました。開発を追跡するには、github.com / cameronbracken / pgfSweaveにアクセスしてください。パッケージが機能しない場合は、バグレポートを入手して修正できるようにします。
シャーピー

@シャーピー:ありがとうございます。私はあなたよりも多くの仕事をしている友人にあなたのメッセージを転送しました。彼がすぐにバグレポートを提出しない場合は、私がまとめて報告します。それは素晴らしいパッケージのように見えます。すべてのハードワークに感謝します。
アリB.フリードマン


4

"make"は、(1)SweaveやBrewなどとは異なる任意の言語ですべての作業に使用できること、(2)非常に強力であること(すべてのソフトウェアをマシン上に構築するのに十分なこと)、そして(3)作業の繰り返しを避けます。多くの作業が遅いため、この最後のポイントは私にとって重要です。ファイルをラテックス化するとき、図を再作成するのにかかる1時間ではなく、数秒で結果を確認します。


makeの+1。ただし、makeがSweaveと互換性がないとは思いません。むしろ、レポートを作成するときは、Sweave(およびその他のもの)を呼び出します。
Jeromy Anglim 2010年

3

私はR studioと一緒にプロジェクトテンプレートを使用していますが、現在は次のフォルダーが含まれています。

  • info :PDF、パワーポイント、ドキュメント...どのスクリプトでも使用されません
  • data input :スクリプトで使用されるが、スクリプトでは生成されないデータ
  • data output :後で使用するためにスクリプトによって生成されたデータですが、適切なレポートではありません。
  • reports :実際に他の人に表示されるファイルのみ
  • R :すべてのRスクリプト
  • SAS :私は時々: '(

私はカスタム関数を書いたので、フォルダー(変数名で名前が付けられたファイル)を呼び出しsmart_save(x,y)たり、フォルダーsmart_load(x)に保存したりRDS filesdata outputフォルダーからロードしたりすることができます。paths、分析中に。

カスタム関数new_projectは、番号付きのプロジェクトフォルダーを作成し、テンプレートからすべてのファイルをコピーし、ファイルの名前を変更しRProjsetwd呼び出しを編集し、作業ディレクトリを新しいプロジェクトに設定します。

すべてのRスクリプトはRフォルダー内にあり、次のように構造化されています。


00_main.R
  • setwd
  • スクリプト1から5を呼び出します

00_functions.R
  • すべての関数と関数だけがそこに行きます、あまりに多くある場合、それをいくつかのよう00_functions_something.Rに名前を付けていくつかに分けます

00_explore.R
  • 物事をテストしたり、データを探索したりするスクリプトチャンクの束
  • 乱雑にさせられる唯一のファイルです。

01_initialize.R
  • initialize_general.Rテンプレートフォルダーからの、より一般的なスクリプトへの呼び出しが事前に入力されています。これにより、いつも使用していて、ワークスペースにいてもかまわないパッケージとデータが読み込まれます。
  • 負荷00_functions.R(事前入力)
  • 追加のライブラリをロードします
  • グローバル変数を設定する

02_load data.R
  • 読み込みcsv/txt xlsx RDS、すべてのタイプのファイルに対して事前に入力されたコメント行があります
  • ワークスペースに作成されたファイルを表示します

03_pull data from DB.R
  • を使用dbplyrして、フィルター処理およびグループ化されたテーブルをDBからフェッチします。
  • 接続とフェッチをセットアップするためのいくつかの事前に記入されたコメント行。
  • クライアント側の操作を最小限に抑える
  • このスクリプト以外ではサーバー側の操作はありません
  • ワークスペースで作成されたファイルを表示します
  • これらの変数を保存して、すばやくリロードできるようにします

一度query_dbブール値をオフにすると、データがリロードされます。RDS次回。

データをDBに再フィードしなければならない場合があります。その場合、追加のステップを作成します。


04_Build.R
  • データラングリング、すべての楽しみdplyr/ tidyrものがそこに行きます
  • ワークスペースに作成されたファイルを表示します
  • これらの変数を保存する

完了したら、buildブール値をオフにして、RDS次回からデータを再読み込みします。


05_Analyse.R
  • 要約、モデル化...
  • レポートexcelcsvファイル

95_build ppt.R
  • を使用したPowerPointレポートのテンプレート officer

96_prepare markdown.R
  • setwd
  • データを読み込む
  • 必要に応じてマークダウンパラメータを設定する
  • render

97_prepare shiny.R
  • setwd
  • データを読み込む
  • 必要に応じて光沢のあるパラメータを設定します
  • runApp

98_Markdown report.Rmd
  • レポートテンプレート

99_Shiny report.Rmd
  • アプリテンプレート

2

簡単な予備レポートや同僚へのメールを書くには、プロットをMS Wordやメールやwikiページにコピーアンドペーストするのが非常に効率的であることがわかります。 -Shift-(Ctrl)-4)。これは過小評価されているテクニックだと思います。

より最終的なレポートを作成するには、すべてのプロットを(ファイルとして)簡単に再生成するR関数を作成することが非常に重要です。これをコード化するには、もっと時間がかかります。

より大きなワークフローの問題については、クリーニングと分析フローのコード/データファイルの列挙に関するHadleyの回答が気に入っています。私のデータ分析プロジェクトはすべて同じような構造です。


2

スウィーブに声を入れます。複雑なマルチステップ分析の場合、メイクファイルを使用してさまざまな部分を指定できます。1つの部分だけが変更された場合に、分析全体を繰り返す必要をなくすことができます。


0

また、Josh Reichが行うことも行います。コードとデータを構造化するのに役立ち、他の人と共有することも非常に簡単であるため、個人用のRパッケージを作成するだけです。

  1. パッケージを作成
  2. 負荷
  3. 掃除
  4. 関数
  5. 行う

私のパッケージを作成する:devtools :: create( 'package_name')

ロードおよびクリーンアップ:devtools :: use_data(object_name)を使用して、結果のデータオブジェクトをパッケージにロード、クリーンアップ、および格納するために、パッケージのdata-raw /サブフォルダーにスクリプトを作成します。次に、パッケージをコンパイルします。今後、library(package_name)を呼び出すと、これらのデータが利用可能になります(必要になるまで読み込まれません)。

関数:分析用の関数をパッケージのR /サブフォルダーに入れ、外部から呼び出す必要がある関数のみをエクスポートします(非表示のままにできるヘルパー関数はエクスポートしません)。

行う:パッケージに格納されているデータと関数を使用するスクリプトを作成します。(分析を1回だけ行う必要がある場合は、このスクリプトもdata-raw /サブフォルダーに入れて実行し、結果をパッケージに格納して簡単にアクセスできるようにすることができます。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.