一個案例入門tableau——NBA球隊數(shù)據(jù)可視化實戰(zhàn)解析
前兩天在公眾號發(fā)布了一篇「NBA球隊數(shù)據(jù)可視化」的視頻案例,對于本賽季東西部30只球隊的得失分,勝負場次,勝率排名等進行了可視化展示,并支持實時交互。可點擊下方視頻查看。本文來分享一下視頻中可視化的實現(xiàn)過程。
通過本文學習,你能夠掌握從0到1使用tableau進行可視化的全流程。涉及的知識點包括:
認識工作界面 在工作表中使用度量名稱和度量值 使用篩選器,標記卡 自定義散點圖的形狀,添加參考線 制作條形圖,表格 自定義計算字段,使用參數(shù) 制作儀表板布局 簡單的交互實現(xiàn)
后臺回復「NBA」可以獲取本文的源數(shù)據(jù),tableau工作簿及pdf文件。溫馨提示:本文篇幅較長,操作較多,建議收藏,集中學習。
本文目錄
1 Tableau 簡介
2 可視化過程——框架分析
3 可視化過程——球隊攻防水平象限圖
3.1 數(shù)據(jù)導入
3.2 工作界面介紹
3.3 制作散點圖
4 可視化過程——球隊勝負場次條形圖
4.1 圖形分析
4.2 使用度量名稱和度量值
4.3 細節(jié)調(diào)整
5 可視化過程——球隊勝率表格
5.1 圖形分析
5.2 實現(xiàn)過程
5.3 其他調(diào)整
6 可視化過程——使用參數(shù)實現(xiàn)勝率篩選
6.1 創(chuàng)建參數(shù)
6.2 創(chuàng)建計算字段
6.3 另一個參數(shù)使用實例
7 可視化過程——儀表板優(yōu)化
7.1 創(chuàng)建儀表板
7.2 儀表板設置
7.3 儀表板篩選
8 小結(jié)
1 Tableau 簡介
本次可視化實現(xiàn)的工具是tableau,為了使沒有接觸過的讀者也能通過本次案例入門,我會對tableau中的一些概念做必要的說明,并提供原始工作簿和數(shù)據(jù)文件。后臺回復“NBA”即可獲取。如果你已經(jīng)是tableau用戶,可以重點關注操作細節(jié),相信也能有所收獲。
tableau的安裝本篇不做詳述,官網(wǎng)有14天試用的版本,直接下載安裝即可使用。

tableau官網(wǎng)中提到:
?Tableau 是能夠幫助大家查看并理解數(shù)據(jù)的商業(yè)智能軟件,是人人可用的數(shù)據(jù)化分析工具。
?
使用熟練了之后,確實能感覺到它的方便快捷。只需要做簡單的拖拽就能做出漂亮的圖表,它的主要優(yōu)點如下。
2 可視化過程——框架分析
本文將按照自上而下的結(jié)構(gòu)展開,先介紹總體框架,再指出關鍵要點,分析實現(xiàn)過程,最后列出一些注意事項。

如上圖所示,最終結(jié)果是以一個「儀表板」呈現(xiàn)的,視頻圖片左下角“球隊數(shù)據(jù)匯總”就是儀表板的名稱。儀表板包含3個「工作表」,見圖中的part1,2,3。
?儀表板是tableau中用于“組合”原始視圖的有效工具,將工作表拖到儀表板上,即可將現(xiàn)有視圖添加到儀表板。儀表板中可以對原始視圖進行布局,可以插入文字,圖片,鏈接等,還可以配置一些動態(tài)交互。有點類似于PPT。
工作表是tableau中實現(xiàn)可視化的基本單元,每個工作表包含了各種操作功能,最終實現(xiàn)單個視圖,可以是圖,可以是表。類似于excel的一個sheet。
?
在視頻最后我們演示了兩個交互。第一是part1中點擊球隊logo實現(xiàn)part2和part3的聯(lián)動,如箭頭1所示。這是通過儀表板的「交互篩選」實現(xiàn)的。第二是滑動改變勝率同樣實現(xiàn)三個part聯(lián)動,這是通過「參數(shù)」實現(xiàn)的。接下來我們分別對每個part進行分析并給出相應工作表的制作過程。
3 可視化過程——球隊攻防水平象限圖
3.1 數(shù)據(jù)導入
在開始可視化之前,需要將數(shù)據(jù)導入tableau,步驟如下圖所示。數(shù)據(jù)是從新浪體育直接復制下來的。

