一張圖表是如何產生的

4 評論 3370 瀏覽 14 收藏 16 分鐘

編輯導語:一張圖表的產生背后有其結構和邏輯,本篇文章作者介紹了圖表的產生過程,講述了一個圖表的基本結構、數據的相關內容以及可視化過程中的步驟等,感興趣的一起來學習一下,希望對你有幫助。

我在之前的文章提到過,今年3月份我轉行到低代碼產品領域,轉行后負責的第一個模塊就是圖表。

幾乎所有的圖表產品都會包括兩大塊:數據源和可視化,而我負責的是數據可視化的部分。

在我之前的認識里,數據可視化其實就是各種圖表,了解清楚每個圖表的應用場景就夠了。比如你應該知道柱狀圖、折線圖和環圖之間的區別,這就夠了。

但負責了低代碼產品的圖表模塊之后,我需要讓用戶可以通過拖拽的方式自己搭建出不同類型的圖表,這要求產品經理從原理上了解一個圖表是如何產生的。

這種從底層邏輯到業務應用的推演非常有意思,當然對于我入門低代碼的圖表模塊也非常重要。

想要寫出來,也是想跟大家分享如何從底層去認識一個我們之前可能以為自己比較了解的產品。

01

一個圖表的結構通常如下圖所示:包括數據源和數據可視化兩部分。

數據源其實就是通過各種方式得到一張基礎表,這個基礎表代表了我們記錄業務的所有明細數據。典型的基礎表格式是 1+N,第一行是記錄信息所需要的所有字段,第 2-N 行代表的是每一個實體的具體信息。

舉個例子,我可以用下面這張表記錄一個學校高一年級所有學生的基本信息。

從第二行開始,我就要錄入每一個學生的信息,假設現在有 5 名學生,則這個基礎表的信息可以展示為,而這個對于可視化系統來說,就是一個標準的數據源。

順便說一句,雖然本文不聊數據源,但數據結構的確定是可視化的重要前提,非常非常重要。當我們要去建立一個業務的數據模型時,我們一定要想清楚到底有哪些字段是需要添加的,每個字段的類型是什么。

字段可以多,但一定不能缺,如果我們一開始沒有星座這個字段,忽然有一天你突發奇想,覺得我們可以看看學校里不同星座的學生的占比,那意味著底層的數據模型就要變動,這時候所有用到這個模型的圖表,可能都會受到影響。

回到正題,「可視化」就是要通過更直觀的方式呈現我們想要看到的結論。

它滿足兩點要求:首先必須要直觀,為了這一點,我們應該發明了很多不同的圖表類型,后面會講到;其次,它必須要支撐我們想看的結論,不帶任何目標的可視化,都是無用功。

我將可視化部分總結為三個具有前后順序的動作:數據分組、數據計算和可視化。這也是本文的重點,我將詳細說明。

02

數據分組是確定從什么視角看什么數據,這與我們想要分析的結論息息相關。事實上,當我們準確描述我們想要看的結論時,我們就已經在無形中確定了我們的數據分組。

比如,我們想要看不同班級學生的中考分數,這時候「不同班級」就是我們的切分視角,「班級」這個字段,就成了我們的維度。

確定分組之后,我們就可以按照班級這個字段的不同值,將基礎表分為如下幾張表:

在上述結論中,隱含的另一個重要概念是指標,我們切分不同的班級之后,想看的不是年齡,也不是星座,而是中考分數。指標,就是我們想要看的數據。

確定了維度和指標,真正的數據分組才算完整,他們應該是下面這三組表。

03

數據計算,就是給指標附上一個具有統計意義的值。這個值是從指標字段的明細數據中計算得來的,也可以說是聚合得來的,所以我們一般叫做聚合函數。

例如對于 2 班的兩個學生來說,中考分數分別為 560 和 572,如果我想看大家的平均分,那就是對這兩個明細數據求平均,如果我想看每個班學生的最高分呢,用的就是求最大值函數。

相同的明細數據經過不同的聚合函數作用后,會得到不同的結果,因而聚合函數直接反映了我們想要統計的目標。

如果我們想要評估的是不同班級學生的底子水平如何呢?那可能平均分是一個不錯的聚合函數。但如果某些班級有中考加分的學生,而這里的分數是正常文化課的分數,那我們看平均分可能就不客觀了,這之后中位數應該是一個更好的選擇。

無論如何,隨著我們想要分析的結論和明細數據的質量不同,我們選擇不同的聚合函數,這個過程,就是數據計算。

經過數據計算之后,維度和指標就都有了統計含義,以平均分為例。

事實上,實際情況可能比這個復雜得多。實際場景中的維度可能不止一個,想要看的指標也不止一個,或者指標不是數字,這時候該怎么辦呢?

04

聊聊維度嵌套和多指標。

什么時候我們會有維度嵌套呢,就是某一個單獨的字段無法滿足我們切分數據的需求。我們對上述的例子擴充一些樣本來解釋這個問題。

如果我想看不同班級中不同年齡學生的中考分數,那「不同班級中不同年齡」這個分組標準可以用一個字段分出來么?顯然是不行的。

此時我們分組的角度會變成先看「班級」,再看「年齡」,這就是維度嵌套的情況,它是由兩個字段合起來決定一個分組的。這時候的分組就會變成

  • 1 班-15 歲-平均分;
  • 1 班-16 歲-平均分;
  • 1 班-17 歲-平均分;
  • 2 班 -16 歲-平均分;
  • 2 班-17 歲 -平均分;
  • 3 班-16 歲 -平均分。

