SlideShare a Scribd company logo
1 of 31
Rで巡回セールスマン問題+ジオコーディ
         ング
ある友人が抱えていた深刻な問
  発売後・・・ 題
「売り切れてる、一本も
  残ってない。」
「しかし、全てのおまけを
    集めたい」
 「ロー○ンのみを回りた       それ、
      い。」           Rで
「あちこち回るのしんど        出来ま
    い。」            すよ!
彼の要望:自宅近辺のロー○ンを効
 率的に回るルートを見つけたい!
問題を解決するには

自宅近辺のロー○ンを効率的に回るルート
       を見つける



巡回セールスマン問題を解いて自宅近辺の
 ロー○ンを出発して戻ってくる効率のよ
   い経路を計算して可視化する。
巡回セールスマン問題(TSP)
• 地図上の各点をすべて回り、元の出発点
  に戻る最短経路を求める問題。
             •ノード間の距離を定
             義、制約条件の元で最
             小化する問題
             •NP困難
             •ヒューリスティック
             を使って解く
早速、Rで彼の問題を解いてみよう!
やることリスト
1.   ロー○ンの住所リストを集める
2.   住所を位置情報に変換する
3.   TSPを解いて経路を求める
4.   地図上に経路を可視化する
やることリスト
1.   ロー○ンの住所リストを集める
2.   住所を位置情報に変換する
3.   TSPを解いて経路を求める
4.   地図上に経路を可視化する
ロー○ンのリストを取得

      ロー○ンの住所を集めて、CSVに直す

                      CSV




コンビニの住所を集めたWebサイト


件数が多いのでRcurlでスパイダリングする(後述)。
やることリスト
1.   ロー○ンの住所リストを集める
2.   住所を位置情報に変換する
3.   TSPを解いて経路を求める
4.   地図上に経路を可視化する
住所を位置情報に変換する
• ジオコーディング・・・住所から、緯度
  経度を求める
• GoogleGeocoding API

                            JSONファイル
URL:
http://maps.google.com/m
aps/api/geocode/json?addr
ess=東京都台東区元浅草3
丁目1-1にアクセス




 JsonファイルをRjsonを使って解析する必要がある。
Rcurl:Webからデータ取得
        Rjson:jsonをパース
library(RCurl)                                  パッケージのロード
library(rjson)

