前言
在前幾篇的文章中,關於高速公路車流量、天氣資料以及對應的測站資料已經準備好了,接下來就是關於資料前處理的部分了。如果要將氣候資料與測站進行連結,使用經緯度資訊來進行配對是必要的步驟。在本文中,將介紹如和取得國道門架的經緯度資訊並使用簡易的畢氏定理來將國道門架與最近的氣候測站進行配對。
取得國道門架資訊
計算並配對國道門架以及氣象測站
在先前的文章中已經介紹過如何取得氣象測站的位置以及相關資訊。結合上一篇文章中的資料以及上一章節的國道門架資訊,將可以為每一個國道門架指定一個最接近的氣象測站,並以該測站的觀測資訊作為天氣特徵進行模型的訓練。
配對程式設計
在計算球體表面兩個點的距離時,需要考慮球體表面的弧度方可以做出精確的計算。不過由於台灣的國道門架以及氣象測站數量相當豐富,基本上可以忽略曲面所帶來的誤差,若不在意精確的距離,便可使用畢氏定理來簡化距離的計算,並找出最距離每個國道門架最近的氣象測站。以下是配對程式的設計概念:
- 讀取資料:由於取得的資料均為
csv
檔案,只需要使用Pandas
即可輕易的讀取資料。 - 配對算法:可以使用將氣象測站以及門架的經緯度資訊轉換為
Numpy
,在計算出所有組合的距離之後,使用numpy.argmin
找出最短距離的組合,並將配對代號進行記錄。
以下是程式碼的部分:
|
|
在上方的程式碼中,一次有一筆門架的經緯度資訊被傳入find_nearest
函式之中。在這個門架的經緯度資訊與所有氣象測站的經緯度資訊進行計算後,函式將會根據numpy.argmin
所提供的資訊,找出對於這個門架來說最近的氣象測站的站號,並回傳。在找出所有門架的對應氣象測站後,我們在gantry_df
的資料表中新增一個鄰近測站代號
欄位,並將所得到的配對資訊記錄在這個欄位之中。
結果驗證
在配對完之後,可以使用plotly
以及mapbox
進行視覺化,並驗證先前的配對程式是否正確。首先,使用Pandas
的merge
功能將氣象測站的經緯度資訊新增到gantry_df
之中。由於plotly
在使用mapbox
進行視覺化,並在兩個點中間畫出一條線,必須要將起點與終點的資訊以串列的方式傳遞給plotly
,所以我們會額外建立兩個內容為串列的欄位,用以儲存精度與緯度的起/終點資訊。以下是驗證以及的程式碼。
使用
mapbox
的圖資時需要先註冊並取得token。
|
|
為求輕便,以下的範例僅將部分的配對進行視覺化。圖中綠色的點是國道門架的位置,紅色的點是氣象測站的位置。可以發現程式已經按照預期的把國道門架與鄰近的氣象測站配對在一起。
儲存結果
在確認完成程式已依設計運行後,可以使用Pandas
資料表所帶有的to_csv
功能將gantry_df
儲存為csv
檔案,並提供後續使用。
結語
在本文中介紹了如何簡易的使用Pandas
以及Numpy
來進行國道門架的配對,並使用了plotly
進行視覺化,驗證了程式的運行結果。後續的文章將會介紹如何把先前所下載的大量資料透過Dask所提供的強大資料處理能力進行快速的資料前處理以及整合。