Lecture 4 視覺化與探索性資料分析

講到R的特色,不能不談到視覺化(Visualization)這一部份。然而視覺化相當專業,不是一個講酷比炫的電腦畫圖行為,而是透過視覺化解釋資料,一般也歸之於探索性資料分析(Exploratory Data Analysis)。視覺化就資料階段而言,可以分成兩種層次:第1個層次,是對原始資料的關係作分析;第2個層次,是在資料探勘的模型,對結果製作視覺化。

在R的套件之中,專業的繪圖套件,只要提起 ggplot2 幾乎是無人不知。ggplot2 的重點在於有許多主流媒體的主題版型和號稱優雅的配色技術。這些套件如果要用程式語法才能畫圖的話,很多人都望之卻步。很幸運的,rattle的視覺化,除了內建ggplot2和CairoDevice之外,還有一個很專業的獨立套件GGobi。因此本處4.2 ,專門介紹GGobi。這2個套件,對於資料探勘的視覺化資料解說,相當有用。本章一一介紹。

資料部份,我們基本上使用rattle內建的weather.csv氣象數據和audit.csv的報稅資料。氣象資料是一年的22個變數的氣象數據,紀錄明天是否下雨RainTomorrow (No/Yes) 與其它21個今天變數的關係,後面Lecture的變數說明有詳細介紹。載入後,依照內建的變數分類,不做更動。

4.1 基本探索分析圖

探索性資料分析(EDA)是資料探勘很重要的一環,依賴視覺化技術對資料結構和關係的處理。因為視覺化必須仰賴色彩,故本章以彩圖,逐節說明rattle視覺化執行EDA的重要功能。
四個變數的分佈圖

圖 4.1: 四個變數的分佈圖

4.1 是 Explore選單的Distribution選項, 以4個步驟完成繪製:
步驟1。選擇RainToday當作分組變數(Group By)。
步驟2。選四個變數配圖。MinTemp 繪製Box Plot(盒鬚圖),WindGustSpeed繪製Histogram(直方圖), Sunshine繪製Cumulative(累積機率密度), WindGustDir繪製Mosaic(馬賽克圖)。
步驟3。在Setting處,把Verbose和Advanced Graphics取消,改選Use CairoDevice。
步驟4。執行Execute。

Boxplot的呈現,ggplot2

圖 4.2: Boxplot的呈現,ggplot2


4.1 的產製,是用CairoDevice繪製的,讀者可以試著用內定選項Advanced Graphics重畫一次。差異在於如果我們畫的四種圖有邊界問題,CairoDevice能夠將之調整放在為一頁,Advanced Graphics則會變成兩頁。因此,什麼時候要用哪一種設備,要試過才會知道。而ggplot2產製的盒鬚圖,見圖4.2

在Distribution選項,右邊有一個Benford’s law的選項,Benford’s law是用在判讀資料的奇異性,用在報稅資料可以找出可能有問題的報稅資料。在會計資訊的大數據分析中,是常用的工具。為了顯現這個工具的特色,我們用報稅資料audit.csv來畫圖4.3。步驟如下:

 步驟1。轉換變數為類別。因為Group by 變數要選 TARGET_Adjusted。 但是這個變數是數值, 所以,我們依照第5章Transform的介紹,將之轉換為As Category, 產生新變數TFE_TARGET_Adjusted。 產生後,回到Data頁面,Execute 一下。

 步驟2。進入Explore → Distribution。在Benford下方,勾選Income與之交會。然後在上面的Group By選TFE_TARGET_Adjusted。

 步驟3。Execute 後,產生圖4.3

Benford' Law繪圖

圖 4.3: Benford’ Law繪圖


接下來就是分析相關係數(Correlation),步驟:

Explore → Correlation,再選Ordered


我們用氣象資料,執行後,圖4.4是Advanced Graphics,圖4.5是CairoDevice。就視覺化的呈現,圖4.5的CairoDevice畫圖效果比較細緻。圖4.5的解讀,可以由主對角線類推:主對角線是自我相關係數,所以是+1,圖形越細面積越小(相關係數檢定之P-value),相關係數越顯著;負相關同理類推。

使用Advanced Graphics

圖 4.4: 使用Advanced Graphics


使用CairoDevice

圖 4.5: 使用CairoDevice


4.6是針對有缺值的變數,計算彼此間的相關係數。如果彼此缺值重和,就沒有相關係數。步驟:Explore → Correlation,再選Explore Missing。

缺值的相關性(Explore Missing),Advanced Graphics

圖 4.6: 缺值的相關性(Explore Missing),Advanced Graphics


