視覺化 Visual your data - 05 地圖地址轉換

你知道地圖在我們的生活有多重要嗎?當週休二日的生活節奏,搭配著4G上網的行動裝置,身為生活忙碌的上班族或學生族,你不難發現,許多像是:寶可夢、個人地圖導航、停車場搜尋、台北等公車、手機叫車、FB打卡…各式各樣的手機App 就像雨後春筍般的出現在主流的手機應用程式市集中,並且取得相對亮眼的成績!
相對於想要把報表做的美美的使用者來說,要如何應用地址資訊,來繪製精美的報表,來協助企業,在了解銷售數字在地理上的分佈狀況,以利相關資源的調度。
 

前言、基礎於各式各樣的地理資訊落實在我們的生活應用上,例如個人導航、POI(Point Of Interest)搜尋、氣象播報、廣告推播、緊急救援、行動追蹤、即時影音導覽、叫車服務、旅遊行程規畫、虛擬實際線上遊戲和社交網路…等。所以我們要趕快擁抱它、學好它。所以,我們接續上一篇,本文將會更進一步的介紹該如何用地址來查找經緯度,以及相關的應用技巧…
 

複習一下,二大陣營的標準地圖功能,包含了 Symbol map 與 Filled map,其使用時機,前者是,當你想在特定的地理位置上以形狀的大小來呈現資料的「大小」時;後者是,當你想在特定的地理位置上呈現「有沒有」的資訊時,當你看到高雄與基隆在地圖中都填滿色彩時,高雄的值並不保證比基隆大,因為高雄先天上就比基隆面積大。

若你的需求就是,一定要在 Filled map上以顏色深淺來呈現數值的大小,在 Power BI 上你就是在右下角找到 Format頁籤中,裡面有一個 Data colors,然後對裡面的值進行逐一的客製化修改
 

至於在 Tableau中它有提供自由挑選或是漸層二種方式,我會建議你選擇後者速度會快很多。以下我就選擇了企業最愛的紅綠燈(漸層),然後你就能在地圖中透過顏色,一目瞭然成績的好壞。
 

其中有三個州(綠色)表現的比較好,若你覺得畫面太紅了,還可以透過修改雙色漸層的階層數,或是直接換成三色漸層並調整其漸層階層數,甚至是用 Log 函數來處理,都是可以再繼續(快速地)客製化調整的…
 

好了!言歸正傳,以下我們將來解析,地址要如何轉換為經緯度?

一、地理資訊 encoding:這個由地址轉換為座標的動作看似簡單,但它並不只是很單純的查表而己,裡面可是包含了許多學問。其實地理資訊取決於你的應用情境與打算投入的成本,有分成高/中/低…三種精度的解決方案,另外在現有的 Meta data中,主流的編碼包含了有:五大洲區域、全球國家、CBSA Core-based statistical area/ MSA Metropolitan statistical area、美國區域碼、美國國會選區、全球州郡、全球城市、郵遞區號…等,最後才是街道地址。除了街道地址,如果你的資料集中能夠有這些資訊,在不用煩惱批次、分散式、負載平衡的架構設計下(BI 工具已經解決了這一段),繪製地圖透過API 查表的功能,速度會相當的快。若沒有,待會將會解析,這個要怎麼做?
至於,所謂的 Latitude緯度,其數值是表示所在地點與赤道上下的距離,也就是南北的座標;至於 Logitude經度,其數值則是表示所在地點與子午線左右的距離,也就是東西的座標;當我們把經度與緯度綜合起來時就是二維的座標點,結合以 0為起點的XY軸,就能透過電腦繪製成地圖,進而表達出數據集中已知點與真實世界的對應關係。
換個角度想,當我們在 X軸置入經度 Longitude,在Y軸置入緯度 Latitude,繪製散佈圖,然後再加上一個背景圖,在技術上,就已經把航向偉大旅程的地理籃圖畫了出來,剩下的,只是你的商業應用情境而己。不禁讓人讚嘆,人類的科技所能帶來的生活便利,與可以蘊育更多創新的無限可能…
 


二、地址轉經緯度工具網站:其中最著名的工具網站自然是 Google map,以下圖為例,當你在 POI上面按下右鍵,選擇「這裡是哪裡?」就會出現經緯度的資訊。只是這樣子一次只能查找一筆,有點太慢…

