note63

事情

食べログとGoogleマイマップで,おいしい飲食店マップを作る

引っ越したので,外食エクスペリエンス向上のためにおいしい飲食店マップを作る。

食べログ使えばいいんでないの?

食べログはもとから地図ベースで飲食店を探す方法を提供している。

だけど、モバイルからランキングベースで見るにはプレミアム会員になる必要がある。 基本的に地図ベースで見たい時というのは、外にいて「近くにおいしい店ないかな〜」というときなので、モバイルから見れないのは困る。というかそれがわかっていてプレミアム会員限定にしてるんだろうけど。やるじゃん食べログ

一応,別の手段もある。食べログには「行った・行きたい」お店を登録しておく機能がある。それに関してはモバイルからも地図ベースで見ることができる。 じゃあ「PCからランキング検索して,ひたすら「行った・行きたい」ボタンを押せばいいんじゃないか」となるかというとそうでもない。なぜなら面倒くさいから。

ということで僕はGoogleスプレッドシートとマイマップを活用して地図を作ることにした。

※ 一応,マイマップにインポートするからこそできることっていうのもあるし、実際便利です

食べログランキングからおいしい飲食店マップを作る

地図作成のざっくりとした流れは

  1. Googleスプレッドシート食べログランキング情報をインポートする
  2. Googleマイマップにスプレッドシートの情報をインポートする

という感じ。

1. Googleスプレッドシート食べログランキング情報をインポートする

IMPORTXML関数を駆使して食べログのランキングをスクレイピングする。
で、できたのがこれ。

さらにこれを加工する。
GoogleマイマップはIMPORTXMLなど動的に値を取得する系の関数があるとうまくインポートしてくれないので、これを値だけコピーしたシートを作る。

2. Google マイマップにスプレッドシートの情報をインポートする

手順省略(簡単なので)

できたのはこんな感じ

f:id:saku_na63:20160320164504p:plain

マイマップの良い・残念なところ

良いところ

マーカの色分けがカスタマイズできる

ジャンルや評価の値別にマーカの色を分けることができる。
上の画像では評価値別にマーカの色をわけている。
食べログの地図も評価値別に色をわけてくれるけど,僕は色弱なので見分けづらくて困っていた。
Googleマイマップはわりと色相や明度がくっきりわかれるので助かっている。

レイヤを分けられる

僕は手間だからやっていないけれど、レイヤ別にインポートすると、特定のレイヤのお店だけを表示することができる。
例えば、ジャンル別にレイヤを作ってラーメン屋だけを表示するとか、評価別にレイヤを作って一定評価のお店だけを表示するとか。
営業日別にレイヤを作るのも便利かもしれない。

残念なところ

モバイル版ではURLがリンクされない

マイマップのアプリから食べログのアプリを起動できるよう,食べログのURLを登録してあるのだけど、モバイル版ではURLからリンクを貼ってくれない。
ここだけ残念。PC版ではリンクされるので、今後改善されることを願う。

f:id:saku_na63:20160320164656p:plain

参考

Google Spreadsheetで効率的に物件を探す - hitode909の日記

gnuplotで値域の小さい離散値のヒートマップを書く

こういうやつを書きます

f:id:saku_na63:20151223104813p:plain

まず単一のヒートマップを書きましょう.

set datafile separator "\t"
plot 'mat1.tsv' matrix rowheaders columnheaders using 1:2:3 with image

mat1.tsvの中身はこんな感じ

 あ い う
a   1   2   3
b   2   1   3
c   0   1   0

こんなやつが書けるはずです.

f:id:saku_na63:20151223102349p:plain

x軸のラベルが文字化けしているので直します

set terminal aqua font "HiraKakuPro-W3, 11"

ヒラギノが使えるかどうかは各自の環境によります. gnuplotで扱えるフォントの環境設定は以下を参考にしました.

gnuplotのインストールと設定 | monkeying11

f:id:saku_na63:20151223102356p:plain

配色がキモいのと,0,1,2,3の4つの値しかないのにカラーバーが連続していて無駄なので直します.

set palette maxcolors 4
set palette defined (0 '#ffffff', 1 '#bbbbbb', 2 '#999999', 3 '#666666')

f:id:saku_na63:20151223102415p:plain

目盛の値を0,1,2,3にするのと,目盛の位置を各色の中央に持っていきます

