宿さがしのデータ分析

1.3K Views

May 10, 25

スライド概要

Kanazawa.R #3 での発表資料です。「宿さがし」を題材にRのさまざまなパッケージを使って、情報を可視化して、分析する方法を紹介しています。

profile-image

愛知工業大学でマルチエージェントシステムや空間分析を活用した減災に関する研究をしています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Kanazawa.R #3 鼓門 宿さがしのデータ分析 @NONONOexe ― ANDO, Keisuke

2.

安藤 圭祐 (あんどう けいすけ) ・所属:愛知工業大学大学院 博士後期課程3年 ・研究:AI協調による交通事故や地震災害への対策検討 ・R歴:およそ10年、本格的に使うようになって5年 マップ: こうべ ステップ: 23/270 全体カメラ 避難所カメラ 市民カメラ クイズカメラ 開発中のロボカップレスキューシミュレーション可視化システム

3.

宿さがしの問題 なにを重視するか? 近いけれど高い 宿A 観光地 (POI: Point Of Interest) 安いけれど遠い 宿B ・宿泊料 ・駅からの距離 ・目的地までの距離 ・サービス ・食事 など 最近だと宿泊料が高騰しているために 結局遠いところを選択しがち Kanazawa.R #3 3

4.

よい宿を見つけよう なにを重視するか?はそれぞれの状況によって異なるので どのぐらい近いのか? 宿A どのぐらい安いのか? 宿B 観光地 を R で可視化して 宿さがしの分析を支援 ※この発表では、例として 宿泊料と距離を対象に可視化 Kanazawa.R #3 4

5.

デモ 金沢マンテンホテル駅前 ¥7,500 (平日) ¥10,000 (休日) 平日料金 6000 8000 10000 12000 休日料金 10000 12500 15000 17500 200 観光地までの移動 (徒歩) 場所 距離 (km) 移動時間 (分) 金沢駅 0.53 6.36 金沢21世紀美術館 2.99 35.90 近江町市場 1.36 16.38 ひがし茶屋街 2.16 26.02 兼六園 3.13 38.47 https://nononoexe.github.io/hotel-analysis/ Kanazawa.R #3 5

6.

分析の流れ ここについては一部を紹介 データ収集 前処理 経路算出 可視化 R のパッケージの活用方法を紹介 じゃらんのAPIを使おうかと思っていたけれど 終了していたため、地道に手で収集 Kanazawa.R #3 6

7.

データの収集 ¥ 宿泊料 ・金沢駅周辺のビジネスホテルの1人素泊まりの価格を調査 ・「じゃらん」で検索して、記録 ・平日と休日で大きく異なるため、両方記録 📍 座標 ・Google Mapで検索して、記録 (マーカーを右クリックして座標取得) ・十分な精度として小数8桁までの緯度・経度を記録 Kanazawa.R #3 7

8.

実際のデータの例 1: name,latitude,longitude,weekend,weekday 2: 金沢マンテンホテル駅前,36.58188562,136.64979881,10000,7500 kanazawa-hotels.csv ○ 金沢駅周辺のホテル ○ 観光地 Kanazawa.R #3 8

9.

データの読み込み 地理空間データはsfパッケージで読み込む # ファイルパスの指定 kanazawa_hotels_file <- here::here("data-raw", "kanazawa- hotels.csv") # CSVファイルをデータフレームとして読み込み kanazawa_hotels_df <- readr::read_csv(kanazawa_hotels_file) # sfクラスに変換 kanazawa_hotels <- sf::st_as_sf( kanazawa_hotels_df, coords = c("longitude", "latitude"), # 座標として扱うカラムを指定 crs = 4326 # CRSをWGS84に設定 ) Kanazawa.R #3 9

10.

地理空間データ (Simple Feature Access) とsf 属性情報 図形情報 (フィーチャ) ホテルの 表現例 名称、価格、サービスなど + 座標 > kanazawa_hotels Simple feature collection with 10 features and 3 fields Geometry type: POINT Dimension: XY Bounding box: xmin: 136.6449 ymin: 36.57596 xmax: 136.6506 ymax: 36.58189 Geodetic CRS: WGS 84 # A tibble: 10 x 4 name weekend weekday geometry * <chr> <dbl> <dbl> <POINT [°]> 1 金沢マンテンホテル駅前 10000 7500 (136.6498 36.58189)

11.