以我之前用 Python去爬蟲全台量販店來做 Machine learning 房價預測為例,就是先去申請 Google map 的 API,然後你就可以批次的查找,取得所需的經緯度,進而計算出某個房屋物件,方圓百里有多少便利的生活設施,來增加可以「預測出房價」的有效「特徵值」。
**若對如何用 Python 來呼叫 Google map有興趣者,這裡提供一個 Github 連結給有需要的朋友…

或者是坊間還有許多免費/付費的工具網站也有提供單筆/批次查找的功能,你可以用「geocoder」或是「地址定位」去搜尋。在下圖中,就是把資料集(Excel)中的:街道、地址、城市、州郡、郵遞區號,複製貼上後,按下geocode
 

運算後的結果,就能將經度與緯度貼回資料集(Excel) 以利地圖的繪製
 


三、在BI報表工具使用經/緯度
1、在使用之前,我們需要先談「彙總」與「關聯」,在二大陣營中,在 Power BI將會使用 Group by,而 Tableau 則是用 Blending來處理。
2、在 Power BI的地圖元件中 Fields頁籤中,本來就有設計 Latitude 與 Logitude這二個欄位,只是它們跟 Location是 either ...or的關係。只是直覺地拖進入,大多數並不是我們想要的結果。在當前的資料集中就有229間據點,但我們並不是要把所有明細畫出來,通常主管要的是16縣市的統合報表,所以要把經緯度以平均的方式,並且用行政區做 group by。例如彰化縣有7個門市,將過平均處理後,地圖上就會在彰化縣繪製出一個,由七個門市之間的地理中心點。

以下是 Power BI Group by的作法:原理為新增一個彙總後僅有16筆資料的 Table,裡面包含了行政區、經度、緯度。然後以「一對多」對「分店資料」Table做關聯

我們先透過 Transform data的功能,把 Query editor 叫出來

選到有「經/緯度」資料的「分店資料」Table,按下右鍵,選擇 Reference

然後,對著新產生的「分店資料(2)」按右鍵,選擇 Move to group/New group,給它一個名稱

你就能看到,它被移進新的 Folder中

在 Query editor上方找到 Group by 的按鈕,由於預設的 Basic選項只會提供一個欄位,所以我們要選 Advanced

然後依序下拉「行政區」欄位,填入「平均經度」新名稱,下拉「Average」彙總方式,下拉「經度」欄位;
完成後,再按下 Add aggregation,才能新增第二筆「平均緯度」的欄位
 

在左上方找到 Close & Apply按下去,再回到設計報表的頁籤(系統會自動偵測 Relationship並完成關係的建立)
 

就可以用新的 Table的平均經/緯度,來放進 Logitude與 Latitude的Map屬性中,最後再加上「銷售明細」Table中的「銷售金額」就大功告成了。剩下就是美工的問題,我就不再贅述~~
 


至於 Tableau,由於這個資料集中比較簡單,還不需要使用到 Bleding 就能完成。待會我再換一個資料集做補充。
首先,在左手邊我們可以觀察到,目前經度/緯度欄位的資料格式是被辨識為 ABC字串,而且沒有出現 (Generated) 自動產生的字樣,表示它是原始的資料。所以我們需要將經度,設定為 Logitude;而緯度則設定為 Latitude的 Geographic role
 

當我們把經緯度放進 Columns與Rows位置時,系統很聰明地,自動選擇了 Average 的彙總函式來呈現。接下來一樣要面對 Group by問題,但是,我們直接將「行政區」拖進 Label 就完成了。
**這邊一定會有人有問題!Power BI 明明也支援欄位可以任意地切換彙總函式,為何它不能跟上面做一樣的操作?答案是,每個視覺化元件都有各自的屬性,以 Map來說,並不支援三個屬性(經/緯度/地區)同時填上欄,我在剛才就有提到它們有 Either ...or的二選一關係,所以你要嘛就做 Group by,要嘛就寫 DAX。
 

至於Tableau的Blending,我們可以參考以下的範例,有一個旅行社,他們有維護一個具有餐廳、地址、輸入時間、鄰近地區、網址的資料集,想要繪製一個地圖來優化行程規劃,強化資源調度,對餐廳名單的追蹤…所以他們用工具網站把餐廳與經/緯度的資訊整理在另一個csv中
 

我們先將有經緯度的 Location Mapping.csv做載入,然後把經/緯度拖到右上角,把餐廳名稱拖到 Label 中
 

