[原] 论从数据探索到数据产品的最快路径

news/2024/7/3 8:07:21

概述

clipboard.png

加快推动从数据探索到数据产品的过程是一件很有意义的事情,数据分析要如何做到尽量和数据分析的流程紧密结合,又要方便工程化落地一直困扰着许多数据分析师和Web工程师。数据分析师不想深究太多前端JS实现,Web工程师也不想插手复杂的业务逻辑与SQL,前后分离看起来势在必行。

对于工程化这件事情,如果数据分析输出的图表是基于html的,那Web工程师只需要复制粘贴相应的js配置项然后引用一下js库就完成70%的工作了。但是对于数据探索来说,大部分的数据可视过程70%的工作可能都是失败、或者暂时的,花费大量精力完成的前端代码并不会对数据分析这件事情本身带来太多帮助。

如何权衡前端交互与后端算法一直以来都是困扰数据分析师的一个问题,本文将对这一问题做进一步的讨论。

可能的解决方案

数据分析师 + 无代码交互式绘图

clipng

常见的方式比如,Caravel(Python)都具有这样的功能,数据分析师可以建立一个数据库连接,然后在连接中通过SQL语句得到想要的数据,再通过交互式的绘图方式完成数据可视化的探索。

  • 优势:让数据分析师可以集中精力在数据分析本身,可以快速实现数据探索、建模、甚至分享页面和仪表盘。

  • 劣势:复杂的数据分析算法实现起来比较困难,数据需要事先规整清晰好,满足多维数据分析条件才行。虽然Caravel 目前已经集成了大多数前端绘图库,但是整体定制性还有待加强,且对中国友人支持度不高。

数据分析师 + JS

第一种方案建立在交互式绘图工具足够好用的基础上,对于很多非主流的startup并不一定完全适用,因为startup人手有限,很可能要求数据分析师有能自行解决前端数据可视化的能力需求。

常见的方式是通过SQl取数后调用一个JS制图库(比如echarts、highcharts、plotly等等),分析师需要在js中完成许多数据描述性统计的工作直接展示在前端页面上,然后将配置项和SQL保存在数据库中,以供后续的API查询调用。

  • 优势:简化了数据产品落地的流程,在SQL不够用的情况下可以用JS来补足,可以快速实现定制化的前端图表输出,满足各种可视化特殊需求。

  • 劣势:简单的数据分析算法实现也很困难,数据分析很难专注于数据本身,需要处理很多JS相关问题。

数据分析师 + Zeppelin/Radiant/PowerBI + R

clipboard.png

上述两种方案在数据处理上都并不是非常完美,更加理想的方案是通过用一种数据分析语言完成数据分析和数据可视的工作,既要保证数据分析的灵活性,又要保证工程落地的敏捷性变成一个很关键的事情。但是通常自己写前端JS的代码又非常的麻烦。

一些常见的描述性统计(极值均值求和计数等等)在前端实现都会耗费很多功夫,比如需要使用mapreduce,更不用说更高级的一些算法了,而大部分数据分析工作在Python或者R语言中其实是可以快速完成。那么,从Python和R中直接输出一些html图表不失为一种好的办法,当然更多场景下我是建议用R来完成,再借助Zeppelin/Radiant/PowerBI这样的工具,我们也可以直接将前端页面生成Dashboard或者通过iframe的方式独立输出。

  • 优势:满足不同需求层次的快速数据分析,既能满足复杂的算法模型快速实现,又能满足工程敏捷落地的需求。

  1. 在简单分析模式下,交互式数据分析可以覆盖60%的分析场景

  2. 在复杂分析模式下,使用R语言可以覆盖90%的作图需求

  3. 在极度定制化可视化需求下,可以使用JS前端控件定制满足100%的数据可视化需求

具体方案

Zeppelin、Radiant、PowerBI 都是支持以R 为辅助作图工具的数据分析工具,由于篇幅有限,本文以Zeppelin为例,讲解一个如何使用R语言打通数据分析从探索到产品的全流程。

在NFLab公司的推动下,Zeppelin 从0.6版本就正式开始支持 R 的编译器,并且对此做了诸多优化与拓展。R Tutorial 也是 Zeppelin Notebook 默认的数据分析教程。

工具链条

  1. tidyverse 全家桶 (囊括基本数据处理的一切)

  2. htmlwigets 全家桶 (N个前端可视化库集合)

  3. ggfortify与ggplot其他插件 全家桶 (N个ggplot2可视化插件集合)

  4. plotly 全家桶 (一键无缝迁移ggplot2到plotly)

  5. Zeppelin (快速制作交互式 dashboard)

  6. sqldf、SparkR、data.table、rlist (满足高级数据处理需求)

正常流程

  1. 小数据集的简单分析:

可以通过 Zeppelin 配置 JDBC 或者 Spark.SQL 的方式连接多种数据库来快速实现简单的交互式数据分析了。

clipboard.png

2.小数据集的复杂分析:

clipboard.png

