통계 분석 및 보고서 작성을위한 워크 플로우


185

사용자 정의 보고서 작성과 관련된 데이터 분석을위한 워크 플로우에 대한 지식이 있습니까? 유스 케이스는 기본적으로 다음과 같습니다.

  1. 고객은 데이터 분석을 사용하는 보고서, 예를 들어 수자원 지구에 대한 인구 추정 및 관련 맵을 의뢰합니다.

  2. 분석가는 일부 데이터를 다운로드하고 데이터를 병합하며 결과를 저장합니다 (예 : 단위당 인구에 대한 열 추가 또는 지구 경계에 따라 데이터 하위 설정).

  3. 분석가는 (2)에서 생성 된 데이터를 분석하고 목표에 가까워 지지만 더 많은 데이터가 필요하므로 (1)로 돌아갑니다.

  4. 테이블과 그래픽이 QA / QC를 충족하고 클라이언트를 만족시킬 때까지 헹굽니다.

  5. 테이블과 그래픽을 통합 한 보고서를 작성하십시오.

  6. 내년에 행복한 고객이 돌아와서 업데이트를 원합니다. 사양을 변경하지 않는 한 새 다운로드로 업스트림 데이터를 업데이트하고 (예 : 작년에 건물 허가를받는 등) "RECALCULATE"버튼을 누르는 것처럼 간단해야합니다.

지금은 디렉토리를 시작하고 최선을 다해 임시로 만듭니다. 좀 더 체계적인 접근 방식을 원하므로 누군가가 이것을 이해하기를 바라고 있습니다. 나는 스프레드 시트, SQL, ARCGIS, R 및 Unix 도구를 혼합하여 사용합니다.

감사!

추신:

다음은 다양한 중간 데이터 세트 ( .RData접미사 포함) 및 스크립트 ( .R접미사) 에 대한 종속성을 확인하는 기본 Makefile입니다 . Make는 타임 스탬프를 사용하여 종속성을 확인하므로이 touch ss07por.csv파일이 종속 된 모든 파일 / 대상보다이 파일이 최신 파일인지 확인하고 지정된 스크립트를 실행하여 그에 따라 업데이트합니다. 이 작업은 여전히 ​​SQL 데이터베이스에 들어가기위한 단계 및 스 웨브와 같은 템플릿 언어를위한 단계를 포함하여 진행중인 작업입니다. 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


10
어머. 여기에 입력 한 사람들은 조심 :이 질문에 대한 답은 5 년 전 우수했다. 그들은 지금 모든 완전히 구식. 요즘에는 대답을 따르지 않는 것이 좋습니다. 더 나은 도구를 사용할 수있게되었습니다. 먼저 Makefiles 및 Knitr을 사용하는 예제 프로젝트를 언급 하겠습니다 .
Konrad Rudolph

R 노트북 , odbc 드라이버 , gitgit lfs모두이 문제로 인해 전송됩니다.
DaveRGP

여기에 설명 된 원칙에 따라 프로젝트를 설정하는 것이 좋습니다 ( github.com/ropensci/rrrpkg ). 소위 "연구 compedium"은 재현 가능한 데이터 과학을 할 때 신의 선물입니다
Kresten

답변:


195

나는 일반적으로 프로젝트를 4 개 조각으로 나눕니다.

  1. 로드
  2. 깨끗합니다 .R
  3. func.R
  4. 할 .R

R : 필요한 모든 데이터를로드합니다. 일반적으로 이것은 파일, URL 및 / 또는 ODBC에서 데이터를 읽는 짧은 파일입니다. 이 시점의 프로젝트에 따라 save()다음 단계를 사용하여 작업 공간을 작성 하거나 메모리에 보관합니다.

clean.R : 결 측값을 처리하고, 데이터 프레임을 병합하고, 이상 값을 처리하는 모든 추악한 것들이있는 곳입니다.