経路の計算 経路はosrmパッケージで計算できる OSRMという経路検索サービスへのAPIラッパー # 出発地点の指定 src <- kanazawa_hotels[i, ] # 目的地点の指定 dst <- kanazawa_poi[j, ] # 経路の計算 (問い合わせ) # osrm.profile: 移動手段の指定 (foot: 徒歩、car: 車、bike: 自転車) route <- osrm::osrmRoute(src, dst, osrm.profile = "foot") 出発・目的地点を指定するだけでその間の経路と所要時間を求められる Kanazawa.R #3 11

12.

OSRM (Open Source Routing Machine) OpenStreetMapの道路データを用いた経路検索サービス HTTPリクエスト 例: http://[server_ip]/route/v1/driving/[lat1],[lon1];[lat2],[lon2]?steps=true OSRMを提供するサーバ ⇄ クライアント 経路情報 (JSON) ・公式のデモサーバがある ・多くのリクエスト (※) を必要とする 場合はDockerコンテナを利用する ※デモサーバへのリクエストは秒間1回まで ・osrmの場合はクエリ文字列を 意識しなくてよい ・Dockerコンテナを使用する 場合はサーバを指定する 12

13.

OSRMによる経路計算結果の例 > route Simple feature collection with 1 feature and 4 fields Geometry type: LINESTRING Dimension: XY Bounding box: xmin: 136.6482 ymin: 36.57813 xmax: 136.6505 ymax: 36.5819 Geodetic CRS: WGS 84 src dst duration distance geometry 1_1 1 1 7.06 0.5298 LINESTRING (136.65 36.5819, ... 移動時間 (分) 距離 (km) 経路の緯度・経度の系列 (経度1 緯度1, 経度2 緯度2, ... Kanazawa.R #3 13

14.

宿情報 (価格・位置・経路) の可視化 ggplot2やtidyplotsでグラフを作成する 10000 5000 0 金沢マンテ チサン バ ドーミーイアパホテルホテルウィ 価格の比較は十分 36.5820°N 36.5815°N 36.5810°N 36.5805°N 36.5800°N 36.5795°N 36.5790°N 36.5785°N 36.5780°N 136.6485°E 136.6490°E 136.6495°E 136.6500°E 136.6505°E 地理空間データの場合は Web地図にプロットしたい 14

15.

mapgl アプリの例: 道路上の事故リスクを可視化した地図 MapLibre GL JSというライブラリを用いた高度な表現を持つ Web地図を作成可能な新しいパッケージ 15

16.

mapglによる可視化の例 # MapLibre GL JSのベースマップ # routeが表示されるようにズーム mapgl::maplibre(bounds = route) ▷ # 出発・目的地点 (ポイント) の位置の表示 mapgl::add_circle_layer( id = "hotel-layer", source = src ) ▷ mapgl::add_circle_layer( id = "poi-layer", source = dst ) ▷ # 経路 (ラインストリング) の表示 mapgl::add_line_layer( id = "route-layer", source = route )

17.

Web地図のレイヤー構造 Web地図全体は各データの レイヤーから描画されている 経路レイヤー (route-layer) 目的地点レイヤー (poi-layer) 出発地点レイヤー (hotel-layer) ベースマップ さらなるレイヤーを追加することで より情報量の多い地図を作成可能 Kanazawa.R #3 17

18.

Shinyへの埋め込み Webアプリを作るためのshinyパッケージと組み合わせられる 金沢駅周辺のホテル ホテルを選択 アパホテル〈金沢駅前〉 スクロールして、情報を表示 ・入力フォーム ・HTMLコンポーネント ・地図 ・地図のコントロールボタン 18

19.

紹介したパッケージ ・sf: 地理空間データを扱うためのパッケージ ・osrm: 経路計算サービスであるOSRMを利用するためのパッケージ ・mapgl: MapLibre GL JSやMapbox GL JSを用いたWeb地図を作成 するためのパッケージ ・shiny: インタラクティブなWebアプリを開発するためのパッケージ ほかにもさまざまな 空間解析のためのパッケージがある 「Geocomputation with R」が詳しい Kanazawa.R #3 19

20.

さらなる発展 データの追加 施設情報、人気度、3次元建物情報 (PLATEAU) など 宿さがしのための情報を増やす 評価モデルの作成 推薦システムに近づけるために総合評価のための 数理モデルを作る 見栄えの改善 それぞれのレイヤーのオブジェクトの色や 表現方法を工夫する 開発のための情報は 公式ドキュメントに https://walker-data.com/mapgl/ Kanazawa.R #3

21.

enjoy!