読者です 読者をやめる 読者になる 読者になる

どらちゃんのポッケ

R・統計・技術メモなど勉強ログ置き場

地図データを使って、自分の移動を隠れマルコフモデルでモデリングしてみた話

地図データと隠れマルコフ

去年ぐらい?にNHKでデータサイエンス特集みたいなものをやってたときに、紹介してたのをやってみた。

やったこと

google Location Historyから自分の移動履歴を取得して、 AからB、BからCというような移動データを抽出。 その移動データをHMMの状態遷移モデルでモデリング。 どの地点からどの地点への移動の確率が高いのかを検討した。

google Location Historyとは

参考(Googleのロケーション履歴ブラウザーは、あなたの人生を分刻みでプレイバックする

  • googleが提供している位置情報の履歴サービス
  • Androidとかで位置情報サービスをONにすれば、一定間隔で位置情報を送信してくれる
  • Webからも確認ができる
  • 履歴はKML形式のエクスポートが可能
    • 1日単位でエクスポートできる
    • 過去の日付もOK

KML

  • 緯度経度とか様々の情報を含んだXMLっぽいデータ形式
  • こんな感じ(youtube参照)でgoogle earthでも再生できる
    • 時間とともに動くように再生できるので、これだけで楽しい

処理の流れ

まぁ、今回もRで書いちゃいました。コードは下で、おおまかな処理の流れを書きます。

KMLから緯度・経度を抽出する

  1. KMLをエクスポートする
  2. KMLをパースして、緯度経度を抽出
  3. CSVに出力
    • なぜCSVに出力しなければならなかったのかは、後述のgoogle APIの使用制限にひかかってしまったため・・・

逆ジオコーディング

  1. 後ろに0埋めをする
    • 書式設定の数値から、有効桁数の変更して変更した
      • KMLでエクスポートした緯度経度をそのまま逆ジオコーディングかけたらエラーになってしまった
      • どうやら、23.6233601でなく、23.623360100 としないといけないみたい
        • 地理データの形式わからない・・・
  2. 逆ジオコーディング
  3. 出力された住所一覧をエクセルに張りつけ
  4. 区切り位置とかでがんばって、必要な部分を抽出して、テキストに張りつけ

HMM

  1. 住所一覧をベクトルで読み込み
  2. HMMにかける
  3. 結果をみる

HMMについては他のページをみてください。 この辺が参考になります。

結果と考察

  • 結果はこんな感じになった。

    • TOとFROMの地名はダミーにしてます(生活範囲がモロバレなので)
    • f:id:sleeping_micchi:20140313231042p:plain

  • 見方

    • 今上野にいるときに次に恵比寿にいく確率が0.409となる
    • 横の確率を足すと1になってます
  • 思うところ
    • {RHmm}の使い方があっているのか分からない自信がないけど、なんとなく、それっぽいデータになった

苦労したこととか

  • google Location Historyの緯度・経度が飛ぶときがある
    • 自宅でも異なる点としてLTEか、家のWifiかで場所が異なっているような気がする
  • 滞在をどう扱うか
    • 長い滞在を入れてしまうと、自分自身への遷移が非常に多くなって、他の遷移の重みが限りなく0になってしまう
      • 今回は2回以上は削除した
  • 細かい移動をどう扱うか
    • 今回はかなりデータを削って14地点の遷移のモデルにしたけど、ローデータは50以上の地点のデータがあった
    • 50地点の遷移データになると、本当に見たい遷移が隠れちゃう
      • データ量がおおくなれば解消されるのか?
  • google 逆ジオAPIが使えなくなって、前処理をExcelとメモ帳の置換でがんばった
    • 再利用性も糞もないので、あまりやりたくないが、しかたがない・・・
    • ビッグデータを扱うときって、全部プログラムでやるしかないのだろうか・・・
      • 前処理はエクセルでやると、すごい簡単だったりするんだよね
      • プログラムで前処理をきちんとやる癖つけないとな

今後やること

  • 今回のHMMでモデリングしたものを・・・
  • HMMを使った異常検知は勉強する
  • ジオデータむずいな