func.R : 실제 분석을 수행하는 데 필요한 모든 기능이 포함되어 있습니다. source()이 파일은 함수 정의를로드하는 것 외에 부작용이 없어야합니다. 즉, 큰 데이터 세트에 대해 실행하는 데 시간이 오래 걸릴 수있는 1 단계와 2 단계를 반복하지 않고도이 파일을 수정하고 다시로드 할 수 있습니다.

do.R : func.R에 정의 된 함수를 호출하여 분석을 수행하고 차트와 테이블을 생성합니다.

이 설정의 주요 동기는 후속 단계를 변경할 때마다 데이터를 다시로드 할 필요가없는 대용량 데이터를 다루는 것입니다. 또한 코드를 이와 같이 구획화하면 오랫동안 잊혀진 프로젝트로 돌아와서 빠르게로드를 읽을 수 있습니다 .R은 업데이트해야 할 데이터를 계산 한 다음 수행해야 할 데이터를 분석하여 수행 된 분석을 수행합니다.


12
정말 좋은 워크 플로우입니다. 워크 플로를 디자인하는 데 어려움을 겪고 있으며 주변 사람들에게 일반적으로 "무엇입니까? 워크 플로? 응?" 그래서 나는 그들이 이것에 대해 많이 생각하지 않는다고 생각합니다. Reichian LCFD 모델을 채택하겠습니다.
JD Long

1
이것은 내 워크 플로와 매우 가깝습니다. 종종 가져 오기 스크립트, 분석 스크립트 및보고 스크립트가 있습니다.
kpierce8 2009

4
LCFD : 가장 흔하게 파산 된 데이터
William Doane

2
Jeromy Anglim의 멋진 프리젠 테이션 비디오 + 슬라이드가 여기에 있습니다. vcasmo.com/video/drewconway/10362
David LeBauer


94

몇 가지 예를 보려면 온라인에서 사용할 수있는 소규모 (소형이 아닌) 데이터 정리 및 분석 프로젝트가 있습니다. 대부분의 경우 데이터를 다운로드하는 스크립트, 정리하는 스크립트 및 탐색 및 분석을위한 스크립트를 찾을 수 있습니다.

