詞雲(WordCloud)的概念,據網絡上搜索到的資料,最先由美國一位新聞學專業的副教授提出,對文本中出現頻率較高的關鍵詞予以視覺上的突出,通常採起「出現頻次越高,關鍵詞渲染尺寸越大」的規則。由這些尺寸不一的關鍵詞造成相似雲狀的彩色圖形,能幫助瀏覽者一眼掃過圖形,就能領略該詞雲背後文本的主旨。前端
好比周杰倫《雙截棍》歌詞的詞雲以下:git
其中出現頻率排前三位的詞高亮以下:github
詞雲除了普遍應用在互聯網前端外,在SAP領域也能發揮其優點。好比Jerry在文章 SAP Analytics Cloud和SAP Cloud for Customer的集成 裏提到,最近咱們作的一個項目,經過微信小程序收集用戶和SAP Conversation AI的聊天記錄,而後使用詞雲顯示出這些聊天記錄裏的關鍵詞。web
起初Jerry在Github找了一些生成詞雲的開源工具,有JavaScript也有Python實現:npm
https://www.npmjs.com/package...
https://github.com/amueller/w...編程
後來瞭解到SAP Analytics Cloud自身就支持使用R的開發包wordclound生成詞雲:小程序
https://www.sapanalytics.clou...微信小程序
因此我就想嘗試着用SAP Analytics Cloud來實現。瀏覽器
要使用SAP Analytics Cloud上的wordcloud的開發包,須要經過配置將其鏈接到一個可用的R運行環境。R語言是一種編程語言,在統計分析和各類圖表展現領域裏特別具備優點。服務器
在System配置裏,能夠選擇使用SAP Analytics Cloud集成的R運行環境或者遠程鏈接到一個部署在第三方的R運行環境。
繪製詞雲的數據源由下面這個csv文件提供:某地區每一個超市每月不一樣產品的銷售數量。我設定的詞雲繪製規則比較簡單,銷售量越大(字段QuantitySold)的產品,其產品名稱出如今詞雲中的尺寸越大。
上述Excel文件能夠從SAP官網下載:
https://www.sapanalytics.clou...
我對其做了大幅簡化,上傳到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 <- BestRunJerry$Product:讀取模型BestRunJerry的Product數據,存儲到變量words裏;
(3) frequency <- BestRunJerry$QuantitySold:用產品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/we...
每當咱們在SAP Analytics Cloud的R編輯器裏點擊Execute按鈕時,能夠在Chrome開發者工具裏觀測到編輯器發送了一個HTTP請求給R運行環境,該請求包含了當前咱們編輯的R腳本和以前插入的R Visualization控件的長和寬。
根據這些輸入,SAP Analytics Cloud的R運行環境進行服務器端的詞雲渲染,再將渲染好的詞雲內容以png圖片文件的base64格式返回給瀏覽器:
下一步Jerry會研究如何將文本格式的聊天記錄裏的關鍵詞提取出來,以詞雲的方式顯示在SAP Analytics Cloud裏,這也是我目前作的項目須要實現的需求,敬請期待。
要獲取更多Jerry的原創文章,請關注公衆號"汪子熙":