?tableau支持excel,文本,數(shù)據(jù)庫等多種源數(shù)據(jù)格式,只需要選擇相應的連接,按照提示即可連接到相應的數(shù)據(jù)源。
?
導入后效果如下圖所示:
之后點擊“工作表1”,就進入到了下圖所示的工作表界面。

3.2 工作界面介紹
簡單介紹一下tableau的工作表界面。
最左側(cè)「數(shù)據(jù)」欄下面有「維度」和「度量」兩個區(qū)域。維度是原始數(shù)據(jù)的類別型字段,字段前有abc標識,度量是原始數(shù)據(jù)中數(shù)值型的字段,字段前有#標識。tableau會為我們自動生成一個維度:「度量名稱」,是對所有維度的統(tǒng)一表示,兩個度量:「度量值」,「記錄數(shù)」。度量值是對所有度量的統(tǒng)一表示。記錄數(shù)是數(shù)據(jù)的行數(shù)。他們在必要情況下很有用。度量和維度之間可以進行相互轉(zhuǎn)換,只需要拖拽到相應的區(qū)域即可??梢允褂煤瘮?shù)和原始度量計算生成新的度量。箭頭所指的「分析」欄有一些添加參考線,趨勢線等的功能。
往右邊是工作表的核心部分。首先是「頁面」,「篩選器」,「標記」三個卡片,這是tableau實現(xiàn)可視化效果的重點功能。「頁面」一般用于動畫的制作,「篩選器」用于按條件選取數(shù)據(jù)子集,「標記」卡中有顏色,大小,標簽,詳細信息等選項,可以組合實現(xiàn)各種格式化效果。其次是「行列」區(qū)域和「效果預覽」區(qū)域。
在他們的頂部是快捷工具欄,這里有一些常用的功能按鈕。
tableau主要的操作就是將「度量」和「維度」拖拽到「行列」和「標記卡」,「篩選器」,「頁面」上,再做一些其他必要的設置。
3.3 制作散點圖
我們要完成的目標象限圖,本質(zhì)上就是一個各個球隊得分與失分的「散點圖」。操作步驟為:將「得分」拖到「列」上,將「失分」拖到 「行」上。步驟和效果如下面圖片所示。可以看到基本框架已經(jīng)出現(xiàn)了。

為了進一步美化結(jié)果,接下來我們做以下工作:
更改橫縱坐標軸范圍 添加得分失分平均值的參考線,即象限劃分的虛線 將球隊logo導入,替換默認的形狀
更改坐標軸范圍
可以看到我們現(xiàn)有的結(jié)果,橫縱坐標都是從0開始的,所有散點都集中到了一堆兒,造成了大面積的空白。因此我們根據(jù)數(shù)據(jù)的范圍將橫縱坐標范圍稍作更改,從而使各散點的差異更明顯。橫縱坐標的范圍我都設置為了102到122。操作方法為在相應軸上右鍵-->編輯軸-->選擇固定范圍并填入數(shù)值,如下圖,縱軸的設置類似。

得到的效果如下:
注意到右邊有一部分空白區(qū)域,這是由于視圖適配不夠好所致。我們可以點擊上圖中箭頭的位置,把「標準」改為「整個視圖」,即可消除空白,整體更協(xié)調(diào)。
添加參考線
同樣是在坐標軸上右鍵,選擇添加參考線,在彈出的對話框中可以更改參考線相應的顯示標簽和格式。如果不更改,則會保持默認效果,最后點擊確定。橫縱坐標軸的設置方式相同。

