首页 文章

统计分析和报告编写的工作流程

提问于
浏览
177

有没有人对与自定义报告编写相关的数据分析工作流程有任何了解?用例基本上是这样的:

  • 客户委托使用数据分析的报告,例如水区的人口估计和相关 Map .

  • 分析师下载一些数据,发送数据并保存结果(例如,为每单位人口添加一列,或根据地区边界对数据进行子集化) .

  • 分析师分析(2)中创建的数据,接近她的目标,但看到需要更多数据,所以回到(1) .

  • 冲洗重复,直到表格和图形符合QA / QC并满足客户要求 .

  • 编写包含表格和图形的报告 .

  • 明年,快乐的客户回来了,想要更新 . 这应该像通过新的下载更新上游数据一样简单(例如,从去年获得建筑许可),并按下“RECALCULATE”按钮,除非规格改变 .

目前,我只是开始一个目录,并尽我所能地进行临时 . 我想要一种更系统化的方法,所以我希望有人想出来......我使用了电子表格,SQL,ARCGIS,R和Unix工具 .

谢谢!

PS:

下面是一个基本的Makefile,用于检查各种中间数据集(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 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

14 回答

  • 13

    我会加上我的声音 . 对于复杂的多步分析,您可以使用makefile指定不同的部分 . 如果只有一个部分发生变化,可以防止重复整个分析 .

  • 186

    “make”很棒,因为(1)你可以用它来完成你所有语言的工作(不像Sweave和Brew),(2)它非常强大(足以在你的机器上构建所有软件),以及(3)避免重复工作 . 最后一点对我来说很重要,因为很多工作都很慢;当我输入文件时,我希望在几秒钟内看到结果,而不是重新创建数字所需的时间 .

  • 7

    同意Sweave是要走的路,xtable用于生成LaTeX表 . 虽然我没有花太多时间与他们合作,但最近发布的tikzDevice软件包看起来非常有前景,特别是当与pgfSweave结合时(据我所知,目前仅在rforge.net上提供 - 有一个从那里链接到r-forge,但它现在没有响应我) .

    在两者之间,您将在文本和图形(字体等)之间获得一致的格式 . 通过酿造,这些可能构成报告生成的圣杯 .

  • 7

    我也做Josh Reich所做的事情,只有我这样做才能创建我的个人R-packages,因为它可以帮助我构建我的代码和数据,并且很容易与他人分享 .

    • 创建我的包

    • 加载

    • 清洁

    • 功能

    创建我的包:devtools :: create('package_name')

    加载和清理:我在我的包的data-raw /子文件夹中创建脚本,以使用devtools :: use_data(object_name)加载,清理和将结果数据对象存储在包中 . 然后我编译包 . 从现在开始,调用库(package_name)使这些数据可用(并且在必要时不加载它们) .

    函数:我将我的分析函数放入我的包的R /子文件夹中,只导出那些需要从外部调用的函数(而不是辅助函数,它们可以保持不可见) .

    do:我创建了一个使用存储在我的包中的数据和函数的脚本 . (如果分析只需要进行一次,我可以将此脚本也放入data-raw /子文件夹,运行它,并将结果存储在包中以便于访问 . )

  • 17

    我通常将我的项目分为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以确定执行的分析 .

  • 92

    为了创建自定义报告,我发现合并这里建议的许多现有技巧很有用 .

    Generating reports: 生成报告的好策略涉及Sweave,make和R的组合 .

    Editor: 准备Sweave文件的优秀编辑包括:

    • StatET和Eclipse

    • Emacs和ESS

    • Vim和Vim-R

    • R Studio

    Code organisation: 在代码组织方面,我发现两种策略很有用:

  • 5

    我使用项目模板和R studio,目前我的包含以下文件夹:

    • 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
    
    • 所有功能,只有功能去那里,如果有's too many I' LL它分成几个,都命名为喜欢 00_functions_something.R ,特别是如果我打算做一个包出来的一些人我就会把它们分开

    00_explore.R
    
    • 一堆脚本块,我在测试东西或探索我的数据

    • 它's the only file where i' m允许凌乱 .


    01_initialize.R
    
    • 从我的模板文件夹中调用了一个更通用的 initialize_general.R 脚本,它加载了我一直使用的包和数据,并且不介意在我的工作空间中使用

    • 载荷 00_functions.R (预先填充)

    • 加载其他库

    • 设置全局变量


    02_load data.R
    
    • 加载 csv/txt xlsx RDS ,每种类型的文件都有一个预先填写的注释行

    • 显示在工作区中创建了哪些文件


    03_pull data from DB.R
    
    • 使用 dbplyr 从数据库中获取已过滤和分组的表

    • 一些预填充的注释行来设置连接和获取 .

    • 保持客户端操作最小化

    • 此脚本之外没有服务器端操作

    • 显示已在工作区中创建的文件

    • 保存这些变量,以便更快地重新加载

    一旦完成,我关闭 query_db 布尔值,数据将在下次从 RDS 重新加载 .

    我可能需要向DB重新提供数据,如果是这样,我将创建其他步骤 .


    04_Build.R
    
    • 数据争论,所有的乐趣 dplyr / tidyr 东西都去了

    • 显示已在工作区中创建的文件

    • 保存这些变量

    一旦我关闭 build 布尔值就完成了,下次将从 RDS 重新加载数据 .


    05_Analyse.R
    
    • 总结,模型......

    • 报告 excelcsv 个文件


    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

    基于您专门询问项目工作流程而不是工具的事实,我将向其他提交者提出与其他提交者不同的方向 . 假设您对文档制作模型相对满意,听起来您的挑战可能更多地集中在版本跟踪,资产管理和审阅/发布流程等问题上 .

    如果这听起来是正确的,我建议查看综合的票务/源管理/文档工具,如Redmine . 将相关项目工件(例如待处理任务,讨论线程和版本化数据/代码文件)保存在一起可以提供很大帮助,即使对于传统的项目而言也是如此 . {194382_ bailiwick .

  • 4

    我只是想添加,以防有人错过它,there's a great post on the learnr blog about creating repetitive reportsJeffrey Horner's brew package . 马特和凯文都提到了上面的酿造 . 我自己并没有真正使用过它 .

    这些条目遵循一个很好的工作流程,因此值得一读:

    • 准备数据 .

    • 准备报告模板 .

    • 制作报告 .

    实际上,在前两个步骤完成后生成报告非常简单:

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

    在更多"meta"级别,您可能对CRISP-DM流程模型感兴趣 .

  • 4

    我同意其他响应者:Sweave非常适合用R编写报告 . 使用更新结果重建报告就像重新调用Sweave函数一样简单 . 它完全独立,包括所有分析,数据等 . 您可以对整个文件进行版本控制 .

    我使用Eclipse的StatET插件来开发报告,并集成了Sweave(Eclipse识别乳胶成型等) . 在Windows上,it's easy to use MikTEX .

    我还要补充一下,you can create beautiful reports with 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}
    
  • 0

    我使用Sweave作为报告生成方面,但我也听说过brew包 - 虽然我还没有调查过 .

    基本上,我有一些调查,我可以为其生成汇总统计数据 . 相同的调查,每次都有相同的报告 . 我为报告构建了一个Sweave模板(需要一些工作) . 但是一旦工作完成,我就有了一个单独的R脚本,可以让我指出新数据 . 我按下“Go”,Sweave转出一些得分.tex文件,然后运行一些Python脚本来pdflatex它们全部 . 我的前任每年花在这些报告上约6周;我花了大约3天(主要是清洁数据;逃脱角色是危险的) .

    现在有可能有更好的方法,但如果你决定走这条路,让我知道 - 我一直想把我的一些Sweave hacks,这将是一个很好的踢腿裤所以 .

  • 2

    为了给同事写一份快速的初步报告或电子邮件,我发现将图表复制并粘贴到MS Word或电子邮件或维基页面非常有效 - 通常最好是一个位图截图(例如在mac,Apple上) -Shift-(CTRL)-4) . 我认为这是一种被低估的技术 .

    对于更完整的报告,编写R函数以轻松地重新生成所有图(作为文件)非常重要 . 这需要更多时间来编写代码 .

    在更大的工作流问题上,我喜欢Hadley关于枚举清理和分析流程的代码/数据文件的答案 . 我的所有数据分析项目都有类似的结构 .

  • 2

    如果您想看一些示例,我可以在线获得一些小的(而不是很小的)数据清理和分析项目 . 在大多数情况下,您将找到一个用于下载数据的脚本,一个用于清理数据的脚本,以及一些用于探索和分析的脚本:

    最近我开始编写脚本编号,所以它真的很花哨我有时会这样做,以便探索脚本会调用清理脚本,而脚本又调用下载脚本,每个都做必要的最小工作 - 通常是通过检查输出文件的存在 file.exists . 但是,大多数情况下这似乎有点过头了) .

    我对我的所有项目(源代码管理系统)都使用git,因此很容易与其他人协作,看看有什么变化,并轻松回滚到以前的版本 .

    如果我做一个正式的报告,我通常会将R和乳胶分开,但我总是确保我可以使用我的R代码来生成报告所需的所有代码和输出 . 对于我所做的各种报告,我发现这比使用乳胶更容易和更清洁 .

相关问题