一文看懂數據可視化:從編程工具到可視化表現方式

說到可視化,就不得不說一下大數據,畢竟可視化是解決大數據的一種高效的手段,而如今人人都在談論大數據,大數據 ≠ 有數據 ≠ 數據量大, 離譜的是,如今就連賣早點的覺得自己能統計每天賣出的種類,都敢說自己是搞大數據。

時間推移到 2009 年,“大數據” 開始才成爲互聯網技術行業中的熱門詞彙。對“大數據”進行收集和分析的設想,起初來自於世界著名的管理諮詢公司麥肯錫公司;麥肯錫公司看到了各種網絡平臺記錄的個人海量信息具備潛在的商業價值,於是投入大量人力物力進行調研,在 2011 年 6 月發佈了關於“大數據”的報告,該報告對“大數據”的影響、關鍵技術和應用領域等都進行了詳盡的分析。麥肯錫的報告得到了金融界的高度重視,而後逐漸受到了各行各業關注。

定義

數據可視化的目的其實就是直觀地展現數據,例如讓花費數小時甚至更久才能歸納的數據量,轉化成一眼就能讀懂的指標;通過加減乘除、各類公式權衡計算得到的兩組數據差異,在圖中顏色敏感、長短大小即能形成對比;數據可視化是一個溝通複雜信息的強大武器。通過可視化信息,我們的大腦能夠更好地抓取和保存有效信息,增加信息的印象。但如果數據可視化做的較弱,反而會帶來負面效果;錯誤的表達往往會損害數據的傳播,完全曲解和誤導用戶,所以更需要我們多維的展現數據,就不僅僅是單一層面。

背景

我們可以想一想,在大數據沒有出現之前,已經有很多對數據加以可視化的經典應用,比如股市裏的 K 線了,其試圖以可視化的目的來發現某些規律,信息可以用多種方法來進行可視化,每種可視化的方法都有着不同的着重點,特別是在大數據時代,當你打算處理數據時。首先要明確並理解的一點是:你打算通過數據向你的用戶講述怎樣的故事,數據可視化之後又在表達着什麼?

通過這些數據,能爲你後續的工作做哪一些指導性工作,是否能幫觀者正確的抓住重點,瞭解行業動態?瞭解這一點之後,你便能選擇合理的數據可視化方法,高效傳達數據。

當我們能夠充分理解數據,並能夠輕易向他人解釋數據時,數據纔有所價值;我們的讀者可以通過可視化互動或其他數據使用方式來探尋一個故事的背後發生了什麼,因此,數據可視化至關重要。

數據的特性

數據可視化,先要理解數據,再去掌握可視化的方法,這樣才能實現高效的數據可視化,下面是常見的數據類型,在設計時,你可能會遇到以下集中數據類型:

  • 量性:數據是可以計量的,所有的值都是數字
  • 離散型:數字類數據可能在有限範圍內取值。例如:辦公室內員工的數目
  • 持續性:數據可以測量,且在有限範圍內,例如:年度降水量
  • 範圍性:數據可以根據編組和分類而分類,例如:產量銷售量

可視化的意義是幫助人更好的分析數據,也就是說他是一種高效的手段,並不是數據分析的必要條件;如果我們採用了可視化方案,意味着機器並不能精確的分析。當然,也要明確可視化不能直接帶來結果,它需要人來介入來分析結論。

在大數據時代,可視化圖表工具不可能“單獨作戰”,而我們都知道大數據的價值在於數據挖掘,一般數據可視化都是和數據分析功能組合,數據分析又需要數據接入整合、數據處理、ETL等數據功能,發展成爲一站式的大數據分析平臺。

工具——編程語言

R 經常被稱爲是“統計人員爲統計人員開發的一種語言”。如果你需要深奧的統計模型用於計算,可能會在 CRAN 上找到它――你知道,CRAN 叫綜合R檔案網絡(Comprehensive R Archive Network)並非無緣無故。說到用於分析和標繪,沒有什麼比得過 ggplot2。而如果你想利用比你機器提供的功能還強大的功能,那可以使用 SparkR 綁定,在 R 上運行 Spark。

  • Scala

Scala 是最輕鬆的語言,因爲大家都欣賞其類型系統。Scala在JVM上運行,基本上成功地結合了函數範式和麪向對象範式,目前它在金融界和需要處理海量數據的公司企業中取得了巨大進展,常常採用一種大規模分佈式方式來處理(比如Twitter和LinkedIn)。它還是驅動Spark和Kafka的一種語言。

  • Python

