GoogleマップAPIで栃木県のカフェを検索
少しPythonが使えるようになったので、APIを使用してデータを取得してみました。
はじめに
テレビ番組のポツンと一軒家で対象物件を探している人ってずっとGoogleマップを眺めているのでしょうか?
それが仕事って良いですよね。私もやってみたいと思います。喜んでやりますよ。とはいえそれだけが仕事ではないのはわかっておりますが…。
まあ、仕事かは別として、私も何気なくGoogleマップを見るのは大好きです。特に山の中にあるカフェとか、そば屋とか気になりますよね。
以前、もう10年くらい前なのですが、茨城県の奥久慈方面へ行ったときです。事前にGoogleマップで確認していたのですが、福島県の矢祭町に入ったところに、カフェが一件ありました。
こちらの珈琲香坊というお店に伺いました。気さくな夫婦が営業していて、コーヒーカップも展示されているものから選んで飲むというオシャレな店でした。こういった発見は紙の地図ではできないことです。
そこで、今回はGoogleマップを見て検索するのは大変なので、APIを使用して一定の地域からカフェを検索してみようというものです。地域は福島県にしようかと思ったのですが、あまり縁もなかったので栃木県にしてみました。魅力度ランキング最下位と悲しい状況ですが、これを巻き返しましょう。
GoogleマップAPIを使用してみる
GoogleマップAPIにもいろいろと機能があります。今回はPlace SearchのNearBy Searchという機能を使います。
必須のパラメータとして緯度経度と距離(中心からの距離)を入力する必要があります。距離の最大は50kmです。また、レスポンスとして帰ってくるデータの件数は1回で最大60件になります。
ここで栃木県のカフェを一挙に検索するのは難しそうなので、以下の方針でやってみました。
- 市町村ごとに検索を行い、データを整理
- 緯度経度は市区町村の重心を使用
- 仕上げはQGISで
栃木県市区町村の重心作成
当初は役場の緯度経度でやってみようと思ったのですが、必ずしも役場が市町村の中心にあるとは限らないので重心を使用することにしました。
国土数値情報の行政区画をダウンロードしPythonで処理しました。ここで出力したCSVファイルをAPIで使用します。
検索距離の設定
市町村の重心からどのくらいの距離で検索すればよいか決定します。
それぞれの重心から20 kmで設定すると、日光市など北部で足らないようなので、25kmとしました。一応QGISで作図してこんなものかと確認。
APIを使用
いろいろ試行錯誤したのですが、オプションのkeywordを設定したほうがよさそうでした。あと、typeにはもちろんですがcafeを設定します。
GoogleのAPIは有料ですが、素人が使う分には無料部分で対応可能かと思います。ですが、頻繁に接続はしたくないので、取得したデータはCSVで保存しておき、あとで加工できるようにします。
ここで返ってくるデータですが、キーワードに「〇〇市 カフェ」としているものの、なぜか(私のやり方が間違っている?)周辺の市区町村のデータも返ってきます。これらはあとで処理します。
データを加工
先の通り、検索した市区町村と隣接する市町村のデータが含まれています。つまり、重複しているデータが多数あります。また、栃木県以外のデータが含まれていることになります。
ここでもPythonを使用して重複データの削除と栃木県以外のデータの削除を行います。
重複データは関数を使用し、県外のデータは空間結合を行います(カフェがどこの市町村にあるかもこれで処理できる)。そして最終版のシェープファイルを出力します。(アドレスマッチングでもよいかと思います)
QGISで仕上げ
QGISを使用して仕上げを行います。
まずはデータを読み込み、スタイルを変更してみます。ヒートマップの作業はこちらも参照。
いい感じになりました。
出典(背景地図)「地理院タイル」、出所「Shoreline data is derived from: United States. National Imagery and Mapping Agency. “Vector Map Level 0 (VMAP0).” Bethesda, MD: Denver, CO: The Agency; USGS Information Services, 1997.」
ここで、口コミの評価(星印)をヒートマップを使用して表現してみます。基本的な操作は以前のものと同様に行いました。[重み:rating、半径:3000(地図単位)、最大値:5、乗算]
出典(背景地図)「地理院タイル」、出所「Shoreline data is derived from: United States. National Imagery and Mapping Agency. “Vector Map Level 0 (VMAP0).” Bethesda, MD: Denver, CO: The Agency; USGS Information Services, 1997.」
ちょっと色が濃すぎてわかりにくかったです。
次に評価(星印)ではなく、口コミの投稿数でヒートマップを作成してみました。評価の高い、低いにかかわらず、口コミの投稿数が多いということは、一応集客があるカフェだとおもいますので。[重み:rating、半径:3000(地図単位)、最大値:500、乗算]
出典(背景地図)「地理院タイル」、出所「Shoreline data is derived from: United States. National Imagery and Mapping Agency. “Vector Map Level 0 (VMAP0).” Bethesda, MD: Denver, CO: The Agency; USGS Information Services, 1997.」
こちらの図はさきほどよりわかりやすくなったかも?
上下どちらの図もアクセス(鉄道・高速道路)がよい箇所に集中しているようですが、那須、益子、鹿沼周辺もなかなか健闘しているようです。あとでグーグルマップで詳細を見てみようと思います。
データも見てみます
シェープファイルのデータをCSVファイルとして保存し、エクセルで表示してみます。
まずは市町村と評価のクロス集計です。
星5個が一番多いのは鹿沼市。宇都宮市でなかったのと那須町が無いのは意外でした。まあ、あくまでも口コミですので。
次に市町村と口コミ数のクロス集計です。
こちらは宇都宮市、那須町となんとなくイメージできそうな結果です。確かに平均評価5というのは、評価した人が全員5を回答したということでしょうから、評価人数が増えれば難しいのはあたりまえです。
ついでに、評価者数の多い店舗名を見てみました。
1位の「SHOZO CAFE」の評価者数がダントツです。しかも2位も同じ系列店です。私はこちらのカフェは知らなかったのですが、妻に聞いたら業界でも有名店だそうです。
うちにマグカップがありました。通信販売で買ったようで。
3位以降も面白い結果です。コメダ珈琲とかマクドナルドなどチェーン店が結構ランキングしています。こういったチェーン店の口コミを投稿している人って結構多いのもひとつの発見になりました。
それにしてもコメダ人気ですね。
まとめ
今回はGoogleマップAPIでデータを取得し、GISデータの作成、可視化と集計を行ってみました。APIを活用すればマップをゴリゴリいじらなくてもある程度のデータが取得できるので便利ですね。Google以外のAPIにもチャレンジしてみようと思います。