基于ggplot2的统计图表生态实在过于强大,各种插件琳琅满目,总有一款可以满足你奇葩的需求。比如使用ggfortify或者ggally可以一行代码就完成各种复杂的可视化分析,比如PCA分析、聚类分析、协方差矩阵、时间序列预测等等,这样就保证了数据分析结果维度的丰满。

由于ggally是一个ggplot2的一个拓展,同样也支持ggplot2的图层叠加原理。通过+的链式调用,可以在同一基础图形上变换多种展现方式进而得到更多多维分析结果。

如果需要将ggplot2的结果制作成动态图表,还可以直接利用plotly::ggplotly()函数做渲染,然后通过plotly::layout函数来控制新图表的布局细节,满足专业数据分析与可视化的高级需求。

data(tips, package = "reshape")
pm <- ggpairs(tips)
pm %>% plotly::ggplotly() %>%
    plotly::layout(xaxis = list(title="test",showgrid = F))

clipboard.png

3.大数据集的简单分析:

大数据的分析往往并不需要太复杂的分析了,因为大数据集的复杂分析基本上是通过抽样的方式转化成小数据集分析的方式来操作。

对于大数据集的分析,我们可以将数据读入Spark,通过Spark SQL来实现简单分析,如果确实遇到需要全量分析,我们则可以借助于SparkRsparklyr甚至是scala这样的方式来进一步拓展数据分析的能力,相应的作图也可以借助于 ggplot2.SparkR 包来实现。

clipboard.png

如果是直接通过 spark.sql 的方式进行简单的交互式分析,我们也可以使用Zeppelin本身来完成。

参考资料

  • Radiant – Business analytics using R and Shiny

  • 解密Airbnb数据流编程神器:Caravel 颠覆许多大数据分析平台的开源工具

  • 知乎:有哪些值得推荐的数据可视化工具?

  • ggmcmc包

  • ggplot2使用指南

  • ggplot2例子

  • 肖凯:ggplot2使用指南

  • flexdashboard document

  • plotly

  • flexdashboard: Easy interactive dashboards for R

  • STARTING WITH R MARKDOWN FLEXDASHBOARD

  • htmlwidgets for R

  • 机器学习可视化

  • ggforify 数据可视化自动挡

  • ggfortify vignettes

  • ggplot2.sparkR


http://www.niftyadmin.cn/n/599447.html

相关文章

使用代码打包一个maven项目

平常开发使用maven工具将一个maven项目打包成war包或者jar包部署&#xff0c;做项目为了实现代码的自动化部署&#xff0c;需要用代码自动完成这些操作。 下面记录代码实现过程 引入maven打包工具依赖 <!-- maven调用打包工具--><dependency><groupId&g…

Scala用特征来实现混入(mix-in)式的多重继承

2019独角兽企业重金招聘Python工程师标准>>> Scala里相当于Java接口的是特征(Trait)。Trait的英文意思是特质和性状&#xff08;本文称其为特征&#xff09;&#xff0c;实际上他比接口还功能强大。与接口不同的是&#xff0c;它还可以定义属性和方法的实现。Scala中…

spring 配置文件 数据库引入

一.mysql数据库引入 <bean id"dataSource" class"com.mchange.v2.c3p0.ComboPooledDataSource"> <property name"driverClass" value"com.mysql.jdbc.Driver" /> <property name"jdbcUrl" value"jdbc:m…

PHP IDE,Visual Studio还是Eclipse?

<iframe align"top" marginwidth"0" marginheight"0" src"http://www.zealware.com/46860.html" frameborder"0" width"468" scrolling"no" height"60"></iframe>每个程序员都有…

MSN中英双语聊天机器人上线,邀请测试

<iframe align"top" marginwidth"0" marginheight"0" src"http://www.zealware.com/46860.html" frameborder"0" width"468" scrolling"no" height"60"></iframe>我业余做的一个…

httpwebrequest 请求压缩,接受压缩的字符流请求

请看图&#xff0c;客户端和服务端都使用gzip压缩。 客户端参数以json字符串形式gzip压缩&#xff0c;以二进制流发送到服务端&#xff1b;服务端接收到请求&#xff0c;解压缩gzip后&#xff0c;进行业务逻辑处理&#xff1b;处理完后在将返回值以json形式&#xff0c;gzip压缩…

weblab需求

需求文档 weblab需求文档 web端、后端、idea端、部署端 web端主要功能用于信息管理和维护 web端需要分学生和教师端 认证授权 采用springboot和redis,签发token 配置独立的redis服务器用于存放用户session 目前redis服务器地址&#xff1a;123.56.220.39:6379 root 911ABCabc …

小大端

2019独角兽企业重金招聘Python工程师标准>>> intel x86是小端(高位存放在高地址&#xff0c;和我们逻辑是一样的)&#xff0c;网路字节是大端&#xff08;低位放在高地址&#xff09; bool isBigEndian() {unsigned int x 0x01020304; // 低字节0x04return *((unsi…