Python 在學術界當中一直很流行,尤其是在自然語言處理(NLP)等領域。因而,如果你有一個需要 NLP 處理的項目,就會面臨數量多得讓人眼花繚亂的選擇,包括經典的 NTLK、使用 GenSim 的主題建模,或者超快、準確的 spaCy。同樣,說到神經網絡,Python 同樣遊刃有餘,有 Theano 和 Tensorflow;隨後還有面向機器學習的 scikit-learn,以及面向數據分析的 NumPy 和 Pandas。

  • Java

Java 可能很適合你的大數據項目。想一想 Hadoop MapReduce,它用 Java 編寫。HDFS 呢?也用 Java 來編寫。連 Storm、Kafka 和 Spark 都可以在 JVM 上運行(使用 Clojure 和 Scala),這意味着 Java 是這些項目中的“一等公民”。另外還有像 Google Cloud Dataflow(現在是 Apache Beam)這些新技術,直到最近它們還只支持 Java。

可視化框架

  • Echart.js
  • D3.js
  • Highchart.js
  • Antv.js

合理的可視化

我將可視化圖表分爲以下幾類:

每個可視化圖表的類型以一個合理圖表的呈現的形式來舉例說明,(該部分總結自 Antv)。

  • 比較類

比較類顯示值與值之間的不同和相似之處。 使用圖形的長度、寬度、位置、面積、角度和顏色來比較數值的大小, 通常用於展示不同分類間的數值對比,不同時間點的數據對比。

柱形圖

柱狀圖有別於直方圖,柱狀圖無法顯示數據在一個區間內的連續變化趨勢。柱狀圖描述的是分類數據,回答的是每一個分類中“有多少?”這個問題。 需要注意的是,當柱狀圖顯示的分類很多時會導致分類名層疊等顯示問題。

  1. 適合的數據:一個分類數據字段、一個連續數據字段
  2. 功能:對比分類數據的數值大小
  3. 數據與圖形的映射:分類數據字段映射到橫軸的位置
  4. 連續數據字段映射到矩形的高度
  5. 分類數據也可以設置顏色增強分類的區分度
  6. 適合的數據條數:不超過 12 條數據
  • 分佈類

分佈類顯示頻率,數據分散在一個區間或分組。 使用圖形的位置、大小、顏色的漸變程度來表現數據的分佈, 通常用於展示連續數據上數值的分佈情況。

散點圖

散點圖也叫 X-Y 圖,它將所有的數據以點的形式展現在直角座標系上,以顯示變量之間的相互影響程度,點的位置由變量的數值決定。

通過觀察散點圖上數據點的分佈情況,我們可以推斷出變量間的相關性。如果變量之間不存在相互關係,那麼在散點圖上就會表現爲隨機分佈的離散的點,如果存在某種相關性,那麼大部分的數據點就會相對密集並以某種趨勢呈現。數據的相關關係主要分爲:正相關(兩個變量值同時增長)、負相關(一個變量值增加另一個變量值下降)、不相關、線性相關、指數相關等,表現在散點圖上的大致分佈如下圖所示。那些離點集羣較遠的點我們稱爲離羣點或者異常點。

  1. 適合的數據:兩個連續數據字段
  2. 功能:觀察數據的分佈情況
  3. 數據與圖形的映射:兩個連續字段分別映射到橫軸和縱軸。
  4. 適合的數據條數:無限制
  5. 備註:可更具實際情況對點的形狀進行分類字段的映射。
  6. 點的顏色進行分類或連續字段的映射。

  • 流程類

流程類顯示流程流轉和流程流量。 一般流程都會呈現出多個環節,每個環節之間會有相應的流量關係,這類圖形可以很好的表示這些關係。

漏斗圖

漏斗圖適用於業務流程比較規範、週期長、環節多的單流程單向分析,通過漏斗各環節業務數據的比較能夠直觀地發現和說明問題所在的環節,進而做出決策。漏斗圖用梯形面積表示某個環節業務量與上一個環節之間的差異。漏斗圖從上到下,有邏輯上的順序關係,表現了隨着業務流程的推進業務目標完成的情況。