4.7則是將兩兩相關的階層關係畫出來,步驟:Explore → Correlation,進入後選Hierarchical Method。這樣的階層圖,對資料探勘很有用。變數配對列在右邊,X軸則是0~3的距離數字,代表了兩個變數的關聯強度,越短,距離越近相關性也越強。我們將階層結構,以兩個方框框起來,我們有幾個觀察:

  (1) 以兩兩為例,小框的兩個變數{Temp3pm, MaxTemp} 距離最短,相關性最強。以Pearson係數看,他們的相關係數是0.99。最下方的三個與風速Wind有關的變數,彼此關聯性成為最強的一組。上方的兩個,{Cloud3pm, Cloud9pm },相關性介於中間,Pearson相關係數是0.5。

  (2) 大框框內的5個變數{Temp9pm, MinTemp, Evaporation, Temp3pm, MaxTemp}看成一群,這群的關聯,高於他們和其他變數。

以階層法(Hierarchical Method)顯示相關, Advanced Graphics

圖 4.7: 以階層法(Hierarchical Method)顯示相關, Advanced Graphics

4.8的散佈矩陣圖,則是依步驟:Explore → Distributions 後,什麼項目都不選,直接按Execute就會產生兩兩「散佈圖」和「相關係數檢定」的兩個半三角矩陣的合併結果;此處的散佈矩陣圖是只限數值變數。下三角是兩兩散佈配上linear fit和信任區間;上三角則是Pearson相關係數檢定的P-value,同時,數值越大,數字顯示就越大。

散佈矩陣

圖 4.8: 散佈矩陣

4.2 GGobi互動式繪圖

GGobi基本上是一個獨立的開放繪圖軟體,爾後寫成R的套件可在R內部載入。但是,單獨使用也可以。參考圖 4.9,由rattle主介面進入GGobi的互動視覺化區域步驟如下:

 A. 進入主選單的Explore
 B. 點選最右邊的 Interactive
 C. 自動內選GGobi

如圖 4.9,Execute就啟動GGobi兩個小視窗,左邊的Control Panel是控制面板,控制面板主選單,可以啟動許多視覺化功能;右邊是圖形顯示區,是顯示圖形的獨立視窗。說明如下:

  A. 啟動軟體後,會自動的取最上面兩筆數據,繪製散佈圖(Scatterplot)。如左圖顯示,X軸是最低溫度(MinTemp),Y軸是最高溫度(MaxTemp)。
  B. 右圖繪製兩兩散佈圖。內建顯示是兩軸沒有刻度,要顯示軸刻度,可以Options → Show Axes

啟動GGobi 的Control Panel

圖 4.9: 啟動GGobi 的Control Panel


如果讀者對視覺化的要求不高,可以在rattle內看一看資料效果。但是,如果需要進階處理,例如,輸出高品質圖檔;那就須要使用獨立的GGobi軟體了。雖然顯示介面完全一樣,但是rattle內使用GGobi的效果,沒有完整獨立的軟體要好。因此,建議讀者連上網址http://www.ggobi.org/ ,下載適合作業系統的版本的執行檔 .exe。之後會在桌面產生一個圖示,啟動就可以。 啟動後,從選單File處,載入資料weather.csv。GGobi可以載入兩類數據格式檔案: .csv 和 .xml。接著我們下面的解說,就是使用獨立軟體,而不再從rattle內部使用。 圖 4.9的散佈圖內,要標出明天是否下雨時,要如何標?GGobi提供的「刷一刷(Brushing) 」上色工具,就是為了解決這樣的視覺化需求。

4.2.1 刷一刷(Automatic Brushing)上色


如圖 4.10,Tools → Automatic Brushing 就會跳出右上方刷色的對話視窗。 這個視窗分成上下兩塊:
上面是選擇要刷一刷上色的變數:我們選RainTomorrow
下半部是色彩配置:因為RainTomorrow是二元變數(No/Yes),依字母順序,從左至右:No是黃色,Yes是紫色。因為是二元變數,所以上邊的1.11-1.89就沒有用,只有下邊的215和41兩個數字。215和41這兩個數字是R色版的顏色編號。1.11-1.89是連續變數的分距,也就是說,如果要刷一刷上色的變數是連續變數,GGobi會將之分成幾個群距,待會我們會展示作法。

刷RainTomorrow

圖 4.10: 刷RainTomorrow


從圖 4.10看起來,整體的正相關,間錯著明天不下雨(No)的紫色。因為是隨機散佈,所以,沒有顯示出具體的類型(Pattern)或集中度;因此,看起來是無關的。