這里需要注意一下,設置格式的最下面有一行“為突出顯示或選定的數(shù)據(jù)點顯示重新計算的線”,默認是勾選的。如果勾選,由于tableau支持交互,當選中部分點時,就會對選中的點重新計算平均值,這樣參考線的位置就會發(fā)生變化,其實是不太合理的。在視頻后半部分我們有點擊某個球隊展示相應數(shù)據(jù)的功能,需要保持參考線不變。因此這里我們應該把勾選去掉。這里也有另一種方式來實現(xiàn)平均值線的固定。后面我們再來補充。
自定義球隊logo
為了使可視化的效果更好,我們可以對默認的形狀進行更改。tableau內(nèi)置是有很多形狀的,但沒有我們這里想要的球隊logo。我們需要自己準備30個球隊的圖片,并導入tableau內(nèi)部。圖片的準備我是直接從新浪體育的網(wǎng)站上復制下來保存的,雖然麻煩了點,但是整體風格一致,大小一致。以mac為例,說明一下導入的位置,windows的設置可以自行百度。
在「應用程序」文件夾內(nèi)找到tableau的安裝程序,右鍵顯示包內(nèi)容,找到Contents-->install-->defaults-->Shapes這里就是tableau自帶形狀的位置,每一個文件夾是一組icon。我們將自己的球隊形狀命名為team,放在這個文件夾下,之后就可以在tableau中使用自定義的球隊logo了。這里如果不生效,可能需要重啟一下tableau。
接下來我們將默認形狀更改為球隊logo。
點擊標記卡中的形狀可以對其進行編輯,選擇我們自定義的teams形狀,之后對于每一個球隊,要手動選擇相應的球隊logo,這一步稍微要費勁一些。每個logo的字母基本是球隊所在城市的簡寫,如果你??碞BA的話,一定不會陌生。最終實現(xiàn)的效果如下。

可以看到默認的形狀很小。在箭頭所示的位置點擊大小,可以將logo的大小調(diào)整到合適的位置,這樣能看得更清楚一些。
最后我們對工作表做一些“裝飾”。
雙擊“工作表1”的位置,可以對標題進行自定義,這樣提升圖形的可讀性(標題的設置,這里先略過,后面有更多詳細說明);點擊右側(cè)的箭頭位置,可以將圖例隱藏,因為logo本身已經(jīng)包含了球隊信息,而且logo旁邊還有文字對球隊進行說明,隱藏之后,也可以給主體圖形更大的空間。
至此,我們第一部分的象限圖就基本完成了。(其實還有一個勝率篩選的交互,我們在后面再說)
4 可視化過程——球隊勝負場次條形圖
4.1 圖形分析
直觀理解,這里我們要展現(xiàn)的數(shù)據(jù)為:每個球隊的勝場數(shù)和負場數(shù)條形圖,條形上顯示具體數(shù)值。且勝場和負場用不同的顏色表示。如果直接將球隊拖至列上,「勝」和「負」拖至行上,出來的勝負是兩個軸,如下圖所示。
這樣顯然不能達到目標。應該想辦法把兩個指標放在一個軸上。此時我們就需要用到「度量名稱」和「度量值」了。
4.2 使用度量名稱和度量值
前面提到了這兩個概念。在這個例子中,我們需要勝和負兩個度量值,因此我們先清空之前的結(jié)果。嘗試將球隊拖至列上,度量值拖至行上,如下圖所示。
發(fā)現(xiàn)所有的指標都被混在一個柱子里沒有分開。首先我們將多余的指標剔除掉。操作方法為,將度量名稱拖至篩選器,然后編輯篩選器,只勾選勝,負兩個指標。
結(jié)果如下圖所示。
由于我們對度量名稱進行了篩選,這個時候的度量名稱就只代表了勝和負兩個維度。因此想把一個柱子拆成兩個柱子,只需要把度量名稱也拖到列上即可。這樣就可以表示每個球隊的勝負場數(shù)了。