최근에 스크립트 번호를 매기기 시작 했으므로 어떤 순서로 스크립트를 실행해야하는지 분명합니다. (정말 기분이 좋으면 탐색 스크립트가 청소 스크립트를 호출하고 다운로드 스크립트를 호출하여 필요한 최소 작업을 수행합니다. 일반적으로 출력 파일이 있는지 확인하여 file.exists. 그러나 대부분의 경우 이것은 과도한 것으로 보입니다.

모든 프로젝트 (소스 코드 관리 시스템)에 git을 사용하므로 다른 사람들과 공동 작업하기 쉽고 변경 사항을 확인하고 이전 버전으로 쉽게 롤백 할 수 있습니다.

공식 보고서를 작성하는 경우 일반적으로 R과 라텍스를 별도로 유지하지만 항상 sourceR 코드를 사용하여 보고서에 필요한 모든 코드와 출력을 생성 할 수 있는지 확인합니다 . 내가하는 종류의 보고서에 대해서는 라텍스 작업보다 더 쉽고 깔끔하다는 것을 알았습니다.


위의 Makefile에 대해 언급했지만, 당신은 그것들을 살펴보고 싶을 것입니다-그것은 전통적인 의존성 검사 언어입니다. 또한-ggplot2를 배우려고합니다-멋지게 보입니다!
forkandwait

파일 사이의 종속성을 지정하는 방법이 마음에 들지만 m4를 배우는 것이 큰 도움입니다. 나는 R로 쓰여진 갈퀴 같은 것이 있었으면 좋겠다.
hadley

2
종속성의 경우 R 파일 내에서도 수행 할 수 있습니다. 을 수행하는 대신 source("blah.R")필요한 변수가 먼저 존재하는지 확인하십시오 if (!exists("foo")) { source("blah.R") }. 종속성이 이미 실행 된 경우 다시 실행하지 않아도됩니다.
naught101

17

다른 응답자에 동의합니다. Sweave는 R을 사용한 보고서 작성에 탁월합니다. 업데이트 된 결과로 보고서를 다시 작성하는 것은 Sweave 기능을 다시 호출하는 것만 큼 간단합니다. 모든 분석, 데이터 등을 포함하여 완전히 독립적이며 전체 파일을 버전 제어 할 수 있습니다.

보고서 개발을 위해 Eclipse 용 StatET 플러그인을 사용하고 Sweave가 통합되었습니다 (Eclipse는 라텍스 형식 지정 등을 인식 함). Windows에서는 MikTEX를 사용하기 쉽습니다 .

또한 Beamer로 멋진 보고서를 만들 수 있다고 덧붙였습니다 . 일반 보고서 작성은 간단합니다. Yahoo!에서 데이터를 가져 오는 예제가 아래에 포함되어 있습니다. quantmod를 사용하여 차트와 테이블을 만듭니다. 다음과 같이이 보고서를 작성할 수 있습니다.

Sweave(file = "test.Rnw")

비머 문서 자체는 다음과 같습니다.

% 
\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 보고서는 깨끗한 기계에서 테스트 할 때까지 재현 할 수 있다고 믿지 마십시오. 암시적인 외부 종속성을 갖는 것은 쉽습니다.
John D. Cook

16

누군가가 그것을 놓친 경우를 대비 하여 Jeffrey Horner의 brew 패키지를 사용 하여 반복적 인 보고서만드는 것에 대한 학습자 블로그에 훌륭한 게시물있음 을 추가하고 싶었습니다 . 매트와 케빈은 모두 위에서 양조를 언급했습니다. 나는 실제로 그것을 많이 사용하지 않았습니다.

항목은 훌륭한 워크 플로를 따르므로 읽을 가치가 있습니다.

  1. 데이터를 준비하십시오.
  2. 보고서 템플릿을 준비하십시오.
  3. 보고서를 작성하십시오.

처음 두 단계가 완료되면 실제로 보고서를 작성하는 것은 매우 간단합니다.

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 문서를 준비하기위한 좋은 편집자는 다음과 같습니다.

  • 통계 및 이클립스
  • 이맥스와 ESS
  • Vim과 Vim-R
  • R 스튜디오

코드 구성 : 코드 구성 측면에서 두 가지 전략이 유용하다고 생각합니다.


7

보고서 작성 측면에서 Sweave 를 사용 하지만 아직 살펴 보지 않았지만 추출 패키지 에 대해 들었습니다.

기본적으로 요약 통계를 생성하는 여러 설문 조사가 있습니다. 매번 동일한 설문 조사, 동일한 보고서. 보고서에 대한 Sweave 템플릿을 작성했습니다 (일이 다소 걸림). 그러나 작업이 완료되면 별도의 R 스크립트를 사용하여 새 데이터를 가리킬 수 있습니다. "Go"를 누르고 Sweave는 몇 개의 점수 .tex 파일을 덤프하고 작은 python 스크립트를 실행하여 모두 pdflatex합니다. 전임자는이 보고서에 매년 ~ 6 주를 보냈습니다. 나는 약 3 일을 보냅니다 (주로 데이터 정리에; 이스케이프 문자는 위험합니다).

지금은 더 나은 접근 방식이있을 가능성이 매우 높지만이 경로를 사용하기로 결정한 경우 알려주십시오. 나는 Sweave 해킹을 입어 두는 것이 좋았습니다. 그래서.


이 "스 위브 해킹"의 일부를보고 싶습니다. 두통이납니다!
Brandon Bertelsen

7

도구가 아닌 프로젝트 워크 플로 에 대해 구체적으로 요청한 사실을 바탕으로 다른 제출자와 다른 방향으로 무언가를 제안하려고 합니다 . 문서 제작 모델에 상대적으로 만족한다고 가정하면 버전 추적, 자산 관리 및 검토 / 게시 프로세스 문제와 관련하여 문제가 더 집중 될 수 있습니다.

그것이 정확하다고 들리면 Redmine 과 같은 통합 발권 / 소스 관리 / 문서 도구를 살펴 보는 것이 좋습니다 . 보류중인 작업, 토론 스레드 및 버전이 지정된 데이터 / 코드 파일과 같은 관련 프로젝트 아티팩트를 함께 유지하면 전통적인 "프로그래밍"bailiwick 이외의 프로젝트에도 큰 도움이 될 수 있습니다.


5

LaTeX 테이블 생성을위한 xtable 을 사용 하여 Sweave 를 사용하는 방법에 동의했습니다 . 그들과 함께 일하는 데 너무 많은 시간을 소비하지는 않았지만 최근에 출시 된 tikzDevice 패키지는 특히 pgfSweave 와 결합했을 때 매우 유망 해 보입니다 . 거기에서 r-forge로 연결되지만 현재 응답하지 않습니다.)

