- 產(chǎn)品
- 產(chǎn)品解決方案
- 行業(yè)解決方案
- 案例
- 數(shù)據(jù)資產(chǎn)入表
- 賦能中心
- 伙伴
- 關于
-
數(shù)據(jù)治理
-
醫(yī)療衛(wèi)生
制造
-
認證中心
-
億信動態(tài)
時間:2019-05-24來源:讀芯術(shù)瀏覽數(shù):894次
在ggplot2、seaborn、shiny、Dash、R或python之上,還有哪些更高級的程序語言?有關數(shù)據(jù)可視化“更上一層樓”的秘訣,本文將一一道來。
眾所周知,對許多企業(yè)來說,數(shù)據(jù)即商機。因為數(shù)據(jù)能為企業(yè)提供更優(yōu)質(zhì)的決策和預測。開拓市場、模型診斷及生產(chǎn)制造,各個階段都需要研究數(shù)據(jù)。而其中涉及的工具更是五花八門,從Excel到通過python matplotlib進行的Tableau。不同的要求會給數(shù)據(jù)研究的自動化帶來不同程度的難處。
顯而易見,在對股東或其他觀眾做匯報時,人人都想用美觀炫酷、交互性強的商業(yè)儀表板來匯報業(yè)績,溝通工作。其標準流程是將解決方案打包成網(wǎng)絡應用程序(讓其在客戶端與服務器中共同運行)。
用數(shù)據(jù)科學領域的經(jīng)典工具包創(chuàng)建網(wǎng)絡應用,總會出現(xiàn)很多讓人沮喪抓狂的問題。不過,有一個極好的解決方案可以提供給你——該方案涉及Lisp算法(該算法的一種特定語言),人工智能淵源最久的計算機語言之一。
本文適用于任何需要在工作中進行數(shù)據(jù)可視化的人,尤其是那些需要在網(wǎng)絡應用里實現(xiàn)其高度個性化與靈活化的業(yè)界人士。話雖如此,任何致力于打造個性化用戶界面的數(shù)據(jù)科學家也能從本文獲益。在閱讀全文前,如果你從未接觸過ggplot2和plotly,建議你先惡補相關知識,因為它們涉及數(shù)據(jù)可視化的一些標準邏輯,能提供一個基準來對二維線畫圖函數(shù)作出預測。
問題
在數(shù)據(jù)科學家們看來,R或python是最杰出的計算機語言,兩者都有一個用來制作互聯(lián)網(wǎng)應用的標準數(shù)據(jù)庫——Shiny庫與Dash庫。這兩個數(shù)據(jù)庫都可用來制作網(wǎng)絡應用,搭建起溝通主語言與javascript——同時也相當于js——的橋梁。它們還可用于瀏覽器(前端)與服務器(后端)之間的信息交流(如數(shù)據(jù)傳輸與用戶交互),在該過程中,應用以主語言運行,直到程序終止為止。
此外,它們還處理js的異步數(shù)據(jù)交互,為緩解應用部署壓力起到積極作用。說句公道話,在上述方面,這兩種語言的作用舉足輕重。但是,前端與后端的歸并也會帶來很多不便,大幅降低這些應用框架的使用價值。
1. 用戶如今已習慣了這樣一個流暢迅捷、功能多樣的動態(tài)行為界面,即使是錯誤信息也會以動態(tài)UI的形式得到呈現(xiàn)。出于對js的規(guī)避,shiny與dash的用戶往往在按照要求實現(xiàn)HTML的個性化輸出上力不從心。例如,根據(jù)瀏覽器的寬度尺寸來創(chuàng)建一個帶色按鈕,如果不用js,操作起來會很困難。就算真有這樣的方法存在,它也需要一個聯(lián)通前端與后端的通信循環(huán),而這瑕疵頗多,并不理想。
2. 用shiny與dash這兩種框架很難編寫出真正意義上的模塊元件。這里的關鍵原因在于HTML節(jié)點所進行的用戶事件會觸發(fā)HTML節(jié)點標識符與后端效應的強耦合。此外,就shiny而言,因為環(huán)境,命名空間與模塊在R里并不常見,所以用其制作一個模塊元件很難。
3. 最后,即最重要的一點,這兩個框架的發(fā)展進程令人懊喪。以這些程序包為基礎的反饋周期漫長得令人發(fā)指:生產(chǎn)環(huán)境中會生成新的特征、成分、視圖與標簽,每當源代碼出現(xiàn)一處變動,后端就會重啟,互聯(lián)網(wǎng)瀏覽器就要刷新,研發(fā)者就要保存當前特定狀態(tài),以確認這次調(diào)整是否達到預期效果。在一定規(guī)模的項目中,數(shù)據(jù)和程序包在一開始便被上傳,每一次迭代發(fā)生變化時,研發(fā)者就要費工夫進行初始化。最糟的是,區(qū)區(qū)一個句法錯誤,就會讓整個應用在重載中崩潰(注意,模擬兩種系統(tǒng)的熱重載會有被黑的風險。后端在處理文本區(qū)域時還會根據(jù)eval command評估文本中的代碼內(nèi)容。換言之,這會帶來信息安全問題)。
解決方案
前后端的再分離,輔之以前端控制,便能解決上述所有問題。
1. 方案會讓你獲得全部收益,并以此控制前端,鑒于所有的計算結(jié)果都呈現(xiàn)在瀏覽器上,所有用戶界面操作都不再需要與后端進行信息交流。
2. 大多數(shù)的前端技術(shù)都能夠處理模塊與命名空間,因此你可以同時處理如種類、日期等多個變量(只要這些變量處于不同的命名空間),一切有條不紊。此外,由于該程序不需要與客戶端進行數(shù)據(jù)通信,程序代碼變得更加模塊化,也因此更加耐用。
3. 模塊熱替換(即熱重載)在其他框架中也能夠?qū)崿F(xiàn)。正是這一特征讓人們對采用這一解決方案躍躍欲試。最后一點是最好的單一功能,這個功能的優(yōu)越性打動了你,你將無法回到?jīng)]有該功能的生活。
簡單粗暴的方法
學習js與ReactJS(與dash聯(lián)系緊密),可不是樁易事,因為如上文所述,Js古怪頗多,很是難學。
“寄生語言”(ParasiteLanguages)
“寄生語言”是一種編程語言,它利用現(xiàn)有的語言及工具,將句法根據(jù)特定的基本技術(shù)進行轉(zhuǎn)化。例如,Scala是Java的寄生語言,TypeScript是js的寄生語言。寄生語言的優(yōu)勢在于它可添加某種范式并規(guī)避目標語言的一些弱點。例如,TypeScript在js基礎上添加了類型屬性。我認為,Clojurescript(cljs),即Clojure的一個以js為原型的版本,是所有數(shù)據(jù)科學家最得力的輔助工具。因為cljs代碼實質(zhì)上就是js代碼,所以你能享受到和js一樣的由高速帶來的恩惠。命名空間是cljs的標配,而且要比Javascript簡單得多。多虧了figwheel及shadow-cljs,熱重載也是行之有效。
但是,如果js也能達到上述效果,為何我會偏愛cljs呢?這是因為這款計算機語言極其簡單,且格外穩(wěn)定,可用于制造出精致且簡明的代碼。它消除了許多js語言的代碼陷阱,并搭建起一個置數(shù)據(jù)于代碼中心而非容器的模型(從此不再有包含1500個類的項目)。此外,cljs還有一個身經(jīng)百戰(zhàn)的標準數(shù)據(jù)庫,可用來處理數(shù)據(jù)。
后端
就后端而言,雖然運算部分與執(zhí)行業(yè)務邏輯的代碼保持原樣,但為了響應前端發(fā)出的HTTP(S)需求,代碼上需要增添一個包裝器。用R語言的plumbr包或python的flask應用框架便可輕松搞定。一些可由客戶執(zhí)行的簡單操作(如按照組別對表格進行篩選與分組),輸入數(shù)據(jù)將以csv或json的形式存儲,只需配上一臺HTTO服務器即可(如根目錄里的python3-mhttp. server命令 )。例子詳見個人網(wǎng)頁。
利弊權(quán)衡
學習cljs后,用戶對任何新方案都會持懷疑態(tài)度。那么,采用cljs又會有哪些不足之處呢?
就特征而言,如今數(shù)據(jù)科學家需要對客戶和服務器間的通信負責,這意味我們需要學習如何設計一些基礎的應用程序編程接口。但是,這也意味著后端會將用戶通過不同URL請求發(fā)出的數(shù)據(jù)一一遣返。
RStudio和Plotly從部署到生產(chǎn)所提供的解決方案有所不同。換言之,盡管網(wǎng)絡應用(前后端分離)結(jié)構(gòu)只有一個標準范式,可供選擇的存儲云供應商與教程卻是不少。
代碼基址如今有兩種程序語言。引進一種新的程序語言與對應的工具總是有風險的。不過,我堅信這種方法帶來的益處遠大于其潛在風險。
錦上添花
學習cljs并使用建議的層次結(jié)構(gòu)會給我們帶來許多額外的好處。
· 鑒于cljs屬于Lisp語言,因此它是一個功能性語言。
· 鑒于js以網(wǎng)絡,電腦與移動客戶端為目標,cljs也能達到同樣的效果。
· clojure上手極其簡單,所以很快便能在java虛擬機上編程。
· Google Closure上如代碼拆分與無用代碼刪除等工具都適用于cljs,這能優(yōu)化應用代碼尺寸,利于用戶體驗的流暢性。
· 盡管plotly是一個很好的默認選項,你還是可以使用任何js可視化框架。有聽說過Vega嗎?有了它,編寫R或python便不再需要包裝器。
· 多虧了cljs與js的互操作性,你可以充分利用任何在包裝器上以js語言寫成的ReactJS組件,來完善自己的程序語言。你甚至可以重新使用dash-html組件。
· 在某種情況下,你會學習emacs,這是目前效率最高的工具。將其與Lisp相結(jié)合,配置程序?qū)⒆兊眯攀帜閬?,游刃有余。(但切勿同時學習emacs和cljs這兩種語言)
結(jié)論
本文中,筆者建議數(shù)據(jù)科學家學習網(wǎng)絡發(fā)展中的關鍵技術(shù)(cljs),以此豐富制作應用的發(fā)展經(jīng)驗。雖然R Shiny與python Dash也能奏效,但他們的前端技術(shù)缺乏關鍵特征,如模塊熱替換(瀏覽器的無刷新更新),這會導致發(fā)展經(jīng)驗的次優(yōu)化。
本文還對cljs優(yōu)于js這一觀點做出論證。但筆者想提出另一個觀點,讓任何人最終都愿意體驗一把cljs:用cljs創(chuàng)建數(shù)據(jù)可視化與網(wǎng)絡應用實在是其樂無窮。cljs處理問題迅捷,專注與靈感常伴人左右,只須靈光一閃,一切難題便迎刃而解。這樣的體驗,值得一試。
在線咨詢
點擊進入在線咨詢