同時,我們把度量名稱拖到顏色上,tableau就會自動給每個度量指定不同的顏色。如上圖所示??梢钥吹?,「顏色」的作用就是用來區(qū)分同一個變量的不同取值。
4.3 細節(jié)調(diào)整
我們還需要做:
柱子上顯示勝負場數(shù) 顏色調(diào)整 插入標題
顯示勝負場數(shù)
把「度量值」拖到「標簽」上,再調(diào)整一下格式把小數(shù)點去掉即可,具體步驟如下圖。標簽的作用就是顯示具體的文本值。
顏色調(diào)整
在圖例部分,可以編輯顏色卡,根據(jù)已有的調(diào)色板,分別對圖例進行設置,調(diào)整成喜歡的顏色。
插入標題
雙擊標題部分,會出現(xiàn)“編輯標題”對話框,之前我們只是手動編輯了標題。這里我們使用“插入”功能,將「球隊」插入,這樣做的效果是,如果對球隊做了篩選,相應插入部分的「值」會發(fā)生變化。在視頻里我們點擊球隊logo的時候,能夠體現(xiàn)這一點。這樣使得交互更加友好,默認的時候,會顯示為「全部」。此外,還可以對插入的部分設置顏色,添加下劃線,并設置居中對齊,增強一定的視覺效果。
5 可視化過程——球隊勝率表格
5.1 圖形分析
要實現(xiàn)的是一個表格,直接展示每個球隊的場次,勝率和排名。還需要分別用顏色表示各自的漸變情況。
5.2 實現(xiàn)過程
新建一個新的工作表,將「球隊」拖至行上,由于這里需要在列上同時顯示三個指標,結(jié)合前面的學習,我們需要使用度量名稱。因此將度量名稱放到篩選器里,選出需要的三個變量。如下圖。然后把度量名稱拖到列上。

但此時表格里會顯示“無度量值”。我們還需要把“度量值”拖到文本上。這個時候可以正常顯示了。如果想要用顏色深淺表示數(shù)據(jù),還需要把標記卡的自動改為“方形”,并把度量值拖到顏色上。如下圖所示。

此時,三個指標是用顏色表示了,不過是同一種顏色。想要實現(xiàn)每個指標一種顏色,需要把顏色圖例拆開,然后單獨設置。如下圖。

分別把場次改為綠,勝率改為紅,排名改為藍(默認即可)。效果如下圖。

5.3 其他調(diào)整
還需要將場次和排名調(diào)整為整數(shù),勝率調(diào)整為百分數(shù),交換一下排名和勝率的位置,再按照勝率進行排序,最后添加一下標題。數(shù)字格式的調(diào)整和前面勝場的調(diào)整一樣,只需要在度量值選項卡上點擊相應的“設置格式”即可修改。每個指標需要分別設置。
位置交換只需要通過拖動,交換度量值的位置即可。排序的實現(xiàn)通過點擊“排名”右上角的排序按鈕完成,操作如下圖所示。
關于標題的添加,我們采用和上一節(jié)同樣的做法,插入球隊名稱,在加上固定文字,這樣在做交互式篩選的時候,標題就會隨著球隊發(fā)生變化。這里不做詳述。
6 可視化過程——使用參數(shù)實現(xiàn)勝率篩選
以上我們已經(jīng)完成了主體圖表的制作。在進入儀表盤的優(yōu)化之前,我們來看一下tableau中「參數(shù)」的使用。
?參數(shù)是tableau用來實現(xiàn)交互的重要工具。類似于編程語言中的參數(shù),tableau中的參數(shù)也是用來占一個位置,當使用時傳入相應的值,且隨著傳入值的變化,參數(shù)能實現(xiàn)不同的效果。
?
tableau中的參數(shù),需要先創(chuàng)建,再使用。且參數(shù)通常需要借助于一個基于參數(shù)的計算字段來使用。下面我們用兩個實例說明參數(shù)的使用。一是通過勝率篩選球隊,二是通過參數(shù)固定象限圖中的參考線。通過這兩個例子,大家應該能對參數(shù)有一個初步的認識了。
6.1 創(chuàng)建參數(shù)
在空白處右鍵或者點擊維度右邊的小三角,點擊“創(chuàng)建參數(shù)”,就可以編輯一個新的參數(shù)。在彈出的對話框中,輸入?yún)?shù)的名字為“最低勝率”,數(shù)據(jù)類型為“浮點”,當前值為“1”,顯示格式設置為百分數(shù)。允許的值選擇“范圍”,并設置最大值,最小值和步長。然后點擊確定,如下圖所示。
這樣我們創(chuàng)建了一個表示“最低勝率”的百分數(shù),范圍是0~1,步長為0.05。之后使用它的時候,能夠交互式地控制它的取值,這是用它進行勝率的控制基礎。創(chuàng)建好參數(shù)之后,會出現(xiàn)一個和「維度」,「度量」并列的「參數(shù)」區(qū)域,默認是沒有的。
6.2 創(chuàng)建計算字段
前面提到,參數(shù)的使用需要依賴于計算字段。計算字段的創(chuàng)建和參數(shù)一樣,也是點擊度量旁邊的三角或者空白處。輸入名稱為「勝率篩選」,表達式為[勝率]>=[最低勝率],注意這里的勝率是黃色且?guī)в蟹嚼ㄌ枺褪嵌攘坷锏?strong style="color: rgb(53, 148, 247);">「勝率」字段,可以直接把度量里的勝率拖到計算字段的編輯框中。而最低勝率是藍色的也帶有方括號,它就是我們剛剛創(chuàng)建好的參數(shù)。編輯框左下角有“計算有效”的提示,說明我們的表達式通過了初步校驗,如下圖所示。