이 둘 사이에서 텍스트와 그림 (글꼴 등)간에 일관된 형식을 지정할 수 있습니다. 양조를 사용하면 보고서 생성의 성배가 될 수 있습니다.


개발자가 새로운 tikzDevice를 통합 할 시간이 없었기 때문에 pgfSweave는 현재 "개발 림보"에 있습니다. 지금은 일반적인 Sweave 문서에서 tikzDevice를 사용하는 것이 좋습니다. 사용자는 장치를 열고 닫고 결과 출력을 포함하는 것을 책임 져야합니다.
Sharpie

@Sharpie : pgfSweave의 개발 상태에 대한 업데이트가 있습니까? 멋지지만 시도한 시스템에서 작동하지 않는 것 같습니다.
Ari B. Friedman

@ gsk3 다른 개발자는 pgfSweave를 지속적으로 업데이트하고 그 의견을 게시 한 이후 많은 작업을 수행했습니다. 개발을 추적 하려면 github.com/cameronbracken/pgfSweave 로 이동하십시오. 패키지가 당신을 위해 작동하지 않는 경우, 우리는 우리가 그것을 고칠 수 있도록 버그 보고서를 얻고 싶습니다.
Sharpie

@Sharpie : 감사합니다. 내가 가진 것보다 더 많은 일을하고있는 친구에게 당신의 메시지를 전달했습니다. 그가 곧 버그 보고서를 제출하지 않으면 함께 모일 것입니다. 훌륭한 패키지처럼 보입니다. 모든 노력에 감사드립니다.
Ari B. Friedman


4

"make"는 (1) Sweave and Brew와는 달리 어떤 언어로든 모든 작업에 사용할 수 있고 (2) 컴퓨터에 모든 소프트웨어를 구축하기에 매우 강력하기 때문에 강력합니다. (3) 반복되는 작업을 피합니다. 이 마지막 요점은 많은 작업이 느리기 때문에 나에게 중요합니다. 파일을 라텍스로 만들면 그림을 다시 만드는 데 걸리는 시간이 아니라 몇 초 안에 결과를보고 싶습니다.


make +1; 그러나 make가 Sweave와 호환되지 않는 것으로 보지 않습니다. 보고서를 작성할 때 대신 Sweave (및 기타)를 호출하십시오.
Jeromy Anglim

3