set cbtics -0.325, 0.75 # -0.325の位置(画面には描画されない)から0.75間隔で目盛を置く
set cbtics scale 0 # 目盛のちょんちょんを消す
set cbtics ('0' 0.425, '1' 1.175, '2' 1.925, '3' 2.675) #J, '4' 3.6) # 目盛の値を書き換える

良さ気

f:id:saku_na63:20151223102633p:plain

これを並べるにはmultiplotを使います. 普通にmultiplotするとこんな感じになります.(違う値のグラフを並べていることに注意)

set terminal aqua font "HiraKakuPro-W3, 11"
set multiplot layout 1,2
set datafile separator "\t"

##### draw left heatmap
set palette maxcolors 4
set palette defined (0 '#ffffff', 1 '#bbbbbb', 2 '#999999', 3 '#666666')

set cbtics -0.325, 0.75
set cbtics scale 0
set cbtics ('0' 0.425, '1' 1.175, '2' 1.925, '3' 2.675) #J, '4' 3.6)

plot 'mat1.tsv' matrix rowheaders columnheaders using 1:2:3 with image

###### draw right heatmap
set palette maxcolors 5
set palette defined (0 '#ffffff', 1 '#bbbbbb', 2 '#999999', 3 '#666666', 4 '#000000')

set cbtics -0.4, 0.8
set cbtics ('0' 0.4, '1' 1.2, '2' 2.0, '3' 2.8, '4' 3.6)

plot 'mat2.tsv' matrix rowheaders columnheaders using 1:2:3 with image

f:id:saku_na63:20151223103406p:plain

わかりやすいように丸で囲ってるんですが,なぜかplotコマンドの引数が出てきちゃってるので消します.

unset key

なぜkeyとして引数が出るのかは謎,非常にわかりずらい.

f:id:saku_na63:20151223103646p:plain

左のグラフのカラーバーと,右のグラフの縦軸のラベルは無駄なので消します.

##### draw left heatmap
〜中略〜
unset colorbox
〜中略〜
###### draw right heatmap
〜中略〜
set colorbox
unset ytics
〜中略〜

左側のグラフを書くときに設定した内容が右側のグラフを書くときにも引き継がれてしまうので,右側のグラフを書くときにset colorboxで改めてカラーボックスを表示するように設定します. こうなる

f:id:saku_na63:20151223104109p:plain

わかりづらいんですけど,左側のグラフの横幅が大きくなっています. gnuplotは横軸いっぱいに描画しようとするので,カラーボックスを消したぶん広がっちゃってるわけですね. これをゴリゴリいじります.

##### draw left heatmap
〜中略〜
set size 0.20,1
set origin 0.28,0
〜中略〜
###### draw right heatmap
〜中略〜
set size 0.24,1
set origin 0.47,0
〜中略〜

f:id:saku_na63:20151223104351p:plain

カラーボックスが細すぎるのでさらにいじる

set colorbox user size .03,.922 origin .65,.056
set size 0.18,1 # カラーボックスをいじると,サイズが変わってしまうのでごちゃごちゃする

f:id:saku_na63:20151223104813p:plain

最終的なコードの全体

set terminal aqua font "HiraKakuPro-W3, 11"
set multiplot layout 1,2
unset key

##### draw left heatmap
set palette maxcolors 4
set palette defined (0 '#ffffff', 1 '#bbbbbb', 2 '#999999', 3 '#666666')

set cbtics -0.325, 0.75
set cbtics scale 0
set cbtics ('0' 0.425, '1' 1.175, '2' 1.925, '3' 2.675) #J, '4' 3.6)

unset colorbox

set size 0.20,1
set origin 0.28,0
set datafile separator "\t"
plot 'mat1.tsv' matrix rowheaders columnheaders using 1:2:3 with image

##### draw right heatmap

set palette maxcolors 5
set palette defined (0 '#ffffff', 1 '#bbbbbb', 2 '#999999', 3 '#666666', 4 '#000000')

set cbtics -0.4, 0.8
set cbtics ('0' 0.4, '1' 1.2, '2' 2.0, '3' 2.8, '4' 3.6)

set colorbox

unset ytics
set colorbox user size .03,.922 origin .65,.056
set size 0.18,1
set origin 0.47,0
plot 'mat2.tsv' matrix rowheaders columnheaders using 1:2:3 with image

unset multiplot

おしまい