漏斗圖總是開始於一個100%的數量,結束於一個較小的數量。在開始和結束之間由N個流程環節組成。每個環節用一個梯形來表示,梯形的上底寬度表示當前環節的輸入情況,梯形的下底寬度表示當前環節的輸出情況,上底與下底之間的差值形象的表現了在當前環節業務量的減小量,當前梯形邊的斜率表現了當前環節的減小率。 通過給不同的環節標以不同的顏色,可以幫助用戶更好的區分各個環節之間的差異。漏斗圖的所有環節的流量都應該使用同一個度量。

  1. 圖表類型:漏斗圖
  2. 適合的數據:一個分類數據字段、一個連續數據字段
  3. 功能:對比分類數據的數值大小
  4. 數據與圖形的映射:分類數據字段映射到顏色
  5. 連續數據字段映射到梯形的面積
  6. 適合的數據條數:不超過12條數據
  • 佔比類

佔比類顯示同一維度上佔比關係。

餅圖

餅圖廣泛得應用在各個領域,用於表示不同分類的佔比情況,通過弧度大小來對比各種分類。餅圖通過將一個圓餅按照分類的佔比劃分成多個區塊,整個圓餅代表數據的總量,每個區塊(圓弧)表示該分類佔總體的比例大小,所有區塊(圓弧)的加和等於 100%。

  1. 適合的數據:列表:一個分類數據字段、一個連續數據字段
  2. 功能 對比分類數據的數值大小
  3. 數據與圖形的映射:分類數據字段映射到扇形的顏色
  4. 連續數據字段映射到扇形的面積
  5. 適合的數據條數:不超過 9 條數據
  • 區間類

區間類顯示同一維度上值的上限和下限之間的差異。 使用圖形的大小和位置表示數值的上限和下限,通常用於表示數據在某一個分類(時間點)上的最大值和最小值。

儀表盤

儀表盤(Gauge)是一種擬物化的圖表,刻度表示度量,指針表示維度,指針角度表示數值。儀表盤圖表就像汽車的速度表一樣,有一個圓形的錶盤及相應的刻度,有一個指針指向當前數值。目前很多的管理報表或報告上都是用這種圖表,以直觀的表現出某個指標的進度或實際情況。

儀表盤的好處在於它能跟人們的常識結合,使大家馬上能理解看什麼、怎麼看。擬物化的方式使圖標變得更友好更人性化,正確使用可以提升用戶體驗。

  1. 適合的數據:一個分類字段,一個連續字段
  2. 功能 對比分類字段對應的數值大小
  3. 數據與圖形的映射:指針映射到分類字段,指針的角度映射連續字段
  4. 適合的數據條數:小於等於3
  • 關聯類

關聯類顯示數據之間相互關係。 使用圖形的嵌套和位置表示數據之間的關係,通常用於表示數據之間的前後順序、父子關係以及相關性。

矩形樹圖

矩形樹圖由馬里蘭大學教授 Ben Shneiderman 於上個世紀90年代提出,起初是爲了找到一種有效瞭解磁盤空間使用情況的方法。 矩形樹圖適合展現具有層級關係的數據,能夠直觀體現同級之間的比較。一個Tree狀結構轉化爲平面空間矩形的狀態,就像一張地圖,指引我們發現探索數據背後的故事。

  1. 適合的數據:帶權的樹形數據
  2. 功能 表示樹形數據的樹形關係,及各個分類的佔比關係
  3. 數據與圖形的映射:樹形關係映射到位置,佔比數值數據映射到大小。設置顏色增強分類的區分度
  4. 適合的數據條數:大於5個分類
  • 趨勢類

趨勢類分析數據的變化趨勢。 使用圖形的位置表現出數據在連續區域上的分佈,通常展示數據在連續區域上的大小變化的規律。

折線圖

折線圖用於顯示數據在一個連續的時間間隔或者時間跨度上的變化,它的特點是反映事物隨時間或有序類別而變化的趨勢。

  1. 適合的數據:兩個連續字段數據,或者一個有序的分類一個連續數據字段
  2. 功能 觀察數據的變化趨勢
  3. 數據與圖形的映射:兩個連續字段分別映射到橫軸和縱軸
  4. 適合的數據條數:單條線的數據記錄數要大於2,但是同一個圖上不要超過5條折線
  • 時間類

時間類顯示以時間爲特定維度的數據。 使用圖形的位置表現出數據在時間上的分佈,通常用於表現數據在時間維度上的趨勢和變化。

面積圖

面積圖又叫區域圖。 它是在折線圖的基礎之上形成的, 它將折線圖中折線與自變量座標軸之間的區域使用顏色或者紋理填充,這樣一個填充區域我們叫做面積,顏色的填充可以更好的突出趨勢信息,需要注意的是顏色要帶有一定的透明度,透明度可以很好的幫助使用者觀察不同序列之間的重疊關係,沒有透明度的面積會導致不同序列之間相互遮蓋減少可以被觀察到的信息。

  1. 適合的數據:兩個連續字段數據
  2. 功能 觀察數據變化趨勢
  3. 數據與圖形的映射:兩個連續字段分別映射到橫軸和縱軸
  4. 適合的數據條數:大於兩條
  • 地圖類