可以理解,這個計算字段的結(jié)果是一個布爾值,它的取值為真或假。點擊確定后,“勝率篩選”這個計算字段就創(chuàng)建好了,且默認歸到了維度區(qū)域。這樣,我們就可以使用它進行勝率篩選了。以我們前面創(chuàng)建的場次和勝率工作表為例,操作步驟為,首先在“最低勝率”參數(shù)上右鍵,選擇顯示參數(shù)控件。在工作表的右側(cè),圖例下方會出現(xiàn)一個帶有滑桿的參數(shù)框,我們滑動滑桿將初始的100%調(diào)整為0%。如下圖所示。

然后將“勝率篩選”字段拖至篩選器,并勾選“真”。如果前面不更改為0%,這里的值只有“偽”,如果更改為50%,則會有“真”和“偽”。我們只關心為“真”的,即勝率不小于參數(shù)值的結(jié)果,因此勾選“真”。點擊確定。這個時候,我們通過篩選器和計算字段,將參數(shù)的作用發(fā)揮出來了:如果滑動滑桿改變參數(shù)的值,工作表顯示的結(jié)果就會有不同。因為我們只保留了勝率篩選=真的記錄。
類似的,可以在另外兩個工作表中做同樣的勝率篩選的設置。之所以在每個工作表都設置,是為了后續(xù)儀表板的制作。
6.3 另一個參數(shù)使用實例
和編程語言中的參數(shù)類似,在使用時,是可以給參數(shù)設置默認值的。我們使用參數(shù)默認值來實現(xiàn)象限圖中橫縱坐標的平均值,從而固定象限的參考線。
以平均得分為例,操作步驟如下:首先復制一下象限圖,專門用于此次演示。在工作表標簽上右鍵,選擇復制,即可復制一份一模一樣的象限圖工作表,移除我們之前創(chuàng)建好的參考線,點擊線條,即可出現(xiàn)“移除”選項。然后創(chuàng)建計算字段“平均得分”,輸入表達式{AVG([得分])}。注意外面有個大括號,這是tableau中的「詳細級別表達式」,這里可以簡單理解為,求出所有得分的平均值,且始終是一個值,不會隨著維度或篩選的變化而變化。

接下來創(chuàng)建一個參數(shù),也叫“平均得分”,注意在“工作簿打開時的值”處,可以選擇我們創(chuàng)建好的平均得分的計算字段。如果沒有提前創(chuàng)建,這里是不能選擇的。設置好格式,點擊確定之后,就得到了平均得分的參考線。效果和之前是一樣的,且也不會隨著選擇的球隊而發(fā)生變化。平均失分也按照同樣的方法進行設置。
這個案例給我們的啟發(fā)主要是默認值的設置必須依賴于計算字段。

