简介
最近收到读者的技术求助邮件,如下所示:
对于该问题,在我的 R Markdown 入门教程中没有给出教程(视频见文末),因为算是较为进阶的技术了。我相信看我推文的老读者们应该对 R Markdown 的基础操作有一定了解。并且想将其应用到自动化办公场景中,从而增加办公效率。
所以针对这个问题,小编今天给出一个基础版本的“利用 R Markdown 批量制作数据分析报告”教程,供大家参考。该教程主要参考了:
- R Markdown 指南 第 7 章:使用 R Markdown 开展项目工作[1] ps:这是一本正在写的 R Markdown 中文书籍,未来准备出版,小编有幸参加了部分内容的撰写。有兴趣的读者可以提前阅读。
- Iterate multiple RMarkdown reports[2]
注意:制作这个教程花费较长时间,欢迎大家一键三连呀~ 教程对应的项目代码已经开源在 GitHub[3] 中,欢迎 Fork 和 star。或者公众号后台回复[
批量制作数据分析报告
]免费获得。
问题背景
假设我们得知不同学校学生信息,包括:姓名,身高,体重。如:
领导/硕导/博导 要求分别给出不同学校的学生信息分析报告。此时,可以使用 R Markdown 开展这项工作。
教程
创建文件等基础内容,小编在此省略。实在不会的读者,直接下载我的 Demo 文件夹,修改即可。
创建 .Rmd 文件
首先,给出一个中文.Rmd
,该文件可以对不同学校的学生信息进行数据分析,并给出对应的图表和分析结果。为了使得该文件能够自动化导入不同数据集,需要在 YAML 中的 params 参数中加入自定义参数,例如:new_title: A中学
。这样通过外部变化改参数,即可修改导入不同学校数据了(注意 YAML 中的字符缩进)。YAML 文件如下所示:
分析报告内容不做过多介绍,包含对该数据的预处理和探索性分析,由于小编科研时间紧张,没有做过多分析,大家可以自行发挥。仅需要注意:
注意:使用
`r params$new_title`
加载参数,例如:首先,我们加载`r params$new_title`
学生的信息。此时编译得到的结果为:
最后生成的 PDF 如下所示:
1
2
3
此时,单个数据分析报告制作完毕,并设置了参数导入不同学校名称。
创建 .R 文件
之后创建一个 .R 文件,目的是重复输入不同学校并编译构建新的数据分析报告。代码截图如下所示:
test.R 文件
library(rmarkdown) school = c("A中学","B中学") for(v in school){ render("中文.Rmd", output_file=paste0("result/exploratory_", v, ".pdf"), params=list(new_title=v)) }
该代码通过 render()
函数编译刚才写的 中文.Rmd
文件,刚设置的参数 new_title
迭代命名为不同的学校 v
,并将编译结果放到对应文件夹内的子文件夹 result
中(注意提前创建该子文件夹)。运行这些代码即可得到批量的数据分析报告:
对比结果
由于页面有限,仅对比展示不同数据得到的图表:
A学校
B学校
A学校
B学校
未来展望
- 对于不同的数据,虽然可以自动化绘制不同的报表,但是由于数据不同,结果也会不同。不同结果如何达到自动化分析呢?这个问题还需要再商讨。个人觉得如果能把类似 ChatGPT 结合起来,或许真能实现自动给出完整的分析报告了。类似的 ChatGPT 的 R 包有:chatgpt[4],gptstudio[5]。教程有:1[6],2[7],供参考。
- 制作该可重复性报告的前提是:不同数据需要一致的数据结构。这点是否可以进行拓展?是否有专门的包能够自动对数据处理,并给出统一的数据格式?
- 制作这个教程花费较长时间,欢迎大家一键三连呀~ 教程对应的项目代码已经开源在 GitHub[8] 中,欢迎 Fork 和 star。或者公众号后台回复[
批量制作数据分析报告
]免费获得。
参考资料
[1]
R Markdown 指南 第 7 章:使用 R Markdown 开展项目工作: https://cosname.github.io/rmarkdown-guide/rmarkdown-project.html#render-rmd
[2]
Iterate multiple RMarkdown reports: https://community.rstudio.com/t/iterate-multiple-rmarkdown-reports/43208/7
[3]
GitHub: https://github.com/liangliangzhuang/R_example
[4]
chatgpt: https://github.com/jcrodriguez1989/chatgpt
[5]
gptstudio: https://github.com/MichelNivard/gptstudio
[6]
1: https://rpubs.com/nirmal/setting_chat_gpt_R
[7]
2: https://www.karada-good.net/en/ranalytics/r-e767/
[8]