地圖類顯示地理區域上的數據。 使用地圖作爲背景,通過圖形的位置來表現數據的地理位置, 通常來展示數據在不同地理區域上的分佈情況。

帶氣泡的地圖

帶氣泡的地圖,其實就是氣泡圖和地圖的結合,我們以地圖爲背景,在上面繪製氣泡。我們將圓(這裏我們叫它氣泡)展示在一個指定的地理區域內,氣泡的面積代表了這個數據的大小。

  1. 適合的數據:一個分類字段,一個連續字段
  2. 功能 對比分類數據的數值大小
  3. 數據與圖形的映射:一個分類字段映射到地圖的地理位置和氣泡顏色
  4. 另一個連續字段映射到氣泡大小
  5. 適合的數據條數:根據實際地理位置信息,無限制

用戶體驗

  • 用戶視覺

合格的數據可視化是有新聞價值的。也就是說,它要能幫助目標觀衆更好地理解數據。有些數據可視化,只讓我們看到酷炫狂拽的圖形,或者密密麻麻的數據。這些就是過於看重藝術性和科學性,而忽略根本目的了。用信息研究的理論來說,數據看上去過於混亂和密集,用戶就會不由自主地「切斷數據的傳輸」。

  • 色彩空間

人類對於顏色感知的方式通常包括三個問題:是什麼顏色?深淺如何?明暗如何?在HSV色彩空間中,H 指色相 (Hue),S 指飽和度(Saturation),V 指明度(Value),在 HSL 色彩空間中,L 表示亮度(Lightness)。它們比 RGB 色彩空間更加直觀且符合人類對顏色的語言描述。在 1979 年的 ACM SIGGRAPH(美國計算機協會計算機圖形學專業組)年度會議上,計算機圖形學標準委員會推薦將HSL色彩空間用於顏色設計。

人羣中存在一部分人具有視覺缺陷,包括色盲、色弱等。爲了幫助他們識別圖表,可能需要採取一些特殊方法。

一個好的可視化工程師,必定也是一個好的 UX(用戶體驗),所以不光要以易讀性爲目標努力,用戶們也要問問自己:這份可視化是給我看的嗎?我看的方式是否正確?

在數據可視化的工程中,你在分析中所採取的具體步驟會隨着數據集和項目的不同而不同,但在探索數據可視化和數據挖掘時,總體而言應考慮以下四點:

  • 擁有什麼數據?
  • 關於數據你想了解什麼?
  • 應該使用哪種可視化方式?
  • 你看見了什麼,有意義嗎?

而去年我和我們廠的兩個同事聯合開發了可視化分析工具,還給業務人員舉行了一場比賽,順便在產品新版本發佈前讓他(她)們幫我們測一下易用性,然而在比賽評比當晚,我有幸成爲了評委,可惜參賽選手們解釋自己的作品時,有的雲裏霧裏、有的激昂慷慨,很多都沒有說到點子上,甚至沒有充分利用到各個圖表類型的優勢,在這個滿世界談用戶體驗的時代,這場數據的“解說”顯然是糟糕的。

那麼什麼是優秀的可視化作品。我一直認爲最好的用戶體驗是深入淺出,所以,優秀的可視化作品 = 信息 + 故事 + 目標 + 視覺形式,因此,一件可視化作品是從數據 -> 交互 -> 視覺 -> 開發的一個過程。

所以優秀的數據可視化依賴優異的設計,並非僅僅選擇正確的圖表模板那麼簡單。全在於以一種更加有助於理解和引導的方式去表達信息,儘可能減輕用戶獲 取信息的成本。當然並非所有的圖表製作者都精於此道。所以我們看到的圖表表達中,各種讓人啼笑皆非的錯誤都有。

總結

定義合適的可視化圖形,可以說是最爲關鍵的。一般情況來看,線柱餅等基本圖形可以完成我們大部分的需求,這也是分析人員最常用的展現形式;但對於大數據場景或具體業務場景下就需要更加特殊的可視化。

歸納起來一名數據可視化工程師需要具備三個方面的能力,數據分析能力、交互視覺能力、研發能力。

不管你用什麼工具,別忘了你的目的是理解數據,這可是數據可視化工程師和軟件工程師的最大區別。

編輯推薦:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章