查看原文
其他

Shiny 开发学习路径

Editor's Note

学习~

The following article is from 优雅R Author 王诗翔

生信领域越来越多的数据库/网页工具采用 Shiny[1] 框架进行搭建,Shiny 的流行度/拓展性在随着时间增加。因此,掌握 Shiny 服务于自己的项目/课题成为生信人的一个新的技能。在这篇文章中,作为一个有经验的 Shiny 学习者和 Shiny 工具的开发者,我将介绍学习和掌握 Shiny 进行开发的核心路径和相关推荐的(免费)资料。对于每一个关卡(技能点), 我会给出大致的(全职学习)时间估计(以周为单位)。

网络上的资料对于个人来说是无穷尽的,我会尽量选择我认可的最核心读物,方便大家进行相关的学习。当然, 个人的能力有限,欢迎讨论和补充。

注意,Shiny 现在已经支持了 Python 的实现,但本文只介绍以 R 为基础的学习路径。

关卡1:R 基础(2-3 周)

学习 *R for Data Science*[2]

要求掌握 1-21 章的全部内容,后续章节初学者以了解为主,根据兴趣和时间进行实践。

核心要点:

  • tidyverse 的数据处理理念
  • readr 读取操作
  • dplyr 数据处理理念和核心操作
  • ggplot2 可视化理念和核心操作

读者目标自查:可以独自完成从磁盘读取文件、过滤/转换数据、分组处理/聚合数据、生成可视化图表。

关卡2: 网页基础 HTML5/CSS (0.5-1 周)

阅读一遍 HTML 教程[3]CSS 教程[4]

HTML 教程是重点,建议花多一些时间阅读;CSS 起到辅助和美化的作用,对于初学者,了解其基本语法、如何设定即可。

核心要点:

  • 网页结构
  • 网页标签语法以及条目
  • CSS 的设定

读者目标自查:可以徒手写一个简单的网页,并通过 CSS 引入一些格式化。

关卡3:Shiny 学习(2-3 周)

学习 *Mastering Shiny*[5]

要求认真阅读全部内容,并根据读物的代码进行实践,边学边练。

核心要点:

  • Shiny app 结构
  • Shiny 网页布局
  • Shiny reactivity
  • Shiny module

读者目标自查:可以在关卡1的基础上,将可视化展示通过 Shiny app 实现,并提供多个选项用于控制图形的输出展示。

关卡4: 学习如何组织 Shiny app 代码(1 周以上)

好的代码结构,会极大地方便运维和拓展你写的 Shiny app。下面有几种推荐的代码组织形式,读者可以根据自己的需求参考设定,也可以根据罗列的资料逐步学习。

  • Shiny 默认的代码部署方式
    • 使用一个 app.R 文件存储全部的前后端代码,适合非常小的应用。
    • 使用单独的 ui.Rserver.R 文件放前后端代码,适合稍微复杂一点的小应用。
    • 在以上两种设定的基础上,将复杂的操作逻辑统统整理为函数,放到单独的 R/ 目录下或者一个 functions.R 文件中方便调用和维护。如果更复杂一点,可以整理为一个 R 包,需要通过 *R Packages*[6] 学习如何开发 R 包。
  • 使用 golem[7] 框架,学习 *Engineering Production-Grade Shiny Apps*[8]
  • 使用 rhino[9] 框架,通过 官方各种文档[10] 学习。

读者目标自查:理解和熟练掌握 Shiny 默认的代码部署方式。

关卡5: 学习如何部署 Shiny app(1-2 周)

当你开发的 app 可用时,接下来就是进行部署,方便自己测试或者他人使用。有以下几种部署的方式:

  1. 通过 Posit 公司提供的 shinyapps 服务[11]。推荐初学者尝试和摸索。

  2. 自己在本地的/云服务商的 Linux 服务器上进行部署,需要了解 Linux 系统并掌握 Linux 的基本操作(阅读 The Unix Workbench[12])。具体的部署可以参考以下几篇文章:

    1. 在Ubuntu服务器上配置Shiny应用
    2. How to Deploy Interactive R Apps with Shiny Server[13]
    3. How To Set Up Shiny Server on Ubuntu 20.04[14]

读者目标自查:掌握第 1 种应用部署方式;探索第 2 种部署方式并能解决遇到的问题。

关卡6: 学习和重现完整的 Shiny app(2周以上)

这是最后一道关口,闯关意味着你具备了独立完成 app 开发的能力。大家(特别是初学者)需要谨记,一个好的 app 在于它的代码结构清晰、能够完成任务,不在于漂亮的 UI。所有的功能实现应当把完成分析/可视化目标为第一位,然后再花时间探索具体的 UI 美化。

由于各类读者背景和需求不一致,我这里只做一些通用的学习资料推荐,针对读者所在领域的 app 开发,需要读者自行了解和掌握相关知识背景、分析技能,在此基础上寻找一些已经通过 Shiny 实现的数据库/工具的源代码仓库进行学习。

  • Shiny examples: https://github.com/rstudio/shiny-examples
  • Shiny gallery:https://shiny.posit.co/r/gallery/。官方提供了很多功能特性的 app 实现。
  • Shiny Data Portal: https://github.com/SebKrantz/shiny-data-portal。A free Shiny Application to host, filter, aggregate and and download data in various formats.
  • machLearn, Machine learning dashboard created with R/shiny: https://github.com/davesteps/machLearn
  • Shiny app for customizing Raincloud plots: https://github.com/gabrifc/raincloud-shiny

推荐资料

在本文中,我尽量避免推荐比较多的资料,因为对于初学者过多的资料带来的是混淆与压力。我希望你能够通过上述的关卡真正有效地学习和掌握 Shiny 开发的知识要点,并应用于你感兴趣的项目中去。作为本文的最后一部分,我将提供一些非常重要的资源地址,希望在你困惑或者想要学习更多内容时找到灵感!

  • https://github.com/veeps/shiny_workshop
  • https://github.com/grabear/awesome-rshiny
  • https://github.com/nanxstats/awesome-shiny-extensions
  • https://github.com/davidruvolo51/shinyAppTutorials
  • https://github.com/daattali/advanced-shiny

Enjoy playing with Shiny!

如果需要讨论交流,请点击原文到博客。

参考资料

[1]

Shiny: https://shiny.posit.co/

[2]

R for Data Science: https://r4ds.had.co.nz/

[3]

HTML 教程: https://www.runoob.com/html/html-tutorial.html

[4]

CSS 教程: https://www.runoob.com/css/css-tutorial.html

[5]

Mastering Shiny: https://mastering-shiny.org/

[6]

R Packages: https://r-pkgs.org/

[7]

golem: https://github.com/ThinkR-open/golem

[8]

Engineering Production-Grade Shiny Apps: https://engineering-shiny.org/

[9]

rhino: https://github.com/Appsilon/rhino

[10]

官方各种文档: https://appsilon.github.io/rhino/

[11]

shinyapps 服务: https://www.shinyapps.io/

[12]

The Unix Workbench: https://seankross.com/the-unix-workbench/

[13]

How to Deploy Interactive R Apps with Shiny Server: https://www.linode.com/docs/guides/how-to-deploy-rshiny-server-on-ubuntu-and-debian

[14]

How To Set Up Shiny Server on Ubuntu 20.04: https://www.digitalocean.com/community/tutorials/how-to-set-up-shiny-server-on-ubuntu-20-04


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存