url<-paste("http://maps.google.com/          Google Geocoding API 用URLを
maps/api/geocode/json?address=",                     作成する。
RCurl::curlEscape("東京都台東区元浅草3
丁目1-1"), "&sensor=false&region=JP
&language=ja", sep="")
                                            Geocodingのjson情報を取得する。
json<-RCurl::getURL(url)
if(rjson::.fromJSON_R(json)$status ==
"OK"){
lat<-
                                            取得したjsonデータをパースして
rjson::.fromJSON_R(json)$results[[1]]$geo
                                                  緯度を取得
metry$location$lat
}
やることリスト
1.   ロー○ンの住所リストを集める
2.   住所を位置情報に変換する
3.   TSPを解いて経路を求める
4.   地図上に経路を可視化する
巡回セールスマン問題(TSP)
• 地図上の各点をすべて回り、元の出発点
  に戻る最短経路を求める問題。
                 •ノード間の距離を定
                 義、制約条件の元で最
                 小化する問題
                 •NP困難
                 •ヒューリスティック
                 を使って解く




   TSPパッケージを使えば簡単に解ける!
TSPパッケージ
• RでTSP問題を解くためのパッケージ
                                                     指定可能なアル
                                                       ゴリズム
dist(mat)        TSP                        ATSP


 距離行列より、巡                                             Nearest
 回セールスマン問                                             insertion
  題を定義する。                                             fartherest
                       Solve_TSP(TSP or ATSP)
                                                      cheapest
TSPもしくはATSPを受け                                        arbitrary
取り、methodを指定し                  TOUR
    てTSPを解く                                           2-opt

                                                最短経路の解を
                                                 表すクラス
TSPの解法例(2-opt法)
TSPの解法例(2-opt法)
• 2-opt法、ランダムに作成した経路を入れ
  替えて、最適化する方法
TSPの解法例(2-opt法)
• 2-opt法、ランダムに作成した経路を入れ
  替えて、最適化する方法




  ①ランダムに経路を作成する。
TSPの解法例(2-opt法)
• 2-opt法、ランダムに作成した経路を入れ
  替えて、最適化する方法




  ②ランダムに作成した経路は効率が悪い
TSPの解法例(2-opt法)
• 2-opt法、ランダムに作成した経路を入れ
  替えて、最適化する方法




  ②2つの辺を選択して
TSPの解法例(2-opt法)
• 2-opt法、ランダムに作成した経路を入れ
  替えて、最適化する方法




  ③改善すれば端点を入れ替える。以後、繰り返
  し。
RでTSPを解いて、
     最も良かったものを返す。
library(TSP)
                                              TSPパッケージを使用する。
Tsp<-TSP(dist(df))
methods <- c("nearest_insertion",
"cheapest_insertion", "farthest_insertion",    TSPの問題を作成する。
"arbitrary_insertion", "nn",
"repetitive_nn", "2-opt")
tours <- lapply(methods, FUN =
function(m) solve_TSP(tsp), method = m))
names(tours) <- methods                       Solve_TSP関数で問題を解く
tour_lengths <- c(sapply(tours, FUN = attr,
"tour_length"))
str(toursseq(tour_lengths)[tour_lengths==
min(tour_lengths)])
as.integer(toursseq(tour_lengths)[tour_len    最も結果の良かった経路を返す
gths==min(tour_lengths)])
やることリスト
1.   ロー○ンの住所リストを集める
2.   住所を位置情報に変換する
3.   TSPを解いて経路を求める
4.   地図上に経路を可視化する
Google Static MAP API
• Webサービスとして地図を表示する。
• マーカーや経路を書くことが出来る。




 RGoogleMapsというGoogleMapAPIのラッパーが存在す
                  る。
RでGoogleMapを使用する

library(RgoogleMaps)                         RgoogleMapsパッケージを使用す
                                                         る。
map_zoom<-MaxZoom(range(lat),
range(lon))
                                             GoogleMapAPI用に倍率、中心を
map_center<-c(mean(lat), mean(lon))
                                                      作成する。
GetMap(center=map_center,
maptype="roadmap",
marker=map_marker, zoom=map_zoom,            GoogleMapオブジェクトの取得
path=map_path)

TextOnStaticMap(MyMap,                       RのグラフィックをGoogleMapに
lat=lat[4],lon=lon[4], “samole”, add=TRUE,        上書きする。
cex=0.5)
やることリスト
1.   ロー○ンの住所リストを集める
2.   住所を位置情報に変換する
3.   TSPを解いて経路を求める
4.   地図上に経路を可視化する
結果
やったね!
おまけ
• これで与えられた条件内で問題を解決することは
  終了
→対症療法
• 問題を根本から解決し、永続的なソリューション
  で顧客にバリューを提供してこそコンサルタント
  の仕事ですよね
• 問題(ロー○ンがないので各地をさまよう)を根
  本から解決する
→解決策:最寄りがロー○ンで、かつロー○ンの多い
  土地に住む
           それ、Rで出
           来ますよ!
この中のどこに住めばよいか




            deldirと
          RGoogleMap
            を使う
           と・・・
一目瞭然




●ロー○ン
●セブンイレブン
●ファミリーマート
●サークルKサンク
ス
●ミニストップ
○その他
まとめ
• RcurlでRでクローリングができるよ!
• RjsonでJsonの解析ができるよ!
• TSPで巡回セールスマン問題が解けるよ!
• RgooglemapでR内でGoogleMAPAPIの地図が
  扱いやすくなるよ!
• Rならボロノイ分割を使った可視化も楽勝
  だね!
• PythonやめてRを使いましょう。

More Related Content

Viewers also liked

パターン認識02 k平均法ver2.0
パターン認識02 k平均法ver2.0パターン認識02 k平均法ver2.0
パターン認識02 k平均法ver2.0sleipnir002
 
パターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvqパターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvqsleipnir002
 
パターン認識 05 ロジスティック回帰
パターン認識 05 ロジスティック回帰パターン認識 05 ロジスティック回帰
パターン認識 05 ロジスティック回帰sleipnir002
 
Japan.r 2データベース
Japan.r 2データベースJapan.r 2データベース
Japan.r 2データベースsleipnir002
 
SappoRoR#5 Leafletでボロノイ図を描く
SappoRoR#5 Leafletでボロノイ図を描くSappoRoR#5 Leafletでボロノイ図を描く
SappoRoR#5 Leafletでボロノイ図を描くWakana_kudo
 
クラシックな機械学習の入門  11.評価方法
クラシックな機械学習の入門  11.評価方法クラシックな機械学習の入門  11.評価方法
クラシックな機械学習の入門  11.評価方法Hiroshi Nakagawa
 
距離と分類の話
距離と分類の話距離と分類の話
距離と分類の話考司 小杉
 
クラシックな機械学習の入門  8. クラスタリング
クラシックな機械学習の入門  8. クラスタリングクラシックな機械学習の入門  8. クラスタリング
クラシックな機械学習の入門  8. クラスタリングHiroshi Nakagawa
 
Beer vs wine by Sandip Murari
Beer vs wine by Sandip MurariBeer vs wine by Sandip Murari
Beer vs wine by Sandip MurariSandip Murari
 
変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明Haruka Ozaki
 
RとPythonによるデータ解析入門
RとPythonによるデータ解析入門RとPythonによるデータ解析入門
RとPythonによるデータ解析入門Atsushi Hayakawa
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識Katsuhiro Morishita
 
K meansによるクラスタリングの解説と具体的なクラスタリングの活用方法の紹介
K meansによるクラスタリングの解説と具体的なクラスタリングの活用方法の紹介K meansによるクラスタリングの解説と具体的なクラスタリングの活用方法の紹介
K meansによるクラスタリングの解説と具体的なクラスタリングの活用方法の紹介Takeshi Mikami
 
R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略Yohei Sato
 
いまさら聞けない機械学習の評価指標
いまさら聞けない機械学習の評価指標いまさら聞けない機械学習の評価指標
いまさら聞けない機械学習の評価指標圭輔 大曽根
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングYuichi Ito
 

Viewers also liked (20)

パターン認識02 k平均法ver2.0
パターン認識02 k平均法ver2.0パターン認識02 k平均法ver2.0
パターン認識02 k平均法ver2.0
 
パターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvqパターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvq
 
パターン認識 05 ロジスティック回帰
パターン認識 05 ロジスティック回帰パターン認識 05 ロジスティック回帰
パターン認識 05 ロジスティック回帰
 
animation1.0
animation1.0animation1.0
animation1.0
 
Japan.r 2データベース
Japan.r 2データベースJapan.r 2データベース
Japan.r 2データベース
 
はじパタLT2
はじパタLT2はじパタLT2
はじパタLT2
 
SappoRoR#5 Leafletでボロノイ図を描く
SappoRoR#5 Leafletでボロノイ図を描くSappoRoR#5 Leafletでボロノイ図を描く
SappoRoR#5 Leafletでボロノイ図を描く
 
Rmap
RmapRmap
Rmap
 
クラシックな機械学習の入門  11.評価方法
クラシックな機械学習の入門  11.評価方法クラシックな機械学習の入門  11.評価方法
クラシックな機械学習の入門  11.評価方法
 
距離と分類の話
距離と分類の話距離と分類の話
距離と分類の話
 
クラシックな機械学習の入門  8. クラスタリング
クラシックな機械学習の入門  8. クラスタリングクラシックな機械学習の入門  8. クラスタリング
クラシックな機械学習の入門  8. クラスタリング
 
Beer vs wine by Sandip Murari
Beer vs wine by Sandip MurariBeer vs wine by Sandip Murari
Beer vs wine by Sandip Murari
 
変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明
 
Rstudio事始め
Rstudio事始めRstudio事始め
Rstudio事始め
 
RとPythonによるデータ解析入門
RとPythonによるデータ解析入門RとPythonによるデータ解析入門
RとPythonによるデータ解析入門
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
 
K meansによるクラスタリングの解説と具体的なクラスタリングの活用方法の紹介
K meansによるクラスタリングの解説と具体的なクラスタリングの活用方法の紹介K meansによるクラスタリングの解説と具体的なクラスタリングの活用方法の紹介
K meansによるクラスタリングの解説と具体的なクラスタリングの活用方法の紹介
 
R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略R言語で学ぶマーケティング分析 競争ポジショニング戦略
R言語で学ぶマーケティング分析 競争ポジショニング戦略
 
いまさら聞けない機械学習の評価指標
いまさら聞けない機械学習の評価指標いまさら聞けない機械学習の評価指標
いまさら聞けない機械学習の評価指標
 
Python入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニングPython入門 : 4日間コース社内トレーニング
Python入門 : 4日間コース社内トレーニング
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 

Recently uploaded (9)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 

TSP and Geocoding on R