在 SAP 分析云里根据业务数据绘制词云 (Word Cloud)
词云(WordCloud)的概念,据网络上搜索到的资料,最早由美国一位新闻学专业的副教授提出,对文本中出现频率较高的关键词予以视觉上的突出,一般采取“出现频次越高,关键词渲染尺寸越大”的规则。由这些尺寸不一的关键词形成类似云状的彩色图形,能帮助浏览者一眼扫过图形,就能领略该词云背后文本的主旨。
比如周杰伦《双截棍》歌词的词云如下:

其中出现频率排前三位的词高亮如下:

词云除了广泛应用在互联网前端外,在 SAP 领域也能发挥其优势。比如 Jerry 在文章 SAP Analytics Cloud 和 SAP Cloud for Customer 的集成 里提到,最近我们做的一个项目,通过微信小程序收集用户和 SAP Conversation AI 的聊天记录,然后使用词云显示出这些聊天记录里的关键词。
SAP Analytics Cloud 是用于商业智能 (BI) 和企业规划以及预测分析的单一云解决方案。SAP Analytics Cloud 是从 2015 年 2 月发布的 SAP Cloud for Planning 产品演变而来的。除了业务规划之外,其他关键组件是 BI(用于报告、仪表板、数据发现和可视化)、预测分析和治理, 风险和合规性 (GRC)。 2015 年 11 月发布的 BI 功能和预测功能是在以后添加的。SAP Analytics Cloud 原生构建于 SAP HANA 云平台 (HCP) 之上,允许数据分析师和业务决策者在一个安全的基于云的环境中进行可视化、规划和预测。这一点与其他 BI 平台不同,后者通常需要集成来自各种来源的数据,并且用户在执行任务(例如创建报告)时在不同的应用程序之间跳转。助一款产品中的所有数据源和分析功能,SAP Analytics Cloud 用户可以更高效地工作。关键功能可从为便于业务用户使用而设计的同一用户界面访问。
起初 Jerry 在 Github 找了一些生成词云的开源工具,有 JavaScript 也有 Python 实现:
https://www.npmjs.com/package/tag-cloudhttps://github.com/amueller/word_cloud
后来了解到 SAP Analytics Cloud 自身就支持使用 R 的开发包 wordclound 生成词云:
https://www.sapanalytics.cloud/resources-r-packages/

所以我就想尝试着用 SAP Analytics Cloud 来实现。
要使用 SAP Analytics Cloud 上的 wordcloud 的开发包,需要通过配置将其连接到一个可用的 R 运行环境。R 语言是一种编程语言,在统计分析和各种图表展示领域里特别具有优势。这是一种用于统计计算和图形的编程语言,可用于清理、分析和绘制数据。它被不同学科的研究人员广泛用于估计和显示结果,也被统计和研究方法的教师广泛使用。
在 System 配置里,可以选择使用 SAP Analytics Cloud 集成的 R 运行环境或者远程连接到一个部署在第三方的 R 运行环境。

绘制词云的数据源由下面这个 csv 文件提供:某地区每个超市每个月不同产品的销售数量。我设定的词云绘制规则比较简单,销售量越大(字段 QuantitySold)的产品,其产品名称出现在词云中的尺寸越大。

上述 Excel 文件可以从 SAP 官网下载:
https://www.sapanalytics.cloud/wp-content/uploads/2018/02/BestRun.xlsx
我对其作了大幅简化,上传到 SAP Analytics Cloud 之后基于该文件创建一个新的 Model 取名 BestRunJerry, 将 QuantitySold 列设置成 Measure.

将 Product 的 Description 设置为 ProductName,这样稍后用 R 绘制出的词云,显示的是可读性更好的 Product Name,而不是产品 ID.

基于建好的 Model 创建一个新的 Story,插入一个新的 R Visualization,这是一个 UI 控件,负责显示渲染的词云:

将 Product 设置为 Rows 的一个成员:

而 QuantitySold 设置成 Columns 的一员,这样接下来的 R 编辑器里,可以通过访问 Product 和 QuantitySold 两个变量,获取模型里存储的对应数据。

现在开始添加 R 脚本:

四行脚本搞定:

点击 Execute,看到执行效果:

最后生成的效果图:

4 行 R 脚本的含义:
(1) library(wordcloud):加载 SAP Analytics Cloud 的 R 开发包 wordcloud;(2) words <- BestRunJerryQuantitySold:用产品 QuantitySold 字段的值模拟关键词出现的频率,存储到变量 frequency 里;(4) wordcloud(words, frequency, scale = c(3, 1), rot.per=0.2, colors=brewer.pal(8, "Dark2"))调用 wordcloud 开发包,生成词云。输入参数的含义参考该开发包的文档:https://cran.r-project.org/web/packages/wordcloud/wordcloud.pdf

每当我们在 SAP Analytics Cloud 的 R 编辑器里点击 Execute 按钮时,可以在 Chrome 开发者工具里观测到编辑器发送了一个 HTTP 请求给 R 运行环境,该请求包含了当前我们编辑的 R 脚本和之前插入的 R Visualization 控件的长和宽。

根据这些输入,SAP Analytics Cloud 的 R 运行环境进行服务器端的词云渲染,再将渲染好的词云内容以 png 图片文件的 base64 格式返回给浏览器:


下一步笔者会研究如何将文本格式的聊天记录里的关键词提取出来,以词云的方式显示在 SAP Analytics Cloud 里,这也是我目前做的项目需要实现的需求,敬请期待。

版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/0ecb00bb976d507544fcf5f36】。文章转载请联系作者。
评论