Ⅰ 一圖勝千言:數據可視化不完全總結(一)
這篇學習筆記是對數據可視化的一個較為全面的總結。大部分的內容來自於自己之前所學過的數據分析知識,還有一部分內容來自於我收集的一些資料,我將在這篇學習筆記中回答如下幾個關鍵問題:
數據可視化(Data Visualization)是涉及信息技術、自然科學、統計分析、圖形學、交互、地理信息等多種學科交叉領域,通過將非數字的信息進行可視化以表現抽象或復雜的概念和信息的技術。簡單的說,這種技術將數據以圖表的方式呈現,用以傳遞信息。人類有五官,能通過5種渠道感受這個物質世界,那麼為什麼單單要青睞可視化的方式來傳遞信息呢?這是因為人類利用視覺獲取的信息量巨大,人眼結合大腦構成了一台高帶寬巨量視覺信號輸入的並行處理器,具有超強模式識別能力,有超過50%功能用於視覺感知相關處理的大腦,大量視覺信息在潛意識階段就被處理完成,人類對圖像的處理速度比文本快6萬倍,所以數據可視化是一種高帶寬的信息交流方式。
如果我們的視野再開闊些,數據可視化從廣義上來說包含了三個分支:科學可視化(Scientific Visualization),信息可視化(Information Visualization)和可視分析學(Visual Analytics)。科學可視化是跨學科研究與應用領域,關注三維現象的可視化,在建築學、氣象學、醫學或生物學方面的各種系統中有廣泛的應用,這個領域研究的數據具有天然幾何結構(如磁感線、流體分布等)。
信息可視化則研究抽象數據的互動式視覺表示以加強人類認知。抽象數據包括數字和非數字數據,如地理信息與文本,這個領域研究的數據具有抽象的結構,比如柱狀圖,趨勢圖,流程圖和樹狀圖,這些圖表將抽象的概念轉化成為可視化信息,常常以數據面板的形式體現。
可視分析學結合了互動式視覺表示以及基礎分析過程(統計過程、數據挖掘技術),執行高級別、復雜的活動(推理、決策)。
數據科學的主要組成部分包含三個大的階段:數據整理,探索性數據分析和數據可視化。站在一個更高的位置來看,數據可視化在數據科學中的位置是比較靠後的,是屬於最後的成果展示階段。如果要從頭說起的話,首先,在 數據整理 階段,我們的主要任務是數據的獲取和解析,包括一系列對原始數據的清洗和加工工作,這一塊的知識領域主要涉及計算機科學。緊接著是 探索性數據分析 階段,這個階段要大量使用統計和數據挖掘方面的專業知識,也需要繪制圖表來解釋數據和探索數據,這個階段的主要任務是過濾和挖掘。但這個階段的可視化分析只是你和數據之間的「對話」,是數據想要告訴你什麼,而數據可視化則是數據和你的讀者之間的對話,是你通過數據想要告訴讀者什麼,這是它們之間最大的區別。完成了上面兩個階段的內容,才到了我們最後的 數據可視化 階段,這是一個多學科交叉的領域,涉及到圖形設計,信息可視化和人機交互,我們的主要任務是對信息進行精煉,然後通過可視化表示出來,並與讀者產生交互。然而,如果將數據科學的這三個階段理解為按嚴格順序進行的「線性」的模型那就大錯特錯了,它經歷的是一個迭代的,非線性的過程。後面的步驟會讓你更了解之前所做的工作,可能到了數據可視化階段,才意識到還有太多疑點要弄明白,我們需要回到上一步重新進行之前的工作,就像畫家翻來覆去才能最終完成一幅傑作一樣,數據可視化的過程並不是給數據分析這個剛出爐的蛋糕加點糖霜,,而是有一個反復迭代,不斷優化的過程。
數據可視化是一個再典型不過的多學科交叉領域了,可以說數據可視化所需要用到的知識,就是數據科學龐大知識體系的一個剪影。你會感受到數據科學理性的一面,同樣也會感受到她感性的一面。你可以窮盡自己的一生,在這個浩如煙海的領域中盡情的探索,常學常新,其樂無窮。
數據可視化的本質,是充分理解業務的基礎上對數據進行深入分析和挖掘,然後將探索數據所得到的信息和知識以可視化的形式展現出來。也就是說我們做的工作其實就是從數據空間映射到圖形空間。我們要做的第一步工作是充分的結合業務理解數據,然後採用某些方法選擇合適的圖表類型,這又要求我們先對圖表類型有個比較全面的了解。繪制完圖表是不是就完成了呢?其實不是。我們還要對圖表進行優化,優化所針對的對象是各種圖表元素,對此我們有一系列的設計技巧,下面將一步一步的來介紹這些知識。
離開對業務的理解談數據分析都是耍流氓。這里介紹一種快速了解數據與業務以開展進一步的探索與分析的方法,叫「5W2H法」。步驟一:WHAT,這是關於什麼業務的什麼事?數據所描述的業務主題是什麼?步驟2:HOW,即如何採集的數據?採集規則會影響後續分析,比如如果是後端數據埋點,那麼數據一般是實時的;而如果是前端數據埋點,那麼就要進一步弄清楚數據在什麼網路狀態會上傳?無網路狀態下是如何處理的?這些都會影響最後數據的質量進而影響分析質量。步驟三:WHY,為什麼搜集此數據?我們想從數據中了解什麼?數據分析的目標是什麼?步驟四:WHEN,是何時段內的業務數據?步驟五:WHERE,是何地域范圍內的業務數據?步驟六:WHO,誰搜集了數據(Who)?在企業內可能更關注是來自哪個業務系統。步驟七:HOW MUCH,各種數據有多大的量,足夠支持分析嗎?數據充足和不足的情況下,分析方法是有所不同的。如果七個問題中有一個答復不能令人滿意,則表示這方面有改進餘地。
用簡單的三個步驟就可以選擇合適的圖表類型:一看數據類型,二看數據維度,三看要表達的內容。
我們有兩種數據類型,每種數據類型又有兩個子類別。首先,我們有 分類數據 和 定量數據 。分類數據用來表示類別,比如蘋果,香蕉,梨子和葡萄,就是水果的4種類別,稱為 分類定類 ;有的分類變數是有一定順序的,比如可以把紅酒的品質分為低,中,高三檔,人的身材有偏瘦,正常和肥胖等等,這種特殊的分類變數稱為 分類定序 。定量數據也可以進一步分為兩類,一類叫 連續值數據 ,比如人的年齡;一類叫 離散值數據 ,比如貓咪的數量。選擇圖表的第一步就是要看我要展示的數據是什麼類型,最典型的例子就是相關性分析,如果要分析定量數據和定量數據之間的關系,那麼散點圖無疑是最佳選擇,但如果有其他情況出現該怎麼選擇呢?數據類型直接影響你能選擇的圖表類型:
舉幾個例子來說明大家可能就明白了。
首先來看一個散點圖的例子,比如我要分析一下汽車每加侖行駛的英里數和汽車重量之間的關系,因為兩個都是定量數據,那麼我們就應該選擇散點圖:
從散點圖中我們可以看到每加侖行駛的英里數和汽車重量之間是呈線性負相關關系的,車的重量越重,每加侖行駛的英里數就越小。
下面這個馬賽克圖分析了《冰與火之歌》中五王之戰各戰爭與戰爭類別之間的關系:
五王之戰中總共有這樣幾種戰爭類別:
戰爭類型是分類變數,戰爭的勝負也是分類變數,馬賽克圖(也就是下面要介紹的「不等寬柱狀圖」)分析了戰爭類型和戰爭勝負的關系,可以很明顯的看出ambush,siege和razing類型的戰爭,進攻方的勝率都是很高的。這意味著什麼?如果我要建立一個預測戰爭勝負的模型,那麼戰爭類型就是一個非常好的特徵。
如果要分析分類數據和定量數據的相關性,那麼箱線圖就是一個比較好的選擇了,請看下面這個例子:
這個箱線圖展示了汽車的氣缸數量和每加侖行駛的英里數之間的關系,氣缸數量越多,每加侖汽油行駛公里數越少,說明相應的油耗越高,間接說明氣缸數量和油耗具有相關性。這里可以將氣缸數量這個離散型數值變數當做分類變數來看待。
看完了數據類型,接著看維度,要展示的數據是一維,二維還是多維的?如果是一維或者二維,那麼一般的統計圖表都能滿足要求,但如果我們有多維的數據,我們就要把第三維開始的數據映射到上面提到的那7大視覺編碼中。比如散點圖表示了兩個定量數據之間的關系,如果還存在第三個定量數據,那麼我們就可以用點的大小來表示,那麼散點圖就變成了氣泡圖,如果第三個數據是分類數據,那麼我們可以在散點圖的基礎上標記顏色來表示。
最後,還要考慮可視化主要想表達的內容是什麼。對於4大內容:比較,分布,組合和關系,下面這張圖給出了一份簡單的指南。比如我想表達的是數據的分布,如果是單變數且只有比較少的數據點時,可以選擇直方圖。比如想表達數據之間的關系,如果是兩個變數,則使用散點圖,如果有第三個變數,那麼如果編碼成大小,則得到氣泡圖。
這也是當初一個比較困擾我的地方,到底有多少種圖表可供我選擇?作為數據分析師,我們得先對自己的武器庫有個基本的認識和了解,才能在使用的時候挑選趁手的武器,下面將介紹一些常見的圖表。
也稱為「棒形圖」或「柱形圖」。條形圖 (Bar Chart) 採用水平或垂直條形(柱形圖)來比較不同類別的離散數值。圖表其中一條軸代表要比較的具體類別,另一條則用作離散數值的標尺。條形圖與直方圖不同,前者不會顯示數值在某時間段內的持續發展。條形圖的離散數據是分類數據,針對的是單一類別中的數量多少。條形圖其中一個缺點是當有大量條形時,將難以標簽圖表。
條形圖有兩種常見的變種: 多組條形圖 和 堆疊式條形圖 。多組條形圖也稱為「分組條形圖」或「復式條形圖」,在同一軸線上將兩個或多個數據集並排,繪制數據並進行分類。跟條形圖同樣,每個條形的長度用來顯示不同類別之間的離散數值比較。每個數據系列將獲分配一種顏色(或同一顏色的其中一種深淺度)以進行區分,然後每組條形將獨立放置,並與其他條形組分隔開。多組條形圖通常用來將分組變數或類別與其他數據組(具有相同變數或類別種類)進行比較,也可用來比較迷你直方圖,每組內的每個條形將表示變數的顯著間隔。多組條形圖的缺點:當有太多條形組合在一起時將難以閱讀。
跟多組條形圖不同(並排顯示條形),堆疊式條形圖 (Stacked Bar Graph) 將多個數據集的條形彼此重迭顯示,適合用來顯示大型類別如何細分為較小的類別,以及每部分與總量有什麼關系。堆疊式條形圖共分成兩種:簡單堆疊式條形圖將分段數值一個接一個地放置。條形的總值就是所有段值加在一起。適合用來比較每個分組/分段的總量。100% 堆疊式條形圖會顯示每組占總體的百分比,並按該組每個數值占整體的百分比來繪制,可用來顯示每組中數量之間的相對差異。堆疊式條形圖的一個主要缺點:條形分段越多,圖表就越難以閱讀。另外,我們也較難比較不同分段,因為它們不在同一基線之上。
徑向/圓形條形圖只是在極座標系(而非笛卡爾座標系)上繪制的條形圖。雖然看起來很美觀,但徑向條形圖的問題在於條形的長度可能會被人誤解。即使所代表的數值相同,但外圍的條形看起來還是會比較長。由於每個條形都必須處於不同的半徑,所以只能用角度來判斷數值多少。我們的視覺系統比較擅於理解直線,因此笛卡爾條形圖是比較數值的更好選擇。因此,使用徑向條形圖通常只是為了美觀。
也稱為「圓形柱圖」或「星圖」。這種圖表使用同心圓網格來繪制條形圖。每個圓圈表示一個數值刻度,而徑向分隔線(從中心延伸出來的線)則用作區分不同類別或間隔(如果是直方圖)。刻度上較低的數值通常由中心點開始,然後數值會隨著每個圓形往外增加,但也可以把任何外圓設為零值,這樣裡面的內圓就可用來顯示負值。條形通常從中心點開始向外延伸,但也可以別處為起點以顯示數值范圍(如跨度圖)。此外,條形也可以如堆疊式條形圖般堆疊起來。
子彈圖 (Bullet Graph) 能顯示表現數據,功能類似於條形圖,但加入更多視像元素,提供更多補充信息。子彈圖最初由 Stephen Few 開發,用來取代儀表盤上如里程錶或時速表這類圖形儀表,解決顯示信息不足的問題,而且能有效節省空間,更可除掉儀表盤上一些不必要的東西。主要數據值由圖表中間主條形的長度所表示,稱為「功能度量」(Feature Measure);而與圖表方向垂直的直線標記則稱為「比較度量」(Comparative Measure),用來與功能度量所得數值進行比較。如果主條形長度超越比較度量標記的位置,則代表數據達標。功能度量背後的分段顏色條形用來顯示定性范圍得分。每種色調(如上面示例中三種不同深度的灰色)表示不同表現范圍等級,如欠佳、平均和良好。當使用子彈圖時,建議最多使用五個等級。
平行座標圖 (Parallel Coordinates Plots) 能顯示多變數的數值數據,最適合用來同一時間比較許多變數,並表示它們之間的關系。舉個例子:比較具有相同屬性的一系列產品(比較不同型號的計算機或汽車規格)。在平行座標圖中,每個變數都有自己的軸線,所有軸線彼此平行放置,各自可有不同的刻度和測量單位;或者我們也可以統一處理所有軸線以保持所有刻度間隔均勻。然後我們繪制一系列的直線穿越所有軸線來表示不同數值。軸線排列的順序可能會影響讀者如何理解數據,其中一個原因是相鄰變數之間的關系會比非相鄰的變數容易進行比較。因此重新排列軸線可以幫助了解不同變數之間的模式或相關性。平行座標圖的缺點是容易變得混亂,當數據密集時更加難以辨認。解決這個問題的最好辦法是通過一種名為「刷理」的互動技術,突出顯示所選定的一條或多條線,同時淡化所有其他線條,讓我們能更集中研究感興趣的部分,並濾除干擾數據。
又稱為「蜘蛛圖」、「極地圖」或「星圖」。雷達圖 (Radar Chart) 是用來比較多個定量變數的方法,可用於查看哪些變數具有相似數值,或者每個變數中有沒有任何異常值。此外,雷達圖也可用於查看數據集中哪些變數得分較高/低,是顯示性能表現的理想之選。每個變數都具有自己的軸(從中心開始)。所有的軸都以徑向排列,彼此之間的距離相等,所有軸都有相同的刻度。軸與軸之間的網格線通常只作指引用途。每個變數數值會畫在其所屬軸線之上,數據集內的所有變數將連在一起形成一個多邊形。
然而,雷達圖有一些重大缺點:在一個雷達圖中使用多個多邊形,會令圖表難以閱讀,而且相當混亂。特別是如果用顏色填滿多邊形,表面的多邊形會覆蓋著下面的其他多邊形。此外,過多變數也會導致出現太多的軸線,使圖表難以閱讀和變得復雜,故雷達圖只能保持簡單,因而限制了可用變數的數量。雷達圖的另一缺點是它未能很有效地比較每個變數的數值。即使藉助蜘蛛網般的網格指引,在直線軸上比較數值始終較為容易。
也稱為「象形統計圖」。使用圖案來顯示數據量的象形圖 (Pictogram Chart) 讓人可以更全面地了解小型數據集,而且所用圖案通常切合數據主題或類別,例如關於人口數據的圖表將使用人物圖案。每個圖案可以表示一個單位或任何數量或單位(例如每個圖案表示 10 個)。通過了解列或行中的圖案多少,我們可以對數據集的每個類別進行比較。使用圖案能克服語言、文化和教育水平方面的差異,是更具代表性的數據顯示方法。舉個例子,如果數據是「5 輛車」,圖中便會顯示 5 個汽車圖案。使用象形圖時有兩點要避免:用於大型數據集,令人難以計數。只顯示部分圖案,令人混淆它們到底代表什麼。
也稱為「范圍條形/柱形圖」或「浮動條形圖」。用來顯示數據集內最小值和最大值之間的范圍,適合用來比較范圍,尤其是已分類的范圍。跨度圖只集中顯示極端數值,不提供任何關於最小值和最大值之間的數值、整體平均值或數據分布等其他信息。
點陣圖表 (Dot Matrix Chart) 以點為單位顯示離散數據,每種顏色的點表示一個特定類別,並以矩陣形式組合在一起。適合用來快速檢視數據集中不同類別的分布和比例,並與其他數據集的分布和比例進行比較,讓人更容易找出當中模式。當只有一個變數/類別時(所有點都是相同顏色),點陣圖表相等於比例面積圖。
又稱為「極面積圖」。統計學家和醫學改革家佛羅倫薩‧南丁格爾 (Florence Nightingale) 曾在克里米亞戰爭期間使用這種圖表傳達士兵身亡情況,故得名。南丁格爾玫瑰圖 (Nightingale Rose Charts) 繪制於極座標系之上。每個數據類別或間隔在徑向圖上劃分為相等分段,每個分段從中心延伸多遠(與其所代表的數值成正比)取決於極座標軸線。因此,從極座標中心延伸出來的每一環可以當作標尺使用,用來表示分段大小並代表較高的數值。在南丁格爾玫瑰圖中,代表數值的是分段面積,而不是其半徑。南丁格爾玫瑰圖的主要缺點在於面積較大的外圍部分會更加引人注目,這跟數值的增量成反比。
非常適合用來比較數值和顯示比例(尺寸、數量等),以便快速全面地了解數據的相對大小,而無需使用刻度。這種圖表的缺點在於使用面積圖難以得出估值,也就是說它們幾乎只能用於通信目的,而不能作分析用途。雖然比例面積圖通常使用正方形或圓形,但其實也可以使用任何形狀,只要所使用的形狀面積是表示數據即可。這種面積圖的常見技術錯誤是,使用長度來確定形狀大小,而非計算形狀中的空間面積,導致數值出現指數級的增長和減少。
也稱為「標簽雲圖」。通過使每個字的大小與其出現頻率成正比,顯示不同單詞在給定文本中的出現頻率,然後將所有的字詞排在一起,形成雲狀圖案,也可以任何格式排列:水平線、垂直列或其他形狀。字雲圖 (Word Cloud) 也可用於顯示獲分配元數據的單詞。舉個例子,我們把世界各地所有國家的名稱加到字雲中,再將人口數量分配給每個國家,以確定其名稱的字體大小。在字雲圖上使用顏色通常都是毫無意義的,主要是為了美觀,但我們可以用顏色對單詞進行分類或顯示另一個數據變數。字雲圖通常用於網站或博客上,以描述關鍵字或標簽使用,也可用來比較兩個不同的文本。
雖然簡單易懂,但字雲圖有著一些重大缺點:較長的字詞會更引人注意。字母含有很多升部/降部的單詞可能會更受人關注。分析精度不足,較常是為了美觀。
餅形圖 (Pie Chart) 獲廣泛應用於項目演示和辦公室,把一個圓圈劃分成不同比例的分段,以展示各個類別之間的比例和百分比。每個圓弧的長度代表每個類別的所佔比例,而全圓則表示所有數據的總和,相等於 100%。
餅形圖適合用來快速展示數據比例分布,但主要缺點是:
盡管如此,如要在單一餅形圖中比較給定類別在整體中所佔的比例,這仍是有效之選。
圓環圖 (Donut Chart) 基本上就是餅形圖,只是中間的部分被切掉。然而,圓環圖比餅形圖略有優勢,因為後者不時被人批評,說它只將重點放在不同部分彼此或相對於整體的大小關系,但當與其他餅形圖作整體比較時,卻不能顯示出任何變化。圓環圖算是解決了這個問題的其中一部分,讓人不再只看「餅」的面積,反面更重視總體數值的變化:專注於閱讀弧線的長度,而不是比較「餅與餅」之間的比例不同。另外,圓環圖中間的空白處更可以用來顯示其他信息,因此更能節省空間。
桑基圖 (Sankey Diagram) 用來顯示流向和數量(彼此之間的比例)。箭頭或線的寬度用於顯示大小,因此箭頭越大,流量也越大。在每個流程階段中,流向箭頭或線可以組合在一起,或者往不同路徑各自分開。我們可用不同顏色來區分圖表中的不同類別,或表示從一個階段到另一個階段的轉換。桑基圖通常用於顯示能量、金錢或材料數據的轉移,但也可用於顯示任何獨立系統的流程。
熱圖 (Heatmap) 通過色彩變化來顯示數據。當應用在表格時,熱圖適合用來交叉檢查多變數的數據,方法是把變數放置於行和列中,再將表格內的不同單元格進行著色。熱圖適用於顯示多個變數之間的差異;顯示當中任何模式;顯示是否有彼此相似的變數;以及檢測彼此之間是否存在任何相關性。通常所有水平行都同屬一個類別(在左側或右側顯示的標簽);而所有垂直列將被分配為另一類別(在頂部或底部顯示的標簽)。每行或每列會再被分成子類別,全都以矩陣形式相互匹配。表格中的單元格內有不同顏色編碼的分類數據,或是基於顏色標度的數字數據。單元格內的數據是基於相連行和列中兩個變數之間的關系。我們需要圖解來幫助閱讀熱圖。分類數據採用不同顏色編碼表示,而數字數據則需要一個顏色標度(從一種顏色轉到另一種顏色)來幫忙表示高低值之間的差異。我們可以使用一系列的純色來表示多個范圍的數值(0-10、11-20、21-30等),或者可以將兩種或多種顏色混合在一起,使用漸變標度來表示單一范圍(例如 0 - 100)。由於熱圖依賴顏色來表達數值,它比較適合用來顯示廣泛數值數據,因為要准確地指出色調之間的差異始終有難度,也較難從中提取特定數據點(除非在單元格中加入原始數據)。如果將其中一行/列設為時間間隔,熱圖也可用於顯示數據隨時間的變化。其中一個例子就是使用熱圖來比較全年多個城市的溫度變化,看看最熱或最冷的地方在哪兒:我們可以把要比較的城市在水平行中列出,而垂直列則是月份,然後在單元格內填上溫度值。
也稱為「集合圖」。文氏圖 (Venn Diagram) 顯示集與集之間所有可能存在的邏輯關系,每個集通常以一個圓圈表示。每個集都是一組具有共同之處的物件或數據。當多個圓圈(集)相互重迭時,稱為交集 (intersection),裡面的數據同時具有重迭集中的所有屬性。這里只顯示了由 2 個數據集組成的文氏圖,但也有 3、4、5、6 甚至 7 個數據集相互重迭的例子。
弧線圖 (Arc Diagram) 是二維雙軸圖表以外另一種數據表達方式。在弧線圖中,節點 (Nodes) 將沿著 X軸(一維軸)放置,然後再利用弧線表示節點與節點之間的連接關系。每條弧線的粗幼度表示源節點和目標節點之間的頻率。弧線圖適合用來查找數據共同出現的情況。弧線圖的缺點:不能如其他雙軸圖表般清楚顯示節點之間的結構和連接,而且過多連接也會使圖表難於閱讀。
弦圖 (Chord Diagram) 可以顯示不同實體之間的相互關系和彼此共享的一些共通之處,因此這種圖表非常適合用來比較數據集或不同數據組之間的相似性。節點圍繞著圓周分布,點與點之間以弧線或貝塞爾曲線彼此連接以顯示當中關系,然後再給每個連接分配數值(通過每個圓弧的大小比例表示)。此外,也可以用顏色將數據分成不同類別,有助於進行比較和區分。弦圖的缺點是過於混亂,尤其是當要顯示太多連接的時候。
非綵帶弦圖 (Non-ribbon Chord Diagram) 是弦圖的一個精簡版本,僅顯示節點和連接線,更加強調數據之間的連接關系。
也稱為「網路地圖」或「節點鏈路圖」。這種圖表使用節點/頂點和連接線來顯示事物之間的連接關系,並幫助闡明一組實體之間的關系類型。這些節點通常是圓點或小圓圈,但也可以使用圖標。節點之間的連接關系通常以簡單的線條表示,但在某些網路圖中,並非所有節點和連接都有相同屬性,故可藉此顯示其他變數,例如通過節點大小或連接線的粗幼來表示其與數值之間的比例。通過描繪出鏈路連接系統、查找任何節點集群、節點連接的密度或圖表布局,網路圖可以用來解釋各種網路結構。兩種主要網路圖分別為「不定向」和「定向」網路圖;不定向網路圖僅顯示實體之間的連接,而定向網路圖則可顯示連接是單向還是雙向(通過小箭頭)。網路圖數據容量有限,並且當節點太多時會形成類似「毛球」的圖案,使人難以閱讀。
後續內容,請查看 一圖勝千言:數據可視化不完全總結(二)