使用互動式地圖和動畫可視化倫敦的自行車流動性(上)

  • 2020 年 2 月 23 日
  • 筆記

編輯 | sunlei 發布 | ATYUN訂閱號

近年來,自行車共享系統已經成為流行的出行方式,為大都市地區的市民提供了一種綠色、靈活的交通方式。世界上許多國家的政府都認為這是一種創新戰略,可能會帶來許多社會效益。例如,它可以減少汽車的使用,從而減少溫室氣體排放,緩解城市中心的交通擁堵。

報告顯示,77%的倫敦人認為騎自行車是短途出行的最快方式。從長遠來看,這也可能有助於提高城市的預期壽命。

我一直在研究一種數據驅動的成本效益演算法,以優化(重新平衡)倫敦公共自行車租賃計劃桑坦德自行車(Santander Cycles)的系統。在真正研究這個演算法之前,我必須深入研究大量的數據,如果我能以某種方式將它們可視化,那將會很有幫助。

讓我們看看如何使用圖形、地圖和動畫來可視化自行車共享系統。

你可以在這個網頁上找到網路地圖。大多數地圖、動畫和源程式碼都可以在GitHub上找到。數據現在可以在Kaggle上獲得。

目錄

  1. 關於數據的更多資訊
  2. 柱形圖
  3. 互動式地圖
  4. 密度圖
  5. 連接圖
  6. 動畫
  7. 結論
  8. 評論

關於數據的更多資訊

我從倫敦交通局(TfL)獲得了自行車出行的數據。自2012年以來,他們系統中的每一次自行車旅行都會被記錄下來,這些公開的數據可以在線獲取。

對2017年8月1日至9月13日的36天出行記錄進行了分析。在此期間,倫敦的700個自行車停靠點中有大於150萬人次使用。從2014年開始,我們見證了自行車出行量超過190%的增長。該系統中的自行車和停靠站數量都增加了兩倍多,以適應倫敦市中心和地區自行車需求的顯著增長。準確的數據將顯示在我即將發布的論文中。敬請期待。

數據操作

我相信平日和周末的出行模式會有很大的不同。讓我們做一些編碼,看看這是不是真的。我們首先通過pd.read_csv()導入行程數據。

# Load journey data    f = 'journeys.csv'  j = pd.read_csv(f)    date = j['date'].values  month = j['month'].values  year = j['year'].values  hour = j['hour'].values  minute = j['minute'].values  station_start = j['id_start'].values  station_end = j['id_end'].values

然後,我們按date.weekday()提取工作日的數據,並將一個24小時的工作日平均分成72個時間片,這樣每個時間片代表20分鐘的間隔。

# Compute IsWeekday    weekday = np.zeros(len(date))  weekday[:] = np.nan  cnt = 0    for _year, _month, _date, _hour, _minute in zip(year, month, date, hour, minute):    _dt = datetime.datetime(_year, _month, _date, _hour, _minute)    _weekday = _dt.weekday()    weekday[cnt] = _weekday    cnt += 1    IsWeekday = weekday < 5  j['IsWeekday'] = IsWeekday    # Compute TimeSlice    j['TimeSlice'] = (hour*3 + np.floor(minute/20)).astype(int)

我們還需要檢查這些自行車旅行是否從/到廢除的車站,因為沒有辦法獲得這些車站的資訊,如位置,車站名稱等(幹得好倫敦交通局)。我們給它們貼上了「無效」的標籤。

# Load station data    f = 'stations.csv'  stations = pd.read_csv(f)  station_id = stations['station_id'].values    # Extract valid journeys    valid = np.zeros(len(date))  valid[:] = False  cnt = 0    for _start, _end in zip(station_start, station_end):    if np.logical_and((_start in station_id), (_end in station_id)):      valid[cnt] = True    cnt += 1    j['Valid'] = valid

最後,我們只保留那些「有效」的、在工作日出行的出行記錄,結果顯示有73%的數據是在工作日出行的。

df = j[j["IsWeekday"] == True].drop(columns="IsWeekday")  df = df[df["Valid"] == True].drop(columns="Valid")  print('Ratio of valid journeys= {:.2f}%'.format(df.shape[0] / j.shape[0] * 100))

柱形圖

我們終於深入到可視化部分!最簡單的數據可視化形式可以說是圖表。通過一個簡單的groupby(』TimeSlice』)函數,我們可以看到在不同的時間段內的頻繁行程。

grp_by_timeslice = df.groupby('TimeSlice').count().values[:,0]  plt.bar(range(0,72), grp_by_timeslice)  plt.xlabel('Time Slice')  plt.ylabel('Departures')  plt.show()

平日(左)和周末(右)平均離港率

看到了嗎?我們的假設是正確的!工作日和周末的出行模式是如此不同,我們可以看到工作日的兩個高峰時段,大多數人在這兩個時段通勤,但周末不是。我們也可以以類似的方式觀察出行時間和速度的分布。

行車時間分布(左)及速度分布(右)

請注意,由於數據限制(它們不跟蹤您的移動),我們假設採用直線路徑,這將比實際路徑短,因此根據起點和終點之間的距離計算的速度將被低估。如果顧客把自行車歸還到租車的地方,計算出的速度是0,這就解釋了為什麼在0公里/小時出現了一個奇怪的峰值。

互動式地圖

如果說圖表很花哨,那麼地圖就更花哨。我們將使用folium,它是一個製作互動式地圖的spool.js的Python包裝器。確保通過以下方式安裝最新版本

$ pip install folium==0.7.0

(或其conda安裝等效設備)。我在Google Colaboratory上工作,預裝版本是0.2.0,功能很小。

我建立了一個簡單的模板,用於生成帶有圓圈標記(不同顏色)的地圖使用群集。

import folium    # Change colours    def color_change(c):      if(c < 15):          return('red')      elif(15 <= c < 30):          return('orange')      else:          return('green')  # Create base map    London = [51.506949, -0.122876]  map = folium.Map(location = London,                   zoom_start = 12,                   tiles = "CartoDB positron")  marker_cluster = MarkerCluster(locations=[lat, lon]).add_to(map)    # Plot markers    for _lat, _lon, _cap, _name in zip(lat, lon, cap, name):      folium.CircleMarker(location = [_lat, _lon],                          radius = 9,                          popup = "("+str(_cap)+") "+_name,                          fill_color = color_change(_cap),                          color = "gray",                          fill_opacity = 0.9).add_to(marker_cluster)    f = 'map_station_cluster.html'  map.save(f)

為什麼是集群?MarkerCluster()使標記在縮小時距離過近時聚集在一起。你不希望你的地圖太亂,標記重疊。

站群圖

放大時,它會自動取消聚集/展開:

站群地圖-放大

但我答應過你們互動式地圖。您可以設置彈出參數和顯示站名稱及其容量時,點擊它。萬歲!

站群圖中的交互作用

此地圖在

https://edenau.github.io/maps/station-cluster/上提供。

原文鏈接:

https://towardsdatascience.com/visualizing-bike-mobility-in-london-using-interactive-maps-for-absolute-beginners-3b9f55ccb59