[原]打造数据产品的快速原型:如何使用 flexdashboard 制做dashboard

概述

2016年制做 Dashboard 是一种怎样的体验?咱们想要的:css

响应式+自适应+移动先行+敏捷开发+模块化+微服务+单页面应用html

相信这些必定已经成为了前端开发的标准配置。那咱们须要使用前端

yarn+jquery+react+nodejs+webpack+seajs+echarts node

等等前端工具才能完成咱们的数据可视化吗?react

2016年的Dashboard已经不必定须要如此复杂的前端组件了,因为Dashboard已是一个较为成熟的领域,经常使用的组件已经模块化,而Dashboard最为复杂的部分其实在于 响应式钻取交互分析,而数据处理这件事情其实并非前端工程师最擅长的事情,若是可让最擅长数据处理的人来完成 多图表 响应式 交互式 钻取分析那么这不失为一种好的解决方案。本文将讨论在R语言中使用 flexdashboard的dashboard开发方法,用markdown完成dashboard不是梦。jquery

clipboard.png

制做工艺

让咱们来看看这样一个 MVC 工做流(Model + Visz + Controller):webpack

clipboard.png

1.首先,数据分析师接到产品运营团队的Dashboard需求,数据分析师在服务器上写一些简单的SQL,对数据进行初步分析。git

clipboard.png

2.而后,经过初步分析明确了须要的数据范围,向DBA申请某区间数据,完成数据源 Models 的定义。==》Model
3.接着,写了一连串的SQL语句作数据的进一步分析,这里实际上就是定义了一些 DAG(一般在R中能够组合使用sqldf(小数据集)或者dplyr(大数据集)来流畅完成)==》Controller
4.最后,数据再通过图层叠加、分组、切面、交互式、自适应等等方式渲染作数据可视化。==》Viszgithub

clipboard.png

什么是 flexdashboard

flexdashboard 是一个基于Rmarkdown的仪表盘,易于编排和发布,且兼容移动端显示。一方面,因为flexdashboard能够利用htmlwidgets套件来完成丰富的可视化工做,好比柱状图、折线图、表格等等,因此在图表呈现方面很是惊艳。另外一方面,它还容许运行在shiny服务器上,支持响应式编程特性,经过可交互的界面操做就能够完成直观的数据钻取工做。web

flexdashboard真的使得制做Dashboard的成本和效率获得了提高!

flexdashboard 语法概括

排版语法(HTML)

组件 语法 布局 元素
标题 # ======= Page
方向 ## ------------- Column (或者 Row 若是在yaml中选择 orientation: row)
区块 ### Box

元素配置(CSS)

配置 效果
{.mobile} 只在移动端显示
{.no-mobile} 移动端不显示
{.no-padding} 无边距图标 (默认边距8像素)
{.no-title} 去除组件名称
{.sidebar} 以左侧边栏显示
{.storyboard} 添加故事板(也能够在yaml中配置 storyboard: true)
{.tabset} 以选项卡方式显示子页面
{.tabset-fade} 添加带有渐变效果的选项卡
{data-padding=10} 数据填充边距设置 (默认边距10像素)
{data-height=650} 设置组件的相对高度
{data-width=350} 设置组件的相对宽度
{data-icon="fa-list"} 增长字体或者图标做为菜单栏标志
{data-orientation=rows} 设置页面布局方向
{data-navmenu="Menu A"} 菜单栏设定
{data-commentary-width=400} 故事板组件的相对宽度

Yaml全局配置

例子:

---
title: "FinanceR"
output:
 flexdashboard::flex_dashboard:
 orientation: rows
 vertical_layout: scroll
---
配置项 描述
css css文件路径 添加CSS皮肤
favicon 图标路径 添加favicon图标
logo 图片路径 导航栏左侧图标
navbar 形如 - {title: "A", href: "URL", align: left} 添加菜单栏
orientation 以 rows 或 columns 为布局方向
social ["facebook", "FinanceR", "github","linkedin", "weibo", 或者 "menu"] 链接到社交网站
source_code 是否显示源码
storyboard (true / false) 是否添加故事版
theme 默认皮肤:default 也能够选择:cosmo,bootstrap,cerulean,journal,flatly,readable,spacelab,united,lumen,paper,sandstone,simplex,yeti
vertical_layout 是否使用自适应风格,自动填补或滚动元素大小

故事板:面向VC

利用故事版,能够按部就班地讲解某个业务场景的生命周期。
下面是一个storyboard 在移动端和PC端的显示效果:

### 菜单栏名称 {.storyboard}
\```{r}
library(d3heatmap)
d3heatmap(mtcars, scale="column",
 colors="Blues")
\```

clipboard.png

clipboard.png

点石成金

首先,静态图例能够经过 htmlwiget 的valueBox等函数快速制图

### Downloads per sec (last 5 min)

\```{r}
htmlwiget::valueBox(
 value = rate,
 icon = "fa-area-chart",
 color = if (rate >= 3) "warning" else "primary"
 )
\```

而后,在yaml中声明 runtime: shiny 就能够开启动态图表模式,固然相应的图表应该在后面追加上 renderValueBox() 函数:

htmlwiget::valueBox(
 value = rate,
 icon = "fa-area-chart",
 color = if (rate >= 3) "warning" else "primary"
 )  %>% renderValueBox()

这样ValueBox就变成能够实时现实数据的仪表了(经过R驱动)。

总结

flexdashboard 意在快速制做dashboard,它制做dashboard的速度比shinydashboard还要来得快,然而flexdashboard框架的设计理念是运用在一些足够快速可是富有约束的场景,在产品变得复杂的状况下,整个源码又能够切换到 shinydashboard 之中来知足工程化的需求。能够说flexdashboard是在Rmarkdownshinyhtmlwegit之上结出的果实。

在使用flexdashboard的过程当中,目前,调整一些局部的细节变得相对困难,这里比较怀念zeppelin中能够经过直接选择column的宽度来调整排版(基于boostrap),有些地方图表和显示并不必定能知足最终客户的需求,不过我相信在和用户讨论需求的环节中,flexdashboard确定会成为你趁手的武器。

目前,zeppelin中尚且不能完美支持DT::datatable、plotly::ggplotly等等方式的做图,也不支持shiny,相信在将来的不久zeppelin应该会和flexdashboard相互融合。

小技巧:flexdashboard 容许在多个 block 中并行运行多个 shiny server 实例,这意味着咱们的代码复用更为方便。

参考资料

相关文章
相关标签/搜索