使用 Tableau Prep 查找第二個日期
分析中的一項常見需求是確定第二個事件(例如客戶進行第二次購買並從而成為常客,或者駕駛員第二次交通違章時)的日期。查找第一個事件的日期很容易,它只是最小日期。查找第二個日期則較為複雜。
在這個由兩部分組成的教程中,我們將調整交通違章資料並回答以下問題:
每個駕駛員第一次和第二次違章相隔多長時間(以天數為單位)?
比較第一次和第二次違章的罰款金額。這些金額是否相關?
總體而言,哪個駕駛員支付的罰款最多?誰支付的最少?
有多少駕駛員有過多種類型的違章?
從未上過交通法規學習班的駕駛員的平均罰款金額是多少?
在第一個階段中,我們將使用 Tableau Prep 重構資料以進行分析。在第二個階段Tableau Desktop 中包含第二個日期的分析中,我們將轉而講述 Tableau Desktop 中的分析。
本教程的目標是在一個真實場景的內容中呈現各種概念並演練各個選項 — 而不是規定式地確定哪一個是最好的。最後,您應該會對資料結構對計算和分析的影響有更深的認識,並更加熟悉 Tableau Prep 的各項功能以及 Tableau Desktop 中的計算。
附註:為完成本教程中的工作,需要(安裝或透過瀏覽器使用)Tableau Prep Builder,並下載相關資料。對於第二部分,還需要安裝 Tableau Desktop。
資料集為 Traffic Violations.xlsx。建議將其儲存在 我的 Tableau Prep 存放庫 > Datasources 資料夾中。
若要在繼續本教程之前安裝 Tableau Prep Builder 和 Tableau Desktop,請參閱 Tableau Desktop 和 Tableau Prep 部署指南(連結在新視窗開啟)。否則,您可以下載 Tableau Prep(連結在新視窗開啟) 和 Tableau Desktop(連結在新視窗開啟) 免費試用版。
資料
對於此範例,我們將探討交通違章資料。每條違章為一列。將記錄駕駛員、日期、違章類型、駕駛員是否需要參加交通法規學習班以及罰款金額。
所需的資料結構
資料目前的構造方式是每條違章為一列。有多次違章的駕駛員將出現在多列中,並且無法輕鬆分辨哪條違章是他們的第一次或第二次違章。
為了調查屢屢違章的駕駛員,我們需要一個能夠分出第一次和第二次違章日期的資料集、與其中每條違章關聯的資訊,並且需要每一列為一個駕駛員。
重構資料
那麼如何使用 Tableau Prep 達到該目的?我們將分階段組建流程,首先抽取第一次違章日期,然後抽取第二次違章日期,接著根據需要調整最終資料。確保已下載了 Excel 檔案 (Traffic Violations.xlsx) 以便繼續操作。
第一次違章日期的初始彙總
首先,我們將連線到 Traffic Violations.xlsx 檔案。
開啟 Tableau Prep Builder。
從開始螢幕中,按一下「連線至資料」。
在「連線」窗格中,按一下「Microsoft Excel」。巡覽到 Traffic Violations.xlsx 的儲存位置,並按一下「開啟」。
「Infractions」(違章)工作表應會自動顯示在「流程」窗格中。
有關連線至資料的詳細資訊,請參閱連線至資料。
接著,我們需要標識每個駕駛員的第一次違章日期。我們將使用「彙總」步驟來執行此操作,同時建立一個包含「Driver ID」(駕駛員 ID)和「Minimum Infraction Date」(最早違章日期)的微型資料集。
在 Tableau Prep 中使用「彙總」步驟時,任何應定義列組成內容的欄位為「分組欄位」。(對我們來說,該欄位為「Driver ID」(駕駛員 ID)。)任何將彙總並顯示在分組欄位層級的欄位為「彙總欄位」。(對我們來說,該欄位為「Infraction Date」(違章日期)。)
在「流程」窗格中,選取「Infractions」(違章),按一下加號 圖示,並選取「彙總」。
將「Driver ID」(駕駛員 ID)拖到「分組欄位」放置區域。
將「Infraction Date」(違章日期)拖到「彙總欄位」區域。預設彙總為 CNT(計數)。按一下「CNT」,並將彙總變更為「Minimum」。
這將標識最小(最早)日期,即每個駕駛員的第一次違章日期。
有關彙總的詳細資訊,請參閱清理和調整資料。
在「流程」窗格中,選取「Aggregate 1」(彙總 1),按一下加號 圖示,並選取「清理步驟」,以便我們能夠清理彙總的輸出。
在「設定檔」窗格中,按兩下欄位名「Infraction Date」(違章日期),並將其變更為「1st Infraction Date」(第一次違章日期)。
在此階段,流程和設定檔窗格應如下所示:
從此「清理」步驟的「設定檔」窗格中,我們可以看到資料現在包含 39 列,並且只包含 2 個欄位。未用於分組或彙總的任何欄位已丟失。但我們想要能夠保留一些原始資訊。我們可將這些欄位新增到分組或彙總中(但這樣做會變更詳細資料層級或者需要對欄位進行彙總),或者將此微型資料集聯結回原始資料集(本質上是為「1st Infraction Date」(第一次違章日期)向原始資料中新增一個新列)。讓我們執行聯結。
在「流程」窗格中,選取「Infractions」(違章),按一下加號 圖示,並選取「清理步驟」。
請確保直接將游標暫留在「違章」步驟上,而不是暫留在該步驟和「彙總」步驟之間的行上。若新的「清理」步驟插入在兩個步驟之間,而不是建立分支,請使用工具列中的「復原」箭頭,然後重試。功能表應顯示「新增」,而不是「插入」。
這會將流程與所有原始資料分開。我們會將彙總的結果聯結到完整資料的這一副本。透過依據「Driver ID」(駕駛員 ID)進行聯結,我們會將彙總中的最小日期新增到原始資料中。
選取步驟「清理 2」,並將其拖到步驟「清理 1」上,放在「聯結」上。
預設聯結設定應該是正確的:基於「Driver ID = Driver ID」的內部聯結。
有關聯結的詳情,請參閱聯結資料。
由於在聯結過程中某些欄位可能會重複,例如聯結子句中的欄位,因此在執行聯結之後清理無關的欄位通常是個好主意。
在「流程」窗格中,選取「Join 1」(聯結 1),按一下加號 圖示,並選取「清理步驟」。
在「設定檔」窗格中,右鍵按一下或按住 Ctrl 並按一下 (MacOS)「Driver ID-1」(駕駛員 ID-1)卡,然後選取「移除」。
若要變更欄位順序,請將「1st Infraction Date」(第一次違章日期)卡拖到「Driver ID」(駕駛員 ID)和「Infraction Date」(違章日期)之間您看到黑色行出現的位置。
在此階段,流程應如下所示:
查看下面的資料網格,我們可以看到新的合併資料集。我們有了新增到資料集中每一列的每個駕駛員的最小(即第一次)違章日期。
第二次違章日期的第二個彙總
我們還需要確定第二次違章日期。為此,我們需要篩選出違章日期等於最小日期的任何列 — 從而移除第一個日期。我們隨後可以使用另一個彙總步驟獲取剩餘日期的最小值,剩下的就是第一次違章日期,為了清楚起見,我們將重命名該日期。
附註:由於我們稍後在流程中將需要使用「清理 3」中目前狀態的資料,所以我們將新增另一個「清理」步驟,以取得第二次違章日期。這樣,我們稍後就能夠使用「清理 3」中目前狀態的資料。
在「流程」窗格中,選取「Clean 3」(清理 3),按一下加號 圖示,並選取「清理步驟」。
在「設定檔」窗格中的工具列上,選取「篩選值」。建立一個篩選器
[Infraction Date] != [1st Infraction Date]
。移除欄位「1st Infraction Date」(第一次違章日期)。
在「流程」窗格中,選取「Clean 4」(清理 4),按一下加號 圖示,並選取「彙總」。
將「Driver ID」(駕駛員 ID)拖到「分組欄位」放置區域。將「Infraction Date」(違章日期)拖到「彙總欄位」區域,並將彙總變更為「Minimum」。
在「流程」窗格中,選取「Aggregate 2」(彙總 2),按一下加號 圖示,並選取「清理步驟」。將「Infraction Date」(違章日期)重命名為「2nd Infraction Date」(第二次違章日期)。
在此階段,流程應如下所示:
我們現在為每個駕駛員標識了第二次違章日期。為了獲取與每次違章關聯的所有其他資訊(類型、罰款、交通法規學習班),我們需要再次將此項聯結回整個資料集。
選取「清理 5」,並將其拖到步驟「清理 3」,放在「聯結」上。
同樣,預設聯結設定應該是正確的:基於「Driver ID = Driver ID」的內部聯結。
在「流程」窗格中,選取「Join 2」(聯結 2),按一下加號 圖示,並選取「清理步驟」。刪除欄位「Driver ID-1」(駕駛員 ID-1)和「1st Infraction Date」(第一次違章日期),因為不再需要這些欄位。
在此階段,流程應如下所示:
為第一次和第二次違章建立完整資料集
在執行任何進一步操作之前,讓我們回顧一下,想一想我們已有的所有內容以及要如何將它們結合在一起。我們期望的最終狀態是一個像這樣的資料集:包含一個「Driver ID」(駕駛員 ID)欄,然後包含日期、類型、交通法規學習班欄,以及第一次和第二次違章的罰款金額。
我們怎樣從這裡實現該目標?
在步驟「Clean 3」(清理 3)中,我們有完整的資料集,其中有一列重複顯示每個駕駛員的第一次違章日期。
我們想要清除不是第一次違章的駕駛員的所有列,同時組建一個隻包含第一次違章的資料集。也就是說,我們只想保留「第一次違章日期」與「違章日期」相等時給定駕駛員的資訊。篩選為只保留第一次違章的列之後,我們可以移除「Infraction Date」(篩選日期)欄位,並整理欄位名稱。
同樣,在進行第二次彙總和聯結之後,我們有了完整的資料集,其中有一清單示第二次違章日期。
我們可以執行類似的篩選器「2nd Infraction Date = Infraction Date」以僅保留每個駕駛員的第二次違章的資訊列。同樣,我們也可以移除現在多餘的「Infraction Date」(違章日期)並整理欄位名稱。
我們將從第一個違章資料集開始。
在「流程」窗格中,選取「Clean 3」(清理 3),按一下加號 圖示,並選取「清理步驟」。
如上面的步驟 10 中一樣,我們需要為新的清理步驟新增分支,而不是將其插入清理 3 和清理 4 之間。
在這個新的「清理」步驟處於選定狀態的情況下,在「設定檔」窗格的工具列中按一下「篩選值」。建立一個篩選器
[1st Infraction Date] = [Infraction Date]
。移除欄位「Infraction Date」(違章日期)。
將「Infraction Type」(違章類型)、「Traffic School」(交通法規學習班)和「Fine Amount」(罰款金額)欄位重命名為以「1st」開頭。
在「流程」窗格中的步驟下按兩下名稱「Clean 7」(清理 7),並將其重命名為「Robust 1st」。
現在為第二個違章資料集執行操作。
在「流程」窗格中,在最後一個聯結後選取「Clean 6」(清理 6)。
在工具列中按一下「篩選值」。建立一個篩選器
[2nd Infraction Date] = [Infraction Date]
。移除欄位「Infraction Date」(違章日期)。
將「Infraction Type」(違章類型)、「Traffic School」(交通法規學習班)和「Fine Amount」(罰款金額)欄位重命名為以「2nd」開頭。
在「流程」窗格中的步驟下按兩下名稱「Clean 6」(清理 7),並將其重命名為「Robust 2nd」。
在此階段,流程應如下所示:
建立完整資料集
既然我們有了這兩個包含各個駕駛員第一次和第二次違章完整資訊的兩個整齊資料集,我們就可以以「Driver ID」(駕駛員 ID)為基礎將它們重新聯結在一起,並最終產生我們期望的資料結構。
選取「Robust 2nd」,並將其拖到「Robust 1st」,放在「聯結」上。
預設聯結子句「Driver ID = Driver ID」應該是正確的。
由於我們不想刪除沒有第二次違章的駕駛員,我們需要將此聯結設為左聯結。在「聯結類型」區域中,按一下「Robust 1st」旁邊圖表的無陰影區域,將其轉換為「左」聯結。
在「流程」窗格中,選取「Join 3」(聯結 3),按一下加號 圖示,並選取「清理步驟」。移除重複欄位「Driver ID-1」(駕駛員 ID-1)。
資料處於期望狀態,因此我們可以建立輸出並繼續進行分析。
在「流程」窗格中,選取新新增的「Clean 6」(清理 6),按一下加號 圖示,並選取「新增輸出」。
在「輸出」窗格中,將「輸出類型」變更為 .csv,然後按一下「瀏覽」。為名稱輸入「Driver Infractions」(駕駛員違章),並在按一下「接受」儲存之前選取所需的位置。
按一下窗格底部的「執行流程」 按鈕產生輸出。在狀態對話方塊中按一下「完成」關閉對話方塊。
提示:有關輸出和執行流程的詳細資訊,請參閱儲存和共用工作。
最終流程應如下所示:
附註:您可以下載完成的流程檔案來檢查您的工作:Driver Infractions.tflx
總結
對於此教程的第一個階段,我們的目標是獲取原始資料集,並準備將其用於涉及第一次和第二次違章日期的分析。該過程由三個階段組成:
確定第一次和第二次違章日期:
建立用於保留「Driver ID」(駕駛員 ID)和「MIN Infraction Date」(最小違章日期)的彙總。將此彙總與原始資料集聯結,建立一個「中間資料集」,其中包含為每一列重複的第一次(最小)違章日期。
在新步驟上,篩選出「1st Infraction Date」(第一次違章日期)與「Infraction Date」(違章日期)相同的所有列。從該篩選的資料集中,建立用於保留「Driver ID」(駕駛員 ID )和「MIN Infraction date」(最小違章日期)的彙總。將此彙總與第一個步驟中的中間資料集聯結。這將標識第二次違章日期。
為第一次和第二次違章組建乾淨的資料集:
返回並依據中間資料集建立一個分支,並篩選為僅包含「1st Infraction Date」(第一次違章日期)與「Infraction Date」(違章日期)相同的列。這將只會為第一次違章組建資料集。透過移除任何不必要的欄位對其進行整理,並重命名所有所需欄位(「Driver ID」(駕駛員 ID)除外),以指明它們用於第一次違章。這是「Robust 1st」資料集。
針對第二次違章日期整理資料集。透過篩選為僅保留「2nd Infraction Date」(第二次違章日期)與「Infraction Date」(違章日期)相同的列,對步驟 2 中的聯結結果進行清理。移除任何不必要的欄位,並重命名所有所需欄位(「Driver ID」(駕駛員 ID)除外),以指明它們用於第二次違章。這是「Robust 2nd」資料集。
將第一次和第二次違章資料合併為一個資料集:
聯結「Robust 1st」和「Robust 2nd」資料集,同時確保保留「Robust 1st」中的所有記錄以防止丟失沒有第二次違章的任何駕駛員。
接著,我們想要探索如何能在 Tableau Desktop 中分析此資料。
附註:特別感謝 Ann Jackson 的 Workout Wednesday 主題 Do Customers Spend More on Their First or Second Purchase?(客戶在第一次或第二次購買時是否花費更多?)(連結在新視窗開啟)以及 Andy Kriebel 的 Tableau Prep 技巧 Returning the First and Second Purchase Dates(返回第一次和第二次購買日期)(連結在新視窗開啟),這些文章為本教程提供了最初的靈感。按一下這些連結會使您離開 Tableau 網站。Tableau 對於外部提供者所維護之頁面的準確性或新鮮度不擔負任何責任。如果您對內容有疑問,請聯絡其擁有者。