R可視化三駕馬車
大家好,本期RS Lab的主要內容是作者君作為日常需要建模的數據分析師由於流(lan)程(duo)的需要,基於R(R IDE and/or R Markdown)這樣的統計語言模塊製作可視化圖表的簡單介紹。感謝主頁君DY提供這次機會,讓我分享自己一點微不足道的心得給大家。這一期的主要內容有在R中的ggplot2, Highcharter和plotly。下期節目(如果沒有因為毫無人氣而取締)會介紹結合這些基礎功能而實現的R動態儀錶盤,其他傳統BI工具與R的優劣對比等等。
首先,作為鋪墊介紹一下R Markdown(rmd,RMD)。RMD是一種融合了Markdown, LaTeX, html4等多種語言的工作平台,更值得一提的是,在RMD平台上可以執行、運行和展示代碼與代碼結果,支持的語言有R, Python, Scala, Cpp等等。本文檔即主要由RMD生成。話不多說言歸正傳,簡單帶大家看一下R可視化的種種功能:
0.基本設置與R包需求
1.基於ggplot2的可視化
相信關注RS Lab的小夥伴對基本的作圖肯定都不陌生,那麼我們拖動進度條,直接開始展示講解一些比較複雜的ggplot2功能:
1. ggplot2和地圖包(如maps)合用展示地理信息
案例一
某病毒D_G全球發病率
上面這張圖就是巧妙的利用了maps包和ggplot2聯合使用,加上color= 這樣的命令,就可以設置顏色隨主要變數由low=#00FF7F(春綠色,低概率)到high=#DC143C(猩紅色,高概率)之間的漸變,從而生動的展示出了全世界各個地區患某種模擬疾病D_G的國別概率分布。
案例二
美國某針對該D_G藥品G開藥醫生數量按地區分布
同樣,我們還能在更細的地理尺度上做類似的分析,這張圖似乎告訴我們這種葯G在美國東南地區醫師中的知名度遠高於北部尤其是西北部地區。當然了,我們沒有考量人口等其他因素的影響,因此這樣的推斷需要慎之又慎。但是回到圖形,我們可以看到ggplot2+maps在表現力、渲染力和最重要的信息傳達功能上是強大的、實用的——按州劃分的有開藥行為的醫師分布多少一目了然。
2. 利用ggplot2展示並解構複雜多維度圖形
我們來考察一些更複雜的情形,比如如何在二維圖標上展現多維度(multi-level)數據?如何有效的對比其中某個維度下各個其他維度的表現?下面的就是這樣一例利用ggplot2強大的功能實現多維度數據可視化和準確豐富信息傳遞的例子。
案例三
病症D_G在各州發病率的時序分布
上面的一張全體觀測的散點圖用顏色代替了空間來表示地理信息,在二維空間上非常準確而豐富的描摹出了病症G病患在各州的分布,同時還能幫助我們捕捉到一些特殊值(比如加州和佛羅里達州);而下面利用facet_wrap命令得到的各個州自己的時間序列則更是能清楚對比我們感興趣的特定區域的時間序列信息、歸納不同州發病率之間的區別與聯繫。
2.基於Highcharter的可視化
Highcharter包是基於javascript 庫Highcharts相關模塊的整合,後者是一個非常成熟的js繪圖工具,因此在R中也非常簡單而強大。
案例四
預測該葯G在時間維度上的
銷售數據及其置信區間
GIF
案例五
地圖可視化:藥品G在美國各州的最近季度銷售量
GIF
Highcharter和ggplot2相比可能很難去說誰優誰劣;相較而言,ggplot2支持更多的幾何圖形(geom)、美工(aesthetics/aes)和主題(themes), 使用者和開發者也更多;而highcharts已經走向了收費商業化,因此可能普及性有限。然而highcharts簡潔的語法易於學習和調整,基於javascript的圖形也能擁有更多的互動元素和亮眼的展示性效果(例如滑鼠指針靠近時自動高亮以及顯示觀測數值等等)。
3.基於Plotly的可視化
與Highcharts相似,plotly也是一款基於javascript開發的多平台可視化工具,現已完全商業化並支持拖拽式儀錶盤、實時API交互等多項強大功能。作者君這裡使用的是offline且免費的R plotly。Plotly最主要的亮點在於其強大的交互功能和實時動態功能,且支持tidyverse中的所有語法(尤其是dplyr和ggplot2),可以說在R的世界中是可視化的集大成者之一。
案例六
按鈕與圖型基本元素變化
GIF
這幅圖主要展現的是不同人口(散點大小),不同大洲(顏色組別)的國家在時間維度(可拖拽可自動播放的動態交互時間軸)上人均GDP與預期壽命的關係。可以說是把多維度數據簡化到二維來清晰展現並傳遞重要信息的典範。錦上添花的是,觀測者既可以選定某一trace(即這裡的這裡大洲)單獨觀看(其他traces會被隱藏),亦可以選擇某一特定時間截面來觀察圖形信息。
案例七
實時修改參數
最後一個主題展現的是plotly的交互按鈕能實時修改繪圖參數並獲得實時反饋,這也是利用plotly建立實時動態儀錶盤的基礎之一。(致歉:由於javascript實現的功能較為複雜,圖形多為高像素的向量圖,使得gif錄頻工具頻頻卡頻或丟幀,因此對這個交互效果感興趣的同學可以根據文末提供的code自行複製測試。)
本期內容更多的是知識和功能性的介紹,在商業意義和大局上可能相對瑣碎,但是這些鋪墊是必須的。沒有這些基礎功能,便沒有酷炫的實時交互動態儀錶盤的實現。這也是下次的話題所在。最後附上最後一個plotly交互圖形的RCode以饗讀者。感謝大家的關注!
本文諸多元素引自或受啟發於stack overflow, github, plotly & ggplot2等官方網站及論壇,如有需求可提供完整的參考文獻列表。特此註明。
孫克揚
2017年至今擔任美庫爾電通高級統計分析師
2015年-2017年就職於Huntington Bancshares Incorporated擔任風險建模分析師
俄亥俄州立大學雙碩士,北京大學經濟學學士
劍道修習者,歷史學與語言學愛好者
最喜歡的書是F. Scott Fitzgerald的《The Great Gatsby》
RS Lab: A Group of Data Journalists


TAG:RS實驗所 |