R 스튜디오와 함께 프로젝트 템플릿을 사용하는데 현재 다음 폴더가 있습니다.

  • info : pdfs, powerpoints, docs ... 어떤 스크립트에서도 사용되지 않습니다
  • data input : 내 스크립트에서 사용하지만 생성하지 않은 데이터
  • data output : 나중에 사용하기 위해 스크립트에서 생성 한 데이터이지만 적절한 보고서로는 사용되지 않습니다.
  • reports : 실제로 다른 사람에게 표시되는 파일 만
  • R : 모든 R 스크립트
  • SAS : 때때로 :) (

나는 사용자 정의 함수를 작성 하여 폴더 (변수 이름으로 명명 된 파일) 를 호출 smart_save(x,y)하거나 smart_load(x)저장하거나로드 RDS files할 수 data 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
  • loads csv/txt xlsx RDS, 모든 유형의 파일에 대해 미리 채워진 주석 처리 된 행이 있습니다.
  • 작업 공간에서 생성 된 파일을 표시합니다.

03_pull data from DB.R
  • dbplyrDB에서 필터링 및 그룹화 된 테이블을 페치하는 데 사용
  • 연결을 설정하고 가져 오기 위해 미리 채워진 주석 처리 된 행.
  • 클라이언트 측 작업을 최소한으로 유지
  • 이 스크립트 이외의 서버 측 작업이 없습니다
  • 작업 공간에서 작성된 파일을 표시합니다
  • 이러한 변수를 저장하여 더 빨리 다시로드 할 수 있습니다

일단 query_db부울을 끄면 RDS다음에 데이터가 다시로드됩니다 .

데이터를 DB로 다시 공급해야 할 수도 있습니다. 그렇다면 추가 단계를 작성하겠습니다.


04_Build.R
  • 데이터 논쟁, 모든 재미 dplyr/ tidyr물건은 거기에 간다
  • 작업 공간에서 작성된 파일을 표시합니다
  • 이 변수를 저장

일단 build부울을 끄면 RDS다음에 데이터가 다시로드됩니다 .


05_Analyse.R
  • 요약, 모델 ...
  • 보고서 excelcsv파일

95_build ppt.R
  • 파워 포인트 보고서를위한 템플릿 officer

96_prepare markdown.R
  • setwd
  • 데이터로드
  • 필요한 경우 마크 다운 매개 변수 설정
  • render

97_prepare shiny.R
  • setwd
  • 데이터로드
  • 필요한 경우 반짝이는 매개 변수 설정
  • runApp

98_Markdown report.Rmd
  • 보고서 템플릿

99_Shiny report.Rmd
  • 앱 템플릿

2

빠른 예비 보고서 또는 이메일을 동료에게 작성하기 위해 플롯을 MS Word 또는 이메일 또는 위키 페이지에 복사하여 붙여 넣는 것이 매우 효율적일 수 있습니다. -Shift- (Ctrl) -4)를 클릭하십시오. 나는 이것이 과소 평가 된 기술이라고 생각합니다.

보다 최종적인 보고서를 위해서는 모든 플롯 (파일)을 쉽게 재생성하기 위해 R 함수를 작성하는 것이 매우 중요합니다. 이를 코딩하는 데 시간이 더 걸립니다.

더 큰 워크 플로 문제에서는 정리 및 분석 흐름을위한 코드 / 데이터 파일을 열거하는 Hadley의 답변이 마음에 듭니다. 모든 데이터 분석 프로젝트는 비슷한 구조를 가지고 있습니다.


2

나는 땀을 내 목소리를 추가합니다. 복잡한 다단계 분석의 경우 makefile 을 사용하여 다른 부분을 지정할 수 있습니다 . 한 부분 만 변경된 경우 전체 분석을 반복하지 않아도됩니다.


0

또한 Josh Reich가하는 일을 수행합니다. 코드와 데이터를 구성하는 데 도움이되는 개인 R 패키지를 만드는 것만으로도 다른 사람과 공유하기도 쉽습니다.

  1. 내 패키지 만들기
  2. 하중
  3. 깨끗한
  4. 기능
  5. 하다

내 패키지 만들기 : devtools :: create ( 'package_name')

로드 및 정리 : devtools :: use_data (object_name)을 사용하여 패키지에 결과 데이터 객체를로드, 정리 및 저장하기 위해 패키지의 data-raw / 하위 폴더에 스크립트를 만듭니다. 그런 다음 패키지를 컴파일합니다. 이제부터 library (package_name)를 호출하면 이러한 데이터를 사용할 수있게됩니다 (필요할 때까지로드되지 않음).

함수 : 분석을위한 함수를 패키지의 R / 하위 폴더에 넣고 외부에서 호출해야하는 함수 만 내보내고 (보이지 않는 도우미 함수는 제외) 내 보냅니다.

해야 할 일 : 패키지에 저장된 데이터와 함수를 사용하는 스크립트를 만듭니다. (분석을 한 번만 수행해야하는 경우,이 스크립트를 data-raw / 하위 폴더에 넣고 실행 한 후 결과를 패키지에 저장하여 쉽게 액세스 할 수 있습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.