NTTドコモR&Dの技術ブログです。

Pythonで簡単に地図上への可視化が行えるFoursquare Studioを触ってみた

はじめに

この記事は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を実際に使ってみた所感を知りたい方

内容

  1. Foursquare Studioとは
  2. オープンデータのダウンロード
  3. Pythonを用いた地図上への可視化
  4. GUI操作方法の紹介
  5. まとめ

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を開くと、一回の利用ごとに自転車を借りた場所(時間)と返した場所(時間)のカラムを持つレコードが入っています。

202310-citibike-tripdata

今回は、以下のカラムを利用します。

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日の総利用人数(出発地/目的地の組み合わせごと)です。

df_group_day

Pythonを用いた地図上への可視化

こちらのガイドに従って進めていきます。
今回はpythonのnotebook(JupyterLab)を使って可視化します。

location.foursquare.com

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の基本的な機能のみを紹介しましたが、他にもグループ化や時系列の可視化などを行うことができます。
また今後更に機能が増えていくようなので、地図上への可視化を行うためのサービスとしては期待大です!
ぜひ皆様もお試しください!

それでは、良いクリスマスを🎅