ユーザに対して「自分の行きたそうな記録」を見せたい(2)
前回、ユーザが自分の行きたいと思う記録が分かるように、標高差と距離の2次元のブロックを作って記録を提示する機能を考えました。今日も引き続き検討してました。
理想形はボタンを押すだけ
そもそも使う人の立場からすると、自分がどんな記録を探したいのかを考えことすら面倒です。例えば「お勧めの記録を表示」みたいなボタンを1発押すだけで、自分が行きたいと思う山や記録を見せてくれるのがベストでしょう。記録を検索するためにキーボードを打つのも面倒だし、クリックもしたくない。そもそも知らない山を見つける場合、キーワードも思いつかないので打つことすらできないわけだし。
ということで、ボタンを押すだけで行きたい山を探して表示することを目標にします。
記録の分類軸を2次元から3次元に
前回の日記では、歩いた距離と高度差の2次元で記録を分類しようとしてみました。しかし標高差を使って判断しているところが問題で、0mから登って500mに行くハイキングの記録と、2000mから2500mに行くピークハントの記録が同じブロックに配置されていました。
そこで、もう1軸「最高点の標高」という軸を追加しました。これで、標高が高い場所を歩く場合と、低い場所を歩く場合の2種類の記録が、違うブロックに分類できるはずです。
ベースにする記録の選び方
ボタン1発で自分の行きたい記録を探すには、過去にヤマレコに登録した自分の記録をベースに探すことになると思います。まずは過去2年ぐらいの間で、自分が実際に行った記録をPickupして、その記録に傾向が近い記録を提示することにしました。あまり記録が古いと、その記録の後にユーザーの山の趣向が変わっていたり、スキルアップしていたりして参考にならなくなるはずですし。
また、「来週」とか「今週末」に行く山を決めるために記録を探すシーンを想定すると、直近の季節の記録しか探したくないはずです。例えば今の時期だったら、12月〜2月ぐらいの記録から適切な記録を提示してもらいたいと考えるかなと。
上記2点より、
- 過去2年のうちに行った
- 現在の前後1ヶ月の範囲の季節で
- 自分の行った山の記録
の中から、ベースにする記録をランダムに選ぶことにしました。
上記の条件に当てはまる記録が存在しない場合はどうすればいいのか?は後日考えます。なんか色々やり方がある気がしますし。例えば、お気に入りに登録した記録とか、別の時期の山から推測とか、ハイキング固定で探してしまうとか、友人の記録とか。
関係しない山行記録の除外方法(フィルタのかけ方)
内容が近い記録を全て一覧にしてもいいのですが、ベースにする記録と同じ山の記録は表示しなくてもいい場合も多いかなぁと思います。例えば、高尾山の記録をベースにしてしまうと、他も高尾山の記録ばかりになってしまいます。これでは新しい山を探せないので、検索機能の魅力が半減してしまいます。そこで、今回は「ベースにした記録」が関連付けられている山と同じ山に関連付けられている記録は、検索結果の一覧から除外するようにフィルタをかけることにしました。
また「ベースにした記録」と同じ季節の記録を選び、違う季節の記録は除外することにしました。
これ以外にも、オプションとして一覧表示させる記録から「ジャンル」や「エリア」に対してフィルタをかけて(絞り込んで)、意図と異なる記録を見なくてもいいようにします。
一覧表示の件数
あとからフィルタ定義や絞り込み機能を追加することも考えられますし、そもそも一覧表示できる件数にはばらつきが必ず発生します。このばらつきを吸収できるように、まずは10件〜100件ぐらいの間でページを分割せずに一覧表示できるようにしてみます。
隣接ブロックの見つけ方
1ページの最大表示件数は30〜50件程度として考えたとき、1ブロック内には最大でも100件程度の記録しかなく、この中でさらにエリアやジャンルを絞り込んでいくと、1つのブロック内の記録だけでは足りなくなってきます。このような場合には、隣接するブロックにも範囲を広げて検索する機能が必要です。
例えば、
- ベースとする記録を決める
- ベースとする記録が所属するブロックを特定する
- ブロック内の記録を表示
- 該当ブロックの周囲にあるブロック群を取得する
(⇒ 1つ前の手順に戻る)
というような手順を踏みます。
隣接ブロック群はリスト管理して、同じブロック内の記録を何度も表示しないように注意します。
ほか、どんな拡張を考えるか
- 記録だけじゃなくて山もお勧めを提示して欲しい。
- 記録を登録していないときにも、適切な記録を提示できるようにしてほしい。
- そのためには、ユーザの好みが分かるようなデータの収集手段が必要になる。例えば、お気に入りの登録記録とか、過去に見た記録とか。