web-dev-qa-db-ja.com

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

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

  1. クライアントは、データ分析を使用するレポートを依頼します。水域の人口推定と関連マップ。

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

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

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

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

  6. 来年、幸せなクライアントが戻ってきて、更新を望んでいます。これは、仕様を変更しない限り、新しいダウンロードでアップストリームデータを更新し(たとえば、昨年から建築許可を取得する)、「RECALCULATE」ボタンを押すだけの簡単なものでなければなりません。

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

ありがとう!

PS:

以下は、さまざまな中間データセット(w/.RDataサフィックス)およびスクリプト(.Rサフィックス)。 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関数.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>レポート。 txt

179
forkandwait

私は通常、プロジェクトを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を調べて実行された分析を見つけることができます。

193
Josh Reich

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

最近、スクリプトの番号付けを開始しました。そのため、どの順序でスクリプトを実行するかが完全に明らかです。 (私が本当に空想を感じている場合は、探検スクリプトがダウンロードスクリプトを呼び出すクリーニングスクリプトを呼び出すように時々作成します。それぞれが必要な最小限の作業を行います-通常、file.existsで出力ファイルの存在を確認することにより。しかし、ほとんどの場合、これは過剰に思えます)。

私はすべてのプロジェクト(ソースコード管理システム)でgitを使用しているため、他のユーザーとのコラボレーションが容易で、何が変わっているのかを確認し、以前のバージョンに簡単にロールバックできます。

正式なレポートを作成する場合、私は通常Rとラテックスを分離しますが、レポートに必要なすべてのコードと出力を生成するためにRコードをsourceできることを常に確認します。私が行うレポートの種類については、ラテックスを使用するよりも簡単でわかりやすいと思います。

94
hadley

私は他のレスポンダーに同意します。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}
17
Shane

誰かがそれを見逃した場合に備えて、 繰り返しレポートの作成に関する学習者のブログに素晴らしい投稿があります with Jeffrey Hornerのbrew package を追加したかっただけです。マットとケビンは両方とも上記の醸造について言及しました。私は実際にはあまり使いませんでした。

エントリはNiceワークフローに従っているため、読む価値が十分にあります。

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

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

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

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

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

エディター:Sweaveドキュメントを準備するための優れたエディターは次のとおりです。

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

コード編成:コード編成に関しては、2つの戦略が有用だと思います:

14
Jeromy Anglim

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

それが正しいように思える場合は、 Redmine のような統合チケット/ソース管理/文書化ツールを検討することをお勧めします。保留中のタスク、ディスカッションスレッド、およびバージョン化されたデータ/コードファイルなどの関連プロジェクトアーティファクトを一緒に保持することは、従来の「プログラミング」のバイリウィック以外のプロジェクトでも大きな助けになります。

7
rcoder

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

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

今より良いアプローチがある可能性は非常に高いですが、もしあなたがこのルートに行くことに決めたら、私に知らせてください。そう。

7
Matt Parker

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

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

5
kmm

「make」は素晴らしいです。(1)あらゆる言語のすべての作業に使用できます(たとえば、SweaveやBrewとは異なります)。 (3)繰り返し作業を避けます。多くの作業が遅いため、この最後の点は重要です。ファイルをラテックス化するとき、数字を再現するのにかかる時間ではなく、数秒で結果を見るのが好きです。

4
dank

より「メタ」レベルでは、 CRISP-DM プロセスモデルに興味があるかもしれません。

4

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

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

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

2
Brendan OConnor

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

  • info:pdfs、powerpoints、docs ...これはどのスクリプトでも使用されません
  • data input:スクリプトによって使用されるが、スクリプトによって生成されないデータ
  • data output:さらなる使用のためにスクリプトによって生成されたデータですが、適切なレポートとしてではありません。
  • reports:実際に他の誰かに表示されるファイルのみ
  • R:すべてのRスクリプト
  • SAS:私は時々: '(

smart_save(x,y)またはsmart_load(x)を呼び出してRDS filesdata outputフォルダー(変数名で名前が付けられたファイル)に保存またはロードできるようにカスタム関数を作成したため、paths分析中。

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

すべての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/txtxlsxRDSをロードします。ファイルのタイプごとに事前に入力されたコメント行があります
  • ワークスペースで作成されたファイルを表示します

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

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

DBにデータを再フィードする必要がある場合があります。その場合、追加のステップを作成します。


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

いったんbuildブール値をオフにすると、それが完了したら、次回RDSからデータがリロードされます。


05_Analyse.R
  • 要約、モデル...
  • レポートExcelおよびcsvファイル

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

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

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

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

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

声をスウィーヴに追加します。複雑なマルチステップ分析では、 makefile を使用して異なる部分を指定できます。 1つの部分だけが変更された場合、分析全体を繰り返す必要がなくなります。

2
PaulHurleyuk

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

  1. パッケージを作成する
  2. 負荷
  3. 掃除
  4. 機能
  5. 行う

パッケージの作成:devtools :: create( 'package_name')

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

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

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

0
jciloa