詞雲(WordCloud)的概念,據網絡上搜尋到的資料,最早由美國一位新聞學專業的副教授提出,對文本中出現頻率較高的關鍵詞予以視覺上的突出,一般采取“出現頻次越高,關鍵詞渲染尺寸越大”的規則。由這些尺寸不一的關鍵詞形成類似雲狀的彩色圖形,能幫助浏覽者一眼掃過圖形,就能領略該詞雲背後文本的主旨。
比如周傑倫《雙截棍》歌詞的詞雲如下:
其中出現頻率排前三位的詞高亮如下:
詞雲除了廣泛應用在網際網路前端外,在SAP領域也能發揮其優勢。比如Jerry在文章 SAP Analytics Cloud和SAP Cloud for Customer的內建 裡提到,最近我們做的一個項目,通過微信小程式收集使用者和SAP Conversation AI的聊天記錄,然後使用詞雲顯示出這些聊天記錄裡的關鍵詞。
起初Jerry在Github找了一些生成詞雲的開源工具,有JavaScript也有Python實作:
https://www.npmjs.com/package/tag-cloud https://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 <- 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/web/packages/wordcloud/wordcloud.pdf每當我們在SAP Analytics Cloud的R編輯器裡點選Execute按鈕時,可以在Chrome開發者工具裡觀測到編輯器發送了一個HTTP請求給R運作環境,該請求包含了目前我們編輯的R腳本和之前插入的R Visualization控件的長和寬。
根據這些輸入,SAP Analytics Cloud的R運作環境進行伺服器端的詞雲渲染,再将渲染好的詞雲内容以png圖檔檔案的base64格式傳回給浏覽器:
下一步Jerry會研究如何将文本格式的聊天記錄裡的關鍵詞提取出來,以詞雲的方式顯示在SAP Analytics Cloud裡,這也是我目前做的項目需要實作的需求,敬請期待。
本文來自雲栖社群合作夥伴“汪子熙”,了解相關資訊可以關注微信公衆号"汪子熙"。