接下來,我們刷Rainfall (降雨量)這筆變數。如圖 4.11,降雨量高是黃色,低是紫色。顯示的圖形中,低降雨量,似乎是主要的特徵。

以Rainfall刷色

圖 4.11: 以Rainfall刷色


4.11和圖 4.10的黑底圖差異甚大。 因為GGobi不能直接存取圖形,必須透過兩行語法,才能在R內產生高品質和解析度的圖形。在GGobi產生圖形後,輸出的步驟如下:

 步驟1。在GGobi控制面板視窗:Tools -> Save Display Description.   會出現對話視窗,詢問檔名和儲存位置。檔名可自行輸入,此處以myFig.R為名。要注意的是儲存位置,儲存位置的資料夾,必須有載入的資料。

 步驟2。如附之程式檔 FigureMake_GGob.R,載入套件DescribeDisplay,執行語法就可以產生繪圖物件tmp,
library(DescribeDisplay)
tmp<-dd_load(“myFig.R”)
plot(tmp)
print(ggplot2::ggplot(tmp))

繪製法有二,如最後兩行。plot()是呼叫R內的高階繪圖,ggplot()是呼叫套件ggplot2來畫。兩個不是任一即可,他們各有千秋,誰畫的好,要看資料形式,畫出來才知道。接下來的圖,都是這樣產生。
ggplot2::ggplot()的語法是說,我們不載入套件ggplot2,但是使用他的繪圖函數。所以,用::宣告這個功能。使用量少的套件,不需要library()載入,可以節省電腦資源。雖然載入了套件DescribeDisplay,讀者也可以最前面兩行改成
DescribeDisplay::dd_load()


另外,GGobi選單上的Display內有一些圖形,在分析資料上效果相當好。

4.2.2 新型散佈矩陣圖(New Scatterplot Matrix)

由控制台選單,Display → New Scatterplot Matrix 啟動散佈矩陣圖的控制面板。左邊會切換到只有選X沒有Y的選擇清單。GGobi內建取前4個,我們稍微修改。右邊則和前面的介紹一樣,刷Rainfall變數。這樣的目的是讓被刷的變數是連續變數,方便切區塊。

按Apply後,出現如圖 4.12的散佈矩陣。這種散佈矩陣,和R的散佈矩陣一樣,主對角線都是變數自己的密度分佈圖。其餘兩兩就是散佈。顏色上,就是依照刷色條件產生,相當清楚。

刷色的散佈矩陣圖

圖 4.12: 刷色的散佈矩陣圖


4.2.3 New Parallel Coordinates

再來是處理多變量資料視覺化常用的圖形Parallel Coordinates。由以下路徑啟動圖 4.13

Display → New Parallel Coordinates Display


Parallel Coordinates是一種多變量視覺化的技術,用於辨認分類集中度,我們可以看看X軸的變數,是否具有區分類型的能力,這在資料探勘的領域,使用很多。以圖 4.13為例,這張圖以RainTomorrow刷色:
  No 是紫色,
  Yes是黃色。

選擇變數的先後,圖形X軸的排序,就是由左至右(Sunshine, Evaporation, MinTemp, MaxTemp, Rainfall)。

以RainTomorrow刷色

圖 4.13: 以RainTomorrow刷色


我們可以看出最左邊Sunshine區塊中,高日照的紫色有群聚,也就是說,日照程度越高,明天降雨機率越低。最右邊的平均降雨量越低,明天降雨機率也越低。

4.13畫出來的是以X軸以外的變數RainTomorrow 來刷色。圖 4.14 則以X軸內的某一變數為刷色變數,我們取的是最左邊的日照,所以,在自己的區塊,色塊區分就很清楚。

依照Sunshine刷色

圖 4.14: 依照Sunshine刷色


〔練習〕請載入oil.csv的資料,對region刷色,繪出圖 4.15, 解釋哪些變數區分油的區域性?Region有三區:南方是紫色,黃色是北方最後刷,綠色是Sardinia區。


刷RainTomorrow

圖 4.15: 刷RainTomorrow


4.2.4 新堆疊長條圖(Stacked Bar Chart)

由控制台選單,Display → New Barchart 選後會出現變數選單,一次只能選一個,圖 4.16選Pressure3pm然後用Sunshine刷色。這圖的X軸是COUNT也就是計數「幾天」,這樣可以看出下午三點氣壓(Pressure3pm)極高或極低時,日照度偏低且一年之中沒幾天是這樣狀態。氣壓屬一般狀況時(1015上下),各種日照度都出現且是最多的。

New Barchart

圖 4.16: New Barchart