7 可視化過程——儀表板優(yōu)化
7.1 創(chuàng)建儀表板
創(chuàng)建儀表板之前,我們先把上面創(chuàng)建的幾個工作表分別命名為:「攻防象限」,「勝負場次」和「場次勝率」。在工作表sheet上右鍵,選擇重命名即可。如下圖所示。

創(chuàng)建儀表板的方式,上圖中標出了兩種(方框框起來的按鈕)。可以任選一種創(chuàng)建一個新的儀表板。
7.2 儀表板設置
首先可以設置儀表板的范圍為自動,這樣可以消除一些無法編輯的空白區(qū)域。
可以通過拖動的方式將我們命名好的工作表加入儀表板。上面放置“攻防象限”,下面左側(cè)放置“勝負場次”,下面右側(cè)放置“場次勝率”。默認的放置是上下平分,左右平分的,可以通過鼠標調(diào)整工作表的邊界,布局成美觀合理的樣子,比如先把“場次勝率”工作表左右間距縮小,看起來更加協(xié)調(diào)。效果如下圖所示。

上圖中,右側(cè)框起來的部分是“工作表”帶過來的,但略顯多余,不僅占據(jù)了主要圖形的空間,而且信息量有所重疊,最有用的就是控制勝率的參數(shù)控件和勝負圖例。把鼠標放在相應的卡片上,點擊左側(cè)的×,就可以從儀表板中移除無用的控件。點擊下拉三角可以把留下的卡片改為浮動。如下圖所示。

改為浮動的好處是可以“疊加”在現(xiàn)有工作表的表面,拖動到任意的位置,并通過調(diào)整卡片的形狀使整體更加協(xié)調(diào),比如我們可以放置在中間較為空白的地方。如下圖。

7.3 儀表板篩選
最后一個關鍵步驟,我們來實現(xiàn)象限圖對條形圖和表格的控制。方法很簡單。只需要在象限圖的左側(cè),點擊出現(xiàn)的三角,選擇“用作篩選器”,就可以將象限圖設置為篩選器的源工作表,另外兩個工作表設置為目標工作表。

實現(xiàn)的效果就是,點擊象限圖中的任何一個球隊圖表,下面的兩個工作表就會只顯示這個被選中球隊的數(shù)據(jù),標題也會發(fā)生變化。用鼠標框選兩個球隊,就會顯示兩個球隊的數(shù)據(jù)。如下圖所示。再點擊空白處,就可以還原。


最后,在視頻里,我們在每個象限的角上,簡寫了相應的結(jié)論,這個是通過給儀表板添加文本框?qū)崿F(xiàn)的。文本框的大小和字體都可以自定義,并且設置為浮動,就可以任意擺放文本框的位置了。

至此,所有的工作就完成了??梢越o儀表板起一個有意義的名字,然后點擊工具欄的演示按鈕進入演示模式,以隱藏掉左邊欄不需要的部分,就可以給觀眾展示了。如下圖所示。

最終效果如下圖。
8 小結(jié)
本文我們使用tableau實現(xiàn)了一個完整的數(shù)據(jù)可視化案例,不僅能夠得到一些簡單的球隊攻防的結(jié)論,還能實現(xiàn)簡單的數(shù)據(jù)交互。
整個案例涉及到tableau的基本知識有:工作界面簡介,度量名稱和度量值,篩選器,標記卡(顏色,標簽)的使用,自定義形狀,添加參考線,參數(shù),計算字段,儀表板布局等。對于未使用過tableau的人來講,通過此案例的全部操作,能夠理解它的整體使用邏輯,并打開tableau可視化的大門。
當然,本文提及的部分只是冰山一角,想要提高tableau使用的水平,還是需要更多的練習探索。不僅需要學習具體的操作流程,還要思考圖表的呈現(xiàn)形式,交互,觀眾體驗等,做到了這些才能做出完美的可視化作品。本文實操較多,可以在后臺回復“NBA”可以獲取本文的源數(shù)據(jù),工作簿以及pdf文檔,便于練習和保存。

推薦閱讀
實例講解利用python進行數(shù)據(jù)獲取與數(shù)據(jù)預處理
