有没有人对与自定义报告编写相关的数据分析工作流程有任何了解?用例基本上是这样的:
客户委托使用数据分析的报告,例如人口估计和水区的相关地图.
分析人员下载一些数据,对数据进行检测并保存结果(例如,为每个单位添加一列,或根据区域边界对数据进行子集化).
分析师分析了(2)中创建的数据,接近她的目标,但看到需要更多数据,因此可以追溯到(1).
冲洗重复,直到表格和图形符合QA/QC并满足客户要求.
编写包含表格和图形的报告.
明年,快乐的客户回来了,想要更新.这应该像通过新下载更新上游数据一样简单(例如,从去年获得建筑许可),并按下"RECALCULATE"按钮,除非规格发生变化.
目前,我只是开始一个目录,并尽我所能.我想要一个更系统化的方法,所以我希望有人能够解决这个问题......我使用了电子表格,SQL,ARCGIS,R和Unix工具.
谢谢!
PS:
下面是一个基本的Makefile,用于检查各种中间数据集(带.RData
后缀)和脚本(.R
后缀)的依赖关系.使用时间戳来检查依赖关系,因此,如果您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
Josh Reich.. 194
我通常将我的项目分为4个部分:
load.R
clean.R
func.R
do.R
load.R:负责加载所需的所有数据.通常,这是一个短文件,从文件,URL和/或ODBC读取数据.此时,根据项目的不同,我要么使用工作区写出工作区,save()
要么只是将内容保存在内存中以供下一步使用.
clean.R:这是所有丑陋的东西都存在的地方 - 处理缺失的值,合并数据框架,处理异常值.
func.R:包含执行实际分析所需的所有功能.source()
除了加载函数定义之外,这个文件应该没有任何副作用.这意味着您可以修改此文件并重新加载它,而无需返回重复步骤1和2,这可能需要很长时间才能运行大型数据集.
do.R:调用func.R中定义的函数来执行分析并生成图表和表格.
此设置的主要动机是处理大型数据,您不希望每次更改后续步骤时都必须重新加载数据.此外,保持我的代码区分这样意味着我可以回到一个长期被遗忘的项目并快速读取load.R并找出我需要更新的数据,然后查看do.R以确定执行的分析.
我通常将我的项目分为4个部分:
load.R
clean.R
func.R
do.R
load.R:负责加载所需的所有数据.通常,这是一个短文件,从文件,URL和/或ODBC读取数据.此时,根据项目的不同,我要么使用工作区写出工作区,save()
要么只是将内容保存在内存中以供下一步使用.
clean.R:这是所有丑陋的东西都存在的地方 - 处理缺失的值,合并数据框架,处理异常值.
func.R:包含执行实际分析所需的所有功能.source()
除了加载函数定义之外,这个文件应该没有任何副作用.这意味着您可以修改此文件并重新加载它,而无需返回重复步骤1和2,这可能需要很长时间才能运行大型数据集.
do.R:调用func.R中定义的函数来执行分析并生成图表和表格.
此设置的主要动机是处理大型数据,您不希望每次更改后续步骤时都必须重新加载数据.此外,保持我的代码区分这样意味着我可以回到一个长期被遗忘的项目并快速读取load.R并找出我需要更新的数据,然后查看do.R以确定执行的分析.
如果您想看一些示例,我可以在线获得一些小的(而不是很小的)数据清理和分析项目.在大多数情况下,您将找到一个用于下载数据的脚本,一个用于清理数据的脚本,以及一些用于探索和分析的脚本:
来自社会保障管理局的婴儿名字
来自EPI的30多年的燃油经济性数据
关于住房危机的大量数据
来自IMDB的电影评级
房屋销售数据在湾区
最近我开始编写脚本编号,因此它们的运行顺序是完全明显的.(如果我感觉真的很花哨,我有时会这样做,以便探索脚本会调用清理脚本,而脚本又调用下载脚本,每个人都做必要的最小工作 - 通常是通过检查输出文件的存在file.exists
.但是,大多数情况下这似乎有点矫枉过正).
我对我的所有项目(源代码管理系统)都使用git,因此很容易与其他人协作,看看有什么变化,并轻松回滚到以前的版本.
如果我做一个正式的报告,我通常会将R和latex分开,但我总是确保我可以使用source
我的R代码来生成报告所需的所有代码和输出.对于我所做的各种报告,我发现这比使用乳胶更容易和更清洁.
我同意其他响应者: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} <>= library(quantmod) getSymbols("PFE", from="2009-06-01") chartSeries(PFE) @ \end{frame} \begin{frame}[fragile]\frametitle{Page 2: table} < >= library(xtable) xtable(PFE[1:10,1:4], caption = "PFE") @ \end{frame} \end{document}
我只是想补充一下,如果有人错过了,那么在学习者博客上有一篇关于用Jeffrey Horner的brew包创建重复报告的精彩帖子.马特和凯文都提到了上面的酿造.我自己并没有真正使用它.
这些条目遵循一个很好的工作流程,因此值得一读:
准备数据.
准备报告模板.
制作报告.
实际上,在前两个步骤完成后生成报告非常简单:
library(tools) library(brew) brew("population.brew", "population.tex") texi2dvi("population.tex", pdf = TRUE)
为了创建自定义报告,我发现合并这里建议的许多现有技巧很有用.
生成报告:生成报告 的好策略涉及Sweave,make和R的组合.
编辑: 编写Sweave文档的优秀编辑包括:
StatET和Eclipse
Emacs和ESS
Vim和Vim-R
R Studio
代码组织: 在代码组织方面,我发现两种策略很有用:
阅读有关分析工作流程的信息(例如,ProjectTemplate,Josh Reich的想法,我自己在R工作流幻灯片 和视频上的演示 )
研究示例报告并识别工作流程
哈德利威克姆的例子
我在github上的例子
Cross Validated上列出的可重复研究的例子
我使用Sweave作为报告生成方面,但我也听说过brew包 - 虽然我还没有调查过.
基本上,我有一些调查,我可以为其生成汇总统计数据.相同的调查,每次都有相同的报告.我为报告构建了一个Sweave模板(需要一些工作).但是一旦工作完成,我就有了一个单独的R脚本,可以让我指出新数据.我按下"Go",Sweave会丢弃几个.tex文件,然后我运行一些Python脚本来pdflatex.我的前任每年花在这些报告上约6周; 我花了大约3天(主要是清洁数据;逃脱角色是危险的).
现在有可能有更好的方法,但如果你决定走这条路,让我知道 - 我一直想把我的一些Sweave hacks,这对裤子来说是个好踢所以.
基于您专门询问项目工作流程而不是工具的事实,我将向其他提交者提出与其他提交者不同的方向.假设您对文档制作模型相对满意,听起来您的挑战可能更多地集中在版本跟踪,资产管理和审阅/发布流程等问题上.
如果这听起来是正确的,我建议您查看一个集成的票务/源管理/文档工具,如Redmine.将相关的项目工件(例如待处理任务,讨论线程和版本化数据/代码文件)保存在一起对于远远超出传统"编程"管辖范围的项目来说可能是一个很大的帮助.
同意Sweave是可行的方法,使用xtable生成LaTeX表.虽然我没有花太多时间使用它们,但最近发布的tikzDevice包看起来非常有前景,特别是当与pgfSweave结合使用时(据我所知,目前仅在rforge.net上提供)从那里链接到r-forge,但它现在没有响应我).
在两者之间,您将在文本和图形(字体等)之间获得一致的格式.通过酿造,这些可能构成报告生成的圣杯.