はじめに
この記事は2023年ドコモアドベントカレンダー23日目の記事になります。
こんにちは。NTTドコモの島崎正太です。 現在はクロステック開発部で、スマホの位置情報データを用いた研究開発・分析を担当しています。
例えばこういったデータ(ODデータ)を扱っています。
ID | 出発時刻 | 到着時刻 | 出発地 | 目的地 |
---|---|---|---|---|
0001 | 2023-12-01 13:45 | 2023-12-01 14:30 | 東京都中央区 | 神奈川県横浜市港区 |
0002 | 2023-12-01 15:00 | 2023-12-01 18:00 | 東京都千代田区 | 大阪府大阪市淀川区 |
ODデータより、人がどの出発地からどの目的地へ移動するかがわかります。
ちなみに、上記のことがわかると
- 混雑(渋滞)予測
- 需要予測
- コロナリスク推定
などができるようになります。
しかし、出発地と目的地が緯度経度やメッシュコードで表されていたりする場合が多く、直感的にどこからどこへ移動したかわかりませんよね。
また、レコードが多すぎて一度にデータの傾向が把握しきれない時もあると思います。
そこで有用なのが地図上へのデータ可視化です。
本記事ではFoursquare Studio を使ったODデータの可視化方法について紹介します。 ODデータの可視化に興味がある方や,Foursquare Studioを利用してみようと思っている方の参考になれば嬉しいです。
対象者
- Pythonを用いた地図上への可視化に興味がある方
- Foursquare Studioを実際に使ってみた所感を知りたい方
内容
- Foursquare Studioとは
- オープンデータのダウンロード
- Pythonを用いた地図上への可視化
- GUI操作方法の紹介
- まとめ
Foursquare Studioとは
Foursquare Studio は、地理空間分析プラットフォームです。SDKもしくはWeb ブラウザから実行できます。
主な特徴
- 位置データを地図上に可視化
- GUIで操作可能
- 結果を公開・共有が簡単に可能
サンプルマップ
こちらは2019年4月9日12:00時点の飛行機の軌跡を表したものです。
時系列での確認や、フィルターを設定して表示したいものだけを確認することなどができます。
GUIで操作することができるので、とても便利でわかりやすい仕様となっています。
© Mapbox © OpenStreetMap Improve this map
実際に地図上への可視化を試してみたところ、割と容易に実装ができたので 今回はニューヨークのレンタサイクルCitiBikeのオープンデータを使って、可視化方法を紹介していこうと思います。
オープンデータのダウンロード
CitiBikeのオープンデータ(CSV)はこちらからDLします。
citibikenyc.com
今回は2023年10月のデータをDLして使用しました。
データの概要
ダウンロードしたCSVを開くと、一回の利用ごとに自転車を借りた場所(時間)と返した場所(時間)のカラムを持つレコードが入っています。
今回は、以下のカラムを利用します。
started_at | start_station_name | end_station_name | start_lat | start_lng | end_lat | end_lng |
---|---|---|---|---|---|---|
出発時間 | 出発地名 | 目的地名 | 出発地の緯度 | 出発地の経度 | 目的地の緯度 | 目的地の経度 |
下準備(データの加工)
日毎/出発地/目的地ごとにグループ化したものを作成します。
import pandas as pd from unfolded.map_sdk import create_map # csv読み込み df = pd.read_csv("202310-citibike-tripdata.csv") # populationカラムの追加 df["population"] = 1 # datetime型へ変換 df["day"] = pd.to_datetime(df["started_at"]) df["day"] = df["day"].dt.strftime("%Y-%m-%d") # 日毎/出発地/目的地ごとにグループ化 use_col = [ "day", "start_station_name", "end_station_name", "start_lat", "start_lng", "end_lat", "end_lng", "population", ] df_group_day = ( df[use_col] .groupby(["day", "start_station_name", "end_station_name"], as_index=False) .agg( ave_start_lat=("start_lat", "mean"), ave_start_lng=("start_lng", "mean"), ave_end_lat=("end_lat", "mean"), ave_end_lng=("end_lng", "mean"), sum_population=("population", "sum"), ) )
これで準備完了です。ちなみにdf_group_dayの中身はこのような感じになっています。
sum_populationは1日の総利用人数(出発地/目的地の組み合わせごと)です。
Pythonを用いた地図上への可視化
こちらのガイドに従って進めていきます。
今回はpythonのnotebook(JupyterLab)を使って可視化します。
SDKのインストール
pip install unfolded.map-sdk
モジュールのインポート
from unfolded.map_sdk import create_map
オブジェクトの作成
unfolded_map = create_map()
マップの表示
unfolded_map
上記を実行すると以下のマップがJupyter上に表示されます。 © Mapbox © OpenStreetMap Improve this map
プロットしたいデータの追加
df_tar_move = df_group_day unfolded_map.add_dataset({ 'data': df_tar_move, 'label': 'df_tar_move', })
© Mapbox © OpenStreetMap Improve this map
これでニューヨークのレンタサイクルCitiバイクの利用データがマップ上に可視化されましたね。
あとはGUI操作で確認したいデータを表示することができます。
GUI操作方法の紹介
GUIでの操作でできることを一部紹介していこうと思います。 上記のオープンデータをプロットしたマップを載せておくので、皆さんも試してみてください。
基本操作
赤枠のボタンで詳細を表示できます。
© Mapbox © OpenStreetMap Improve this map
ODデータ(lat, lonが2つずつ)の場合、初期レイヤーはそれぞれの座標のPoint、ODのLine、Arcが表示されます。
© Mapbox © OpenStreetMap Improve this map
マップのスタイルはこちらから変更可能です。 © Mapbox © OpenStreetMap Improve this map
レイヤーの変更
クラスター:集約データを可視化。対象カラムの値が大きい範囲を表示します。 © Mapbox © OpenStreetMap Improve this map
グリッド:対象カラムの密度を表示します。 © Mapbox © OpenStreetMap Improve this map
フィルターの追加
フィルターを追加することで、日付や人数で絞ることが可能です。 © Mapbox © OpenStreetMap Improve this map
3D表示
3Dで表示し、2点間の距離を可視化することで、ODの距離を比較することが可能です。 © Mapbox © OpenStreetMap Improve this map
© Mapbox © OpenStreetMap Improve this map
まとめ
本記事ではPythonで簡単に地図上への可視化が行えるFoursquare Studioを紹介しました。
今回はFoursquare Studioの基本的な機能のみを紹介しましたが、他にもグループ化や時系列の可視化などを行うことができます。
また今後更に機能が増えていくようなので、地図上への可視化を行うためのサービスとしては期待大です!
ぜひ皆様もお試しください!
それでは、良いクリスマスを🎅