接下來再載入另一個Event Log.csv,下圖是我剛才有檢視時,系統已經偵測出 Restaurant Name,系統因為二邊的Table都有相同的名稱,認為他們有 mapping 關係,在還沒有使用到二邊 Table之前,它是灰色斷鏈的符號。接下來不管你拖哪一邊的 Table 中的這個欄位,它會變化為紅色(已匹配)
 

然後,我們從Event Log這個 Table中,將 Number to Records拖到 Size,Website拖到 Tooltip
 

最後是美工階段,增加街道圖層,修改Symbol的顏色,修改Tooltip,把經緯度資訊拿掉
 

大功告成
 

以上都是基本功,接下來我們要來介紹二大 BI 報表工具的地圖功能還有哪些需要特別注意的部份…

、編輯地區:在極少的情況下,Tableau 的地圖功能會暫時沒辦法辨識成功 Country/Region。例如你先繪製了台灣地圖,然後又在新的頁面上繪製另外一張歐洲地圖,結果因為記憶體不足或是其他狀況,導致系統一時之間反應不過來(畫面上有地圖只是沒有點,等同於空白的地圖),你可以選擇關閉應用程式,重啟後就能正常。若你不打算重啟,也可以選擇用手動的方式。另外一種常見的問題,就是資料輸入方面的問題,舉例來說,我曾經坐上計程車之後講了一個新北市中和區中正路的地址,不小心睡了一覺,醒來後就被載到永和區的中正路了;同理,在美國 Adams或Clark 可以是州名,也可以是郡縣名。連人類都會搞錯或是被混淆,所以系統就有設計讓使用者可以人工校正的機制。
** Power BI 基礎於 Bing map,所以並沒有提供任何地圖的控制選項給使用者
 

當地圖出現異常或是出現 Unknown時,可以由上往下來修正它。首先檢查 Country/Region,一般來說它很少出錯;在下一層的(按一下下拉)選項中,共有三個選項。第一個是 None,當資料集完成沒有 Geographic code時,這個選項會被選中;其次是 Fixed 它可以提供你來指定所需的地圖集;最後是 From field,當你的資料集中包含了:國家、城市、行政區…等多個,含有地理資訊的欄位時,你可以手動指定。
接著,當地圖上出現Adams異常時,你可以在 State/Province中下拉到 Washington。這個動作相當於你告訴司機,你是要去中和的中正路,系統就能克服 Unrecognized 的混淆問題。或是在你的資料集有類似 Stephens 的拼錯字問題,都可以在畫面中輸入正確的名稱(系統也會提示相關的候選答案)
 


五、客製化地理資訊:你可以在不用修改資料集的情況下,透過以下功能來實現你客製化的地圖繪製。假設在左手邊,有一個包含美國的東/南/西/北-四個區域 Region欄位,而你想要應用這欄位,在地圖上顯示你在全國不同區域的佈局,所以你複製了這個欄位,並且更名為 Regional headquarters

接下來對著這個新欄位按下右鍵,指定 Geographic role為 City,然後你就可以叫起 Edit Locations,輸入四個城市的資料,實現地圖客製化的目標

以下是修正4個Unknown 後的結果


六、配色技巧(For Symbol map):承上,這個類型的地圖,主要是依 Symbol 的大小來呈現數值上的差異,所以它可能會遇到一個問題,就是 Symbol 會蓋住地圖上的文字。所以我們可以先調整它的透明度,接著再將 Borler邊緣設成黑色,強調邊緣,並且把 Halo 泫染效果關閉。


七、透過篩選條件來提高自助性:做報表的人,最怕需求訪談的不清楚,因為要不停的修改,所以我們應該要善用互動性來解決這個問題。若想要比需求單位早一步提出解決方案,可以將可能會用到的 Measure 設定成篩選條件,例如 Profit 毛利率,右上角就會出現一個可以左右調整的 Range bar,供使用者進行自助式的分析…


八、結論:由於二大陣營都有投入許多的廣告文宣,或是由許多Youtuber 拍攝了很多的教學影片。反而會導致有些使用者不曉得該怎麼 from scratch 用經緯度來繪製地圖,所以本文也就因應而生。有機會再跟大家介紹,如何上傳自己的底圖,做出更多的地圖應用…

李秉錡 Christian Lee
Once worked at Microsoft Taiwan