很明顯,維度嵌套時,分組就變多了。理論上,維度可以一直嵌套下去,比如我在上述每一個分組的基礎上,再按照星座去進一步細分組別。

當然,這只是邏輯上的可行性,是否需要這么分,完全要看「要得到目標結論是否需要這么分」,還是那句話,可視化建立在業務分析目標上的。

除了維度嵌套,還有多指標的情況。如果我想要看的是不同班級學生的年齡數據和中考分數數據,這時候「年齡」就不再是維度,而變成了指標。

多指標不存在嵌套的情況,每個指標都是獨立計算的,所以相較于多維度來說,多指標的情況應該更簡單一些。

05

在我小學的時候,其實就已經接觸過圖表了,那時候所有的指標都默認是數字,所以他們可以做很多聚合運算。

但是當我做低代碼產品的時候,我發現任何具有統計意義的字段都可以作為指標。具有統計意義和數字類型不一定是相等的:金額、年齡、分數,這些數字類型的字段當然具有統計意義,但是你想過沒有,文本類型的字段有沒有統計意義呢?

還是上面那個表,如果 2 班的文藝委員,想了解自己班上一共有多少個不同星座的學生,能不能統計呢?

可以。那不同的星座該怎么統計呢?這就要用到去重計數這個聚合函數。

所以,非數字類型字段作為指標時,如果具有統計意義,往往會用到計數和去重計數這兩個聚合函數。

你只需要記住,非數字類型的字段也是可以作為指標的。但并不是所有的都可以,如果某個字段存儲的是一張照片,那確實就沒啥統計的必要了。

有人問?難道我不能統計一堆照片的平均像素大小么?可以的,但這時候,照片和照片像素應該是兩個字段,你要統計的,其實是照片像素這個字段,本質上還是一個數字類型的字段。

06

講到這里總結一下,基礎表在可視化中需要完成兩個基本的步驟,分組和計算。分組主要看維度和指標,計算主要看聚合函數。當然維度可以有多個,指標可以有多個。

接下來便是可視化的核心步驟,從數據到圖表的映射,更簡單一些,就是將表格承載的數據,變成可視化的圖表。

目前市面上主流 bi 產品支持的圖表類型非常多,常見的包括:透視表、指標卡、柱狀圖、條形圖、折線圖、面積圖、組合圖、餅圖、散點圖、雷達圖、漏斗圖、熱力圖、地圖、?;鶊D等等。

我們以常見的柱狀圖為例來說明數據到圖表的映射。

面對任何一種圖表,我們首先要想的是,維度和指標分別放在哪里,限制如何。

以柱狀圖為例,它的 x 軸一般作為維度,y 軸一般作為指標,且只有一個 x 軸和一個 y 軸,常見的用法如下:

這張圖我們看到的就是不同學校有多少人獲獎。

除此之外,還有第三個能夠承載信息的元素是顏色,顏色也可以承載信息,它既可以是維度,也可以是指標,就看怎么用,如下圖:

這種情況下,我的 y 軸就是三個指標字段共用了,用顏色這個元素來區分,但本質上,他們是被獨立觀察的三個指標。

我也可以用顏色承載維度,做維度的嵌套,看一個指標。

這時候,我們看的就是不同學校中不同狀態的學生的獲獎記錄數據。

需要注意的是,一張圖表中,顏色只能承載維度或者指標,不能同時兼任。

07

完成了數據到圖表的映射之后,一張基本的圖表就渲染出來了。當然我們還可以給它配置更多的信息,比如標題,比如每個柱子上的數據標簽,甚至用堆積柱狀圖看不同狀態學生的百分比。

但是萬變不離其宗,再豐富的展示樣式背后,其實都是從數據源→數據分組→數據計算→可視化這一套系統流程,我們在腦子里思考后手動繪制也好,我們通過無代碼的方式搭建出來也好,底層邏輯基本都是這一條鏈路。

掌握了底層邏輯,才能在處理不同場景下的應用問題時做到有條不紊。

08

說點題外話,當我剛剛接手圖表這個功能模塊的時候,有很多業務方提了各種需求過來,也有之前積壓的很多遺留需求。那時候我覺得,真的好難。

面對每一個單點的問題,雖然我能夠通過自己做產品的基本素養去理解問題并提出解決方案,但解決這個問題和解決下個問題之間,我并沒找到本質上的聯系。

用經濟學的話來說,我解決問題的邊際成本是沒有變的。

但是當我逐漸理解了一張圖表背后的底層邏輯之后,很多問題在我看來都是一個問題,我開始梳理清楚了不同需求之間的關系和脈絡。在這個時候我才逐漸覺得,這項新工作我應該是入門了。

我把這一切分享出來,也是希望大家,尤其是各位產品經理,在自己負責的領域內,努力找到你所能挖掘到的最深層次的通用邏輯。

#專欄作家#

大力哥呀,微信公眾號:大力哥,人人都是產品經理專欄作家。一個90后產品經理,已經寫了6年的公眾號,通過輸出獲得了許多意料外的成長。

本文原創發布于人人都是產品經理。未經許可,禁止轉載。

題圖來自Unsplash,基于CC0協議。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 寶,你為啥都不寫標題呀

    來自廣東 回復
  2. 掌握了底層邏輯,才能在處理不同場景下的應用問題時做到有條不紊,碼住了

    來自中國 回復
  3. wow看完真的學到了很多,簡直就是干貨滿滿,迫不及待給作者點贊!

    來自江西 回復
  4. 整篇文章邏輯結構真的好清晰??!寫得太棒了,碼住好好學習!

    來自江西 回復