R語言:可視化概覽
編者按:本文作者 Meng Qi,來自 Teradata Data Science 團隊,牛津大學統計系 2013 屆研究生。本期博文,就讓我們瞭解一下 R 語言如何進行數據可視化。當統計學家最愛的 R 遇上 「A graph is worth a thousand words」 的可視化工具,會發生什麼呢?
歡迎掃碼關注數據科學公眾號
目錄
R 的繪圖系統
graphics lattice ggplot2R Graph GalleryR Shiny總結「The simple graph has brought more information to the data analyst』s mind than any other device.」 — John Tukey數據可視化在學術界和工業界都有廣泛的應用——除了許多論文裏的實驗數據圖表外,企業的KPI報表、股市的K線圖、製造業的感測器數據監測、航空公司的上客監控,包括每年大家喜(ji)聞(si)樂(ren)見(le)的春運大數據,都是可視化的應用。數據可視化可以讓我們更直觀地從數據中獲取信息。demo(graphics)
會給出一些常用圖形的樣例(如下圖),及生成這些圖形的代碼。
library(lattice)
xyplot(Temp ~ Ozone |factor(Month),
data = airquality,
main="Temp(F) vs Ozone(ppb) by Month",
layout=c(5,1))
library(ggplot2)
ggplot(data=diamonds, mappings=aes(x=carat, y=price))+
geom_point(aes(color=clarity))
ggplot(data=diamonds, mappings=aes(x=carat, y=price))+
geom_point(aes(color=clarity))+stat_smooth()
ggplot(data=diamonds, mappings=aes(x=carat, y=price))+
geom_point(aes(color=clarity))+
stat_smooth()+facet_wrap(~cut)
- 數據(data)和映射(mapping)
- 幾何對象(geometric)
- 標度(scale)
- 統計變換(statistics)
- 坐標系統(coordinate)
- 分面(facet)
使用ggplot2繪圖的過程就是選擇合適的幾何對象、圖形屬性、標度、統計變換、坐標系統和分面等來充分展現數據中所含有的信息的過程。ggplot2的強大之處就在於它的靈活性,通過不同圖層的疊加可以做出非常有意思的圖形。
R Graph Gallery除了上述提到的三個常用繪圖包,R還有很多其他圖形繪製的工具,如繪製3D圖形的plot3d,rgl,繪製地圖的ggmap,leaflet,互動式可視化plotly等等。在這裡,我們介紹一個神奇的網站 THE R GRAPH GALLERY (https://www.r-graph-gallery.com)。這個網站為我們提供了平時常用的8大類46種共計數146個(日期:2019-05-13)可視化樣例及代碼,及他們使用的工具包。THE R GRAPH GALLERY 網站不僅提供各類統計圖形的R的實現方式,同時也在收錄相對應的Python的實現,是學習可視化非常好的資源。
R Shiny在我們的分析工作中,有時不僅要展示模型結果,還需要把分析歷程展示給聽眾;同時,聽眾也希望能夠參與到分析探索中來。這就需要我們將不同部分的分析 —— 如數據探索,模型構建及評估的過程整合到一起,同時增添可交互性。Shiny (http://shiny.rstudio.com/)是由RStudio開發的一個開源的 R 包,它為使用 R 構建 Web 應用提供了一個有力的 Web 框架。使用Shiny,我們可以用R語言輕鬆開發互動式web應用。在Shiny的官網上給出了一些App的應用案例:我們通過官網上Kmeans example的例子(Demo)來看一看Shiny App的基本功能。這個例子中用的是R自帶的鳶尾花(iris)數據,用過R(或者Python)的朋友應該對這個數據非常熟悉。數據裏包含了花萼長度(Sepal.Length),花萼寬度(Sepal.Width),花瓣長度(Pepal. Length),花瓣寬度(Pepal.Width)及花的品種(Species)信息。
在Demo中假設品種未知,通過其它變數將鳶尾花樣本分羣。默認選項是將樣本按照Sepal.Length和 Sepal.Width分成3羣。- shinyUI部分控制頁面的佈置和展示。一方面,在這裡可以定義一系列的小工具,如滑動條(sliderInput),選項卡(radioButtons),輸入框(numericInput)等來接收用戶傳入的參數,儲存在input變數裏。另一方面,它接收shinyServer傳來的output變數,並根據用戶的定義把它展示在前端。
- shinyServer生成所要展示的結果。它從shinyUI讀取input變數,將其作為參數進行模型計算或圖形繪製,然後將結果儲存在output變數裏,傳給shinyUI前端。
總結來說,shinyUI用於根據用戶的輸入生成input,同時展示output結果,shinyServer接收input參數,計算生成output。有興趣的朋友可以在Shiny的官網找到詳細的培訓教程。
總結在本文,我們介紹了一些R的常用繪圖包以及學習資源:graphics通常用於快速基本的分析繪圖,個性化的圖形建議使用ggplot2來實現。R Graph Gallery從需求出發,歸納總結了各類圖形的使用案例。而Shiny整合前面的所有,生成可互動式的dashboard。這些都是工具,而作為數據科學家,我們要做的就是利用這些工具讓數據「說話」。
Reference- BBC Visual and Data Journalism cookbook for R graphics https://bbc.github.io/rcookbook/
- Paul Murrell(2011)R Graphics Second Edition
- ggplot2 Reference https://ggplot2.tidyverse.org/reference/
- THE R GRAPH GALLERY https://www.r-graph-gallery.com
- Shiny http://shiny.rstudio.com
推薦閱讀: