ちょっと話題の記事

OpenRouteService APIを利用して、弊社大阪オフィスから徒歩○○分以内に辿り着ける飲食店がわかる「クラスメソッド大阪オフィス昼飯MAP」を作ってみた #Alteryx #Tableau

昼飯はサラリーマンの命
2019.04.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

どうも。DI部@大阪オフィスのtamaです。

みなさんは日々会社で働く中で、昼飯はどうしてますか?

弁当を持ってきたりコンビニで済ませる人もいるかと思いますが、いっちょ外に繰り出す企業戦士もいるかと思います。そんな時「店、どこに行こうか」と迷うことはありませんか

昼飯を食べる店を選ぶにあたり、色々な観点があるかと思いますが、自分は「歩いてすぐに着ける店」が一番好きだったりします。そこでふと「うちのオフィスを起点に、徒歩○○分圏内別に飲食店がわかる地図がほしい」って思っちゃったんです。

というわけで、今回はAlteryxとTableauを使って「クラスメソッド大阪オフィスの徒歩○○圏内ランチマップ」を作りたいと思います。

ちなみに、コードは1行も書かずに実現します。

超おおまかな作戦概要

  • 「大阪オフィスから徒歩○○分圏内」のエリアを取得する
  • 大阪の店舗データ(緯度経度が必須)を取得する
  • 2つのデータを突き合わせて地図上に可視化する

「大阪オフィスから徒歩○○圏内」のエリアを取得する

そもそも、まず徒歩○○圏内の○○を決めないといけませんよね。

そもそも大阪オフィスの皆は昼飯のために徒歩何分まで歩けるのか?

Slackの大阪オフィス雑談部屋でアンケートをとってみました。そろそろ業務に疲れてくるであろう夕方ごろにきいたのですが、半分以上のメンバーが回答してくれました。

行きたい店があれば10分以上歩ける!」という猛者が意外と存在。また、「7分まで」というなんとも微妙なボーダーラインを持ってるメンバーも存在。…なんか丸亀製麺までかかる時間を報告してきた謎の人物が一人…(岩本町は東京や…)。

というわけで、今回可視化するゾーンとしては…

  • (大阪オフィスから)徒歩7分圏内
  • (大阪オフィスから)徒歩10分圏内
  • (大阪オフィスから)徒歩15分圏内

…とします。

Open Route Service

とはいえ、「大阪オフィスから徒歩7分圏内のエリア」なんて、どうやって取得すればいいのでしょうか。

というわけで、活躍するのが「Openrouteservice」というサービスです。

地図上の特定の場所から、「車で○○分圏内」「自転車で○○分圏内」といったエリアを可視化してくれる便利なサービスです。ちなみに、上記画像は、私の自宅の最寄り駅である「磐城」から「徒歩10分圏内」のエリアを1分刻みで表示したものです。磐城駅って一体どこにある駅かって?奈良県に決まっとるやろ!!!!

この「Openrouteservice」ですが、APIが用意されており、上記のような可視化をデータとして取得することができます。APIがあるということは、AlteryxのDownloadツールでシームレスにデータを持ってこれるということです。やったね。

APIキーの発行方法などは、HPの右上から「Sign Up」すれば大体わかるので、ここでは割愛します。

Alteryxで使えるマクロ

さて、APIがあるということで、Alteryxでマクロでも組むか…と思ったのですが、なななんと、Openrouteserviceを使うためのマクロが、既にAlteryx Galleryにアップされております

今回はこいつを使って楽をしたいと思います。

ちょっとやってみる

下記のようなワークフローを作りました。超簡単ですね。

このマクロに渡すデータとして、緯度と経度が必要です(そのポイントを中心に「○○圏内」のデータを生成する)。ですので、テキスト入力ツールで弊社大阪オフィスの緯度経度を渡します(特定の場所の緯度経度の調べ方は、ググればいくらでも出てくるので割愛します)。

後はマクロの設定を行えばOKです。APIキーの入力と緯度経度(にあたるカラム)の指定はすぐわかるかと思います。下記のオプションは「移動手段と何分刻みでエリアを生成するか」を指定します。今回のテーマは大阪オフィスから徒歩でいけるお店…なので、Walkingを選びます。また、7分、10分、15分の3つで可視化すると先程決めましたので、その時間をカンマ区切りで指定します(秒で指定します)。

これだけです。ワークフローを実行すると下記の結果が得られました。

何となくそれっぽい結果ではないでしょうか(大阪オフィスのメンバーくらいしか体感でわからないですけど…)。ちなみにこのデータ自体はポリゴンデータです。Isochroneというデータがありますが、これは「等時線」という意味です。

大阪府の店舗データを取得する

「大阪オフィスから徒歩○○圏内」のエリアを取得できたので、今度は大阪府の飲食店データを取得します。

これについては、以前作成した下記のワークフローを使いまわします

取得件数の限界に気をつける

気をつけたいのが、ぐるなびAPIの取得件数です。

今回の「大阪オフィスから徒歩○○圏内」というエリアは、住所的にはどこが含まれているのかサッパリです(肥後橋くらいなのか本町までいくのか梅田は含まれるのか…など)。しかし、ぐるなびAPIでは、明確にエリアを指定してデータを取得します。ですので、なるべく飲食店データは広範囲でとっておいて、漏れなく「大阪オフィスから徒歩○○圏内」のエリアとぶつけたいと思います。

当初は県を指定するパラメータに「大阪府」を指定して、とりあえず大阪全部の飲食店データをとってくるか…という考えでした。しかし、ぐるなびAPIの仕様上、指定した条件に引っかかる飲食店データの総数が1000以上であっても、最大で最初の1000件しか取得できません(1回のリクエストで100件取得できるが、どれだけループ処理を回しても1000件以上はとれない)。ですので、前述した方法はダメです。

というわけで、総数が1000件に収まるように小さいエリアを指定したリクエストを投げるという処理を何度か繰り返す必要があります。

解決策

Alteryxの処理としては、最初に「エリアSマスタ取得API」を叩いて、大阪オフィス周辺のエリアSの一覧を取得し、その値をもってバッチマクロを作成します。取得したエリアSの分だけ、上記のぐるなびマクロを回す…という手筈です。

どのエリアを取得するか?

大阪オフィス周辺のエリアSの一覧

問題はこれをどうやって選定するか、です。というわけで、とりあえずAlteryxでAPI叩いて大阪府のエリアSデータを見てました。

ここからは完全に自分の主観になってしまいますが、北は梅田あたり南は難波くらい(さすがに遠いと思いますが一応)までとっておけばいいかなと判断。エリアLの「梅田・北新地」「難波・道頓堀」「心斎橋」「淀屋橋・本町・北浜」に該当するエリアSを取得することに決定しました。

緯度経度の測地系について

また、注意しないといけないのは、レスポンスに含まれる緯度経度データです。こちら、2019年4月時点では、ぐるなびAPIのドキュメントには以下のように書かれています。

input_coordinates_mode・coordinates_modeパラメータのデフォルトを1:日本測地系から2:世界測地系に変更しました。それぞれのパラメータに値を指定しない場合は、2:世界測地系を指定した状態と同様の挙動となります。

ぐるなび Web Service - APIのURL変更のお知らせ(2018/09/03)より

レスポンスに含まれる緯度/経度の測地系を指定 1:日本測地系 2:世界測地系(デフォルト:世界測地系)

ぐるなび Web Service - レストラン検索APIより

…ですが、自分の環境で試してみたところ、デフォルト(coordinates_modeを指定しない)だと、緯度経度は日本測地系で返ってきました(この後、coordinates_modeを2にすると、緯度経度データがデフォルトの時とは異なるものが返ってきました)。

日本測地系と世界測地系の差

こちらに詳しく書かれています。

例えば、日本測地系の経緯度で表されている地点を、世界測地系の経緯度で表わすと、東京付近では、経度が約-12秒、緯度が約+12秒変化します。これを距離に換算すると、北西方向へ約450mずれることに相当します。

下記の飲食店データ(の緯度経度)で検証してみました。

coordinates_modeを指定しない場合の緯度経度は下記の通りです。

coordinates_modeに2(世界測地系)を指定した場合の緯度経度は下記の通りです。

答えはこちら

…実際に可視化する場合でも世界測地系の方が正しい場所を指し示すので、coordinates_modeを指定するように、マクロを若干改修しました。

「大阪オフィスから徒歩○○圏内」に入っている店舗だけを取得する

全体像が決まったところで、今回のワークフローを作成してみます。

ワークフロー画像

詳細はツール毎に記載している説明をご覧ください。

本体

バッチマクロ

反復マクロ(Iteretive Macro)

下記で作成したマクロと同じ。

ワークフロー補足

ポイント作成ツール

今回のワークフローの最大のポイントは、「大阪オフィスから徒歩○○圏内のエリア」と「飲食店データの場所(ポイント)」を突き合わせるところです。

Alteryxでこれを実現するためには「空間マッチツール」を使います(後述)。ただし、このツールは地理空間データ形式同士でないと使えません。ですので、ぐるなびAPIからとってきた飲食店の緯度経度データを、このツールでポイント形式の地理空間データに変換します。

空間マッチツール

今回のワークフローの最大のポイントは、「大阪オフィスから徒歩○○圏内のエリア」と「飲食店データの場所(ポイント)」を突き合わせるところです(2回目)。

「Open Route Service」から取得した地理空間データ(「大阪オフィスから徒歩○○圏内のエリア」)と「ぐるなびAPI and ポイント作成ツール」から取得した地理空間データを、このツールで突き合わせます。

ターゲット側に「大阪オフィスから徒歩○○圏内のエリア」を、ユニバース側に飲食店のポイントデータを、それぞれ指定します。今回の目的は「徒歩圏内エリアに飲食店がどれだけあるか」なので、このツールの設定としては「ターゲットにユニバースが含まれる地点」を選択します。

Tableauでインタラクティブな昼飯MAPに

Alteryxの閲覧ツールでも可視化結果は確認できるのですが、どうせならTableauを使って、ある程度見る側が操作できる地図を作成しましょう。

というわけで、作成したVizがこちら(誰でも見れます)。

ビュー(シート)

「徒歩○○分圏内」で色分けをしたかったため、PolygonIDを色に指定してます。これは「Open Route Service」で取得できるデータです。

徒歩○○分をそれぞれ指定しましたが、その指定した圏内毎に割り振られているIDです。

後はカテゴリ等をフィルタに入れてみた程度です。ちなみに地図はMapboxを使用してます。

ダッシュボード

ぐるなびAPIは、その飲食店のぐるなびページのURLも取得できるので、URLアクションを指定して、地図上で選択した店のぐるなびページが右側に出るようにしました。

おわりに

大事なことを言い忘れてましたが、この地図は弊社大阪オフィスメンバー以外の人には何の役にも立ちません。ぜひみなさんのオフィスでも実践してみてください。

個人としては、ぐるなびAPI以外で試すとどうなるのか、ということも気になっています。