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

次元の海で溺れる

Rとデータ解析と統計手法たちとわたし

【leaflet】ラブホマップ(改)~orverpass turboを添えて~

R Advent Calendar 2015 - Qiita 16日目の記事です。

初めてなので勝手が分からない。。

今回のテーマ

これの続きをやります。

wafdata.hatenablog.com


ただやるだけだと日々進歩の無い人間だということが露呈してしまうので
小さいテーマとして

  • シェープファイルの属性テーブルに別なデータをマージしてみる
  • overpass turbo なるものからデータを抜いてみる

みたいなことを掲げてみる。小さな一歩。

そもそもなんでラブホだったんだっけ

「千葉県の高速道路、幹線道路脇にラブホ多くないですか?なんで?」
という中学生レベルの疑問から始まっただけのラブホテルプロットです。

しかしその後

「地価との関連はどうなんだい」とか
「子供の多いところには作れないんじゃないかい」とか

どんどん疑問は湧いてくるものなので
全部まとめて今回やってみます。

相変わらず千葉県を引き合いに出します。

シェープファイルの属性テーブルに市町村ごとの地価を追加してみる編


地球地図日本のデータ|国土地理院 このシェープファイル
地価調査・地価公示/千葉県 この地価データを足します。

別にRでやる必要もないといえば無いんですけど、、Rあどべんとだし、、

library(leaflet)
library(rgdal)
library(magrittr)
library(maptools)
library(dplyr)

#シェープファイルの読み込み
> city <- readShapePoly("polbnda_jpn.shp")

#なんとなく概要
> str(city,list.len = 3)

Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
  ..@ data       :'data.frame':	2924 obs. of  9 variables:
  .. ..$ f_code  : Factor w/ 1 level "FA001": 1 1 1 1 1 1 1 1 1 1 ...
  .. ..$ coc     : Factor w/ 1 level "JPN": 1 1 1 1 1 1 1 1 1 1 ...
  .. ..$ nam     : Factor w/ 50 levels "AICHI","Aichi Ken",..: 14 14 14 14 14 14 14 14 14 14 ...
  .. .. [list output truncated]
  .. ..- attr(*, "data_types")= chr [1:9] "C" "C" "C" "C" ...
  ..@ polygons   :List of 2924
  .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
  .. .. .. ..@ Polygons :List of 1
  .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
  .. .. .. .. .. .. ..@ labpt  : num [1:2] 148.6 45.4
  .. .. .. .. .. .. ..@ area   : num 0.0863
  .. .. .. .. .. .. ..@ hole   : logi FALSE
  .. .. .. .. .. .. .. [list output truncated]
  .. .. .. ..@ plotOrder: int 1
  .. .. .. ..@ labpt    : num [1:2] 148.6 45.4
  .. .. .. .. [list output truncated]
  .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
  .. .. .. ..@ Polygons :List of 1
  .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
  .. .. .. .. .. .. ..@ labpt  : num [1:2] 141.8 45.3
  .. .. .. .. .. .. ..@ area   : num 0.0875
  .. .. .. .. .. .. ..@ hole   : logi FALSE
  .. .. .. .. .. .. .. [list output truncated]
  .. .. .. ..@ plotOrder: int 1
  .. .. .. ..@ labpt    : num [1:2] 141.8 45.3
  .. .. .. .. [list output truncated]
  .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
  .. .. .. ..@ Polygons :List of 1
  .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
  .. .. .. .. .. .. ..@ labpt  : num [1:2] 141 45.4
  .. .. .. .. .. .. ..@ area   : num 0.00935
  .. .. .. .. .. .. ..@ hole   : logi FALSE
  .. .. .. .. .. .. .. [list output truncated]
  .. .. .. ..@ plotOrder: int 1
  .. .. .. ..@ labpt    : num [1:2] 141 45.4
  .. .. .. .. [list output truncated]
  .. .. [list output truncated]
  ..@ plotOrder  : int [1:2924] 673 10 41 97 1187 46 87 544 981 347 ...
  .. [list output truncated]


#属性テーブル部分はこんな感じ

> city@data[1:10,]

  f_code coc       nam              laa       pop  ypc adm_code salb soc
0  FA001 JPN Hokkai Do   Shibetoro Mura -99999999    0    01700  UNK JPN
1  FA001 JPN Hokkai Do     Wakkanai Shi     41592 2005    01214  UNK JPN
2  FA001 JPN Hokkai Do        Rebun Cho      3410 2005    01517  UNK JPN
3  FA001 JPN Hokkai Do       Shana Mura -99999999    0    01699  UNK JPN
4  FA001 JPN Hokkai Do   Sarufutsu Mura      2940 2005    01511  UNK JPN
5  FA001 JPN Hokkai Do     Toyotomi Cho      4850 2005    01516  UNK JPN
6  FA001 JPN Hokkai Do  Rishirifuji Cho      3239 2005    01519  UNK JPN
7  FA001 JPN Hokkai Do      Rishiri Cho      2951 2005    01518  UNK JPN
8  FA001 JPN Hokkai Do Hamatonbetsu Cho      4582 2005    01512  UNK JPN
9  FA001 JPN Hokkai Do     Rubetsu Mura -99999999    0    01698  UNK JPN


#千葉

> head(filter(tmp,nam=="Chiba Ken"),6)
  f_code coc       nam            laa    pop  ypc adm_code salb soc
1  FA001 JPN Chiba Ken       Noda Shi 151240 2005    12208  UNK JPN
2  FA001 JPN Chiba Ken     Katori Shi  87332 2005    12236  UNK JPN
3  FA001 JPN Chiba Ken    Kashiwa Shi 380963 2005    12217  UNK JPN
4  FA001 JPN Chiba Ken Nagareyama Shi 152641 2005    12220  UNK JPN
5  FA001 JPN Chiba Ken   Kozaki Machi   6705 2005    12342  UNK JPN
6  FA001 JPN Chiba Ken     Narita Shi 121139 2005    12211  UNK JPN

namに都道府県名、laaに市町村名、そしてadm_codeが市町村と一対のようです。
でもってこの行順序は入れ替えると悲惨なことになるので、
今回はadm_codeをKeyにデータを紐付けることに。

で、肝心の地価データ(PDF)→データ化は、ごたごたごたごたしたあげく泣く泣く手作業とか入れたので割愛しますが
もう地価データにadm_codeを振ってしまって、
それを本体のadm_codeとJOINして、NAを0に置換してテーブルに追加しました。

>city$Chiba_chika <- temp
>subset(city@data,nam=="Chiba Ken")

     f_code coc       nam                   laa       pop  ypc adm_code salb soc Chiba_Chika
760   FA001 JPN Chiba Ken              Noda Shi    151240 2005    12208  UNK JPN       61900
818   FA001 JPN Chiba Ken            Katori Shi     87332 2005    12236  UNK JPN       36600
827   FA001 JPN Chiba Ken           Kashiwa Shi    380963 2005    12217  UNK JPN      155200
831   FA001 JPN Chiba Ken        Nagareyama Shi    152641 2005    12220  UNK JPN      125100
833   FA001 JPN Chiba Ken          Kozaki Machi      6705 2005    12342  UNK JPN           0
836   FA001 JPN Chiba Ken            Narita Shi    121139 2005    12211  UNK JPN       49700
837   FA001 JPN Chiba Ken             Abiko Shi    131205 2005    12222  UNK JPN      100000
847   FA001 JPN Chiba Ken           Sakae Machi     24377 2005    12329  UNK JPN       35600
855   FA001 JPN Chiba Ken         Tonosho Machi     16166 2005    12349  UNK JPN       16400
858   FA001 JPN Chiba Ken           Matsudo Shi    472579 2005    12207  UNK JPN      176300
859   FA001 JPN Chiba Ken             Inzai Shi     81102 2005    12231  UNK JPN       52200
862   FA001 JPN Chiba Ken            Shiroi Shi     53005 2005    12232  UNK JPN       66700
868   FA001 JPN Chiba Ken           Sakae Machi -89999999 2005    12329  UNK JPN       35600
870   FA001 JPN Chiba Ken            Choshi Shi     75020 2005    12202  UNK JPN       43700
875   FA001 JPN Chiba Ken            Tako Machi     16950 2005    12347  UNK JPN       17100
878   FA001 JPN Chiba Ken             Asahi Shi -89999999 2005    12215  UNK JPN       38500
879   FA001 JPN Chiba Ken          Kamagaya Shi    102812 2005    12224  UNK JPN       95700
882   FA001 JPN Chiba Ken         Funabashi Shi    569835 2005    12204  UNK JPN      178900
887   FA001 JPN Chiba Ken             Asahi Shi     70643 2005    12215  UNK JPN       38500
889   FA001 JPN Chiba Ken           Yachiyo Shi    180729 2005    12221  UNK JPN      115000
899   FA001 JPN Chiba Ken          Tomisato Shi     51370 2005    12233  UNK JPN       38200
900   FA001 JPN Chiba Ken          Ichikawa Shi    466608 2005    12203  UNK JPN      250000
901   FA001 JPN Chiba Ken       Shibayama Machi      8389 2005    12409  UNK JPN       15100
907   FA001 JPN Chiba Ken            Sakura Shi    171246 2005    12212  UNK JPN       67100
910   FA001 JPN Chiba Ken              Sosa Shi     42086 2005    12235  UNK JPN       34100
911   FA001 JPN Chiba Ken          Shisui Machi     21385 2005    12322  UNK JPN       42200
912   FA001 JPN Chiba Ken         Funabashi Shi -89999999 2005    12204  UNK JPN      178900
916   FA001 JPN Chiba Ken         Funabashi Shi -89999999 2005    12204  UNK JPN      178900
933   FA001 JPN Chiba Ken Yokoshibahikari Machi     25981 2005    12410  UNK JPN       14000
938   FA001 JPN Chiba Ken         Yachimata Shi     75735 2005    12230  UNK JPN       33600
939   FA001 JPN Chiba Ken             Chiba Shi    924319 2005    12100  UNK JPN      147600
942   FA001 JPN Chiba Ken         Narashino Shi    158785 2005    12216  UNK JPN      170900
944   FA001 JPN Chiba Ken        Yotsukaido Shi     84770 2005    12228  UNK JPN       68600
959   FA001 JPN Chiba Ken             Sanmu Shi     59024 2005    12237  UNK JPN       13300
963   FA001 JPN Chiba Ken          Ichikawa Shi -89999999 2005    12203  UNK JPN      250000
964   FA001 JPN Chiba Ken         Funabashi Shi -89999999 2005    12204  UNK JPN      178900
966   FA001 JPN Chiba Ken           Urayasu Shi    155290 2005    12227  UNK JPN      300700
991   FA001 JPN Chiba Ken            Togane Shi     61701 2005    12213  UNK JPN       39200
1001  FA001 JPN Chiba Ken             Sanmu Shi -89999999 2005    12237  UNK JPN       13300
1026  FA001 JPN Chiba Ken        Kujukuri Machi     19009 2005    12403  UNK JPN       10600
1028  FA001 JPN Chiba Ken   Oamishirasato Machi     49548 2005    12402  UNK JPN       36300
1033  FA001 JPN Chiba Ken          Ichihara Shi    280255 2005    12219  UNK JPN       48900
1042  FA001 JPN Chiba Ken            Togane Shi -89999999 2005    12213  UNK JPN       39200
1061  FA001 JPN Chiba Ken            Mobara Shi     93260 2005    12210  UNK JPN       44600
1066  FA001 JPN Chiba Ken          Nagara Machi      8564 2005    12426  UNK JPN           0
1072  FA001 JPN Chiba Ken         Sodegaura Shi     59108 2005    12229  UNK JPN       36500
1074  FA001 JPN Chiba Ken         Shirako Machi     12850 2005    12424  UNK JPN       12900
1101  FA001 JPN Chiba Ken          Kisarazu Shi    122234 2005    12206  UNK JPN       33400
1104  FA001 JPN Chiba Ken           Chosei Mura     14543 2005    12423  UNK JPN       14400
1108  FA001 JPN Chiba Ken          Chonan Machi      9824 2005    12427  UNK JPN       12100
1115  FA001 JPN Chiba Ken       Mutsuzawa Machi -89999999 2005    12422  UNK JPN           0
1127  FA001 JPN Chiba Ken       Mutsuzawa Machi      7838 2005    12422  UNK JPN           0
1129  FA001 JPN Chiba Ken      Ichinomiya Machi     11656 2005    12421  UNK JPN       18900
1140  FA001 JPN Chiba Ken           Kimitsu Shi     90977 2005    12225  UNK JPN       35000
1151  FA001 JPN Chiba Ken            Futtsu Shi     50162 2005    12226  UNK JPN       18400
1160  FA001 JPN Chiba Ken             Isumi Shi     42305 2005    12238  UNK JPN       19700
1173  FA001 JPN Chiba Ken           Otaki Machi     11514 2005    12441  UNK JPN        8992
1177  FA001 JPN Chiba Ken            Futtsu Shi -89999999 2005    12226  UNK JPN       18400
1181  FA001 JPN Chiba Ken            Futtsu Shi -89999999 2005    12226  UNK JPN       18400
1211  FA001 JPN Chiba Ken          Katsuura Shi     22198 2005    12218  UNK JPN       30800
1216  FA001 JPN Chiba Ken          Onjuku Machi      7942 2005    12443  UNK JPN       19700
1231  FA001 JPN Chiba Ken          Kamogawa Shi     36475 2005    12223  UNK JPN       26700
1245  FA001 JPN Chiba Ken          Kyonan Machi      9778 2005    12463  UNK JPN           0
1254  FA001 JPN Chiba Ken        Minamiboso Shi     44763 2005    12234  UNK JPN           0
1281  FA001 JPN Chiba Ken          Tateyama Shi     50527 2005    12205  UNK JPN       33800

地価データ編描画

leafletパッケージのcolorNumeric()に色を決めてもらって、市町村単位でのコロプレス図にします。(千葉だけ)
欠損値0だけ分かりやすくしたいので、今回は別指定。

#色決め
> x<-city@data$Chiba_chika
> colset<-colorNumeric("Oranges", domain = range(x))
> city$color<- colset(x)
> city$color<- gsub("#FFF5EB","#C6C6C6",city$color)

#描くよ
leaflet() %>%
  addTiles() %>%
  addPolygons(data = city, color = ~color, fillOpacity = 0.8, stroke = FALSE) %>% 
  addCircles(data=location_love,~lon, ~lat,color = "#DA6272",fillColor="#DA6272",fillOpacity = 1,weight=8)

f:id:WAFkw:20151216001625p:plain


とりあえず描けました。

うーん
南東側は地価の変化がほとんど無いのでコロプレス感が出ませんでした。
肝心のラブホも地価の高い千葉、松戸あたりに集中しているかといえばそうでもない、、
かといって郊外にあるかといえばそうでもない、、といった感じです。

気を取り直して、
学校のそばにラブホは置けないんじゃないか説を考えてみます。

噂によると200M離さないといけないらしい...ほう...?

orverpass turboから学校のデータを抽出編

先日縁あってFOSS4Gの会に混ぜて頂いたのですが、
そこで「ジオコーディングが手間ならoverpass turboのタグで抜けばいいじゃない」みたいな話が出たのでやってみます。

overpass turbo 、みんな大好きopenstreetmapのデータを抜いてくることが出来ます。
Rでは無いので深くは語りませんがこんな感じ、、


f:id:WAFkw:20151216003526p:plain

学校のデータを抜きたいので「amenity="school"」のタグを指定、
千葉付近だけでいいので範囲指定をします。

f:id:WAFkw:20151216003938p:plain

これで実行するとデータが抜いてこれるのですが、そのとき右ウィンドウにleafletで表示してくれたりもします。。
(もうこれでいいじゃん。。たのしい。。って3回思った。)

最初に全量抜いたらメモリクラッシュしたのでクエリをいじってnodeだけ取得してます。
タイムアウトエラーが出てしまう時は[timeout:25]で秒数をいじるが吉。


抜いたデータをgeoJSON形式でエクスポートしていざRへ。

>library(jsonlite)
>json<- fromJSON("school_chiba.geoJSON",simplifyVector = FALSE)

> str(json,list.len = 10)
List of 5
 $ type     : chr "FeatureCollection"
 $ generator: chr "overpass-turbo"
 $ copyright: chr "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
 $ timestamp: chr "2015-12-07T14:19:02Z"
 $ features :List of 1804
  ..$ :List of 4
  .. ..$ type      : chr "Feature"
  .. ..$ id        : chr "node/287177884"
  .. ..$ properties:List of 3
  .. .. ..$ @id    : chr "node/287177884"
  .. .. ..$ amenity: chr "school"
  .. .. ..$ name   : chr "予備校ARROWS"
  .. ..$ geometry  :List of 2
  .. .. ..$ type       : chr "Point"
  .. .. ..$ coordinates:List of 2
  .. .. .. ..$ : num 140
  .. .. .. ..$ : num 35.6
  ..$ :List of 4
  .. ..$ type      : chr "Feature"
  .. ..$ id        : chr "node/287177898"
  .. ..$ properties:List of 3
  .. .. ..$ @id    : chr "node/287177898"
  .. .. ..$ amenity: chr "school"
  .. .. ..$ name   : chr "予備校IE"
  .. ..$ geometry  :List of 2
  .. .. ..$ type       : chr "Point"
  .. .. ..$ coordinates:List of 2
  .. .. .. ..$ : num 140
  .. .. .. ..$ : num 35.6
  ..$ :List of 4
  .. ..$ type      : chr "Feature"
  .. ..$ id        : chr "node/288080952"
  .. ..$ properties:List of 3
  .. .. ..$ @id    : chr "node/288080952"
  .. .. ..$ amenity: chr "school"
  .. .. ..$ name   : chr "千葉県生実学校"
  .. ..$ geometry  :List of 2
  .. .. ..$ type       : chr "Point"
  .. .. ..$ coordinates:List of 2
  .. .. .. ..$ : num 140
  .. .. .. ..$ : num 35.6
  ..$ :List of 4
  .. ..$ type      : chr "Feature"
  .. ..$ id        : chr "node/288135655"
  .. ..$ properties:List of 3
  .. .. ..$ @id    : chr "node/288135655"
  .. .. ..$ amenity: chr "school"
  .. .. ..$ name   : chr "しおのめ研修塾"
  .. ..$ geometry  :List of 2
  .. .. ..$ type       : chr "Point"
  .. .. ..$ coordinates:List of 2
  .. .. .. ..$ : num 140
  .. .. .. ..$ : num 35.5
  ..$ :List of 4
  .. ..$ type      : chr "Feature"
  .. ..$ id        : chr "node/288378947"
  .. ..$ properties:List of 3
  .. .. ..$ @id    : chr "node/288378947"
  .. .. ..$ amenity: chr "school"
  .. .. ..$ name   : chr "チャイルド自由学園"
  .. ..$ geometry  :List of 2
  .. .. ..$ type       : chr "Point"
  .. .. ..$ coordinates:List of 2
  .. .. .. ..$ : num 140
  .. .. .. ..$ : num 35.6
  ..$ :List of 4
  .. ..$ type      : chr "Feature"
  .. ..$ id        : chr "node/288715924"
  .. ..$ properties:List of 3
  .. .. ..$ @id    : chr "node/288715924"
  .. .. ..$ amenity: chr "school"
  .. .. ..$ name   : chr "椎名小学校"
  .. ..$ geometry  :List of 2
  .. .. ..$ type       : chr "Point"
  .. .. ..$ coordinates:List of 2
  .. .. .. ..$ : num 140
  .. .. .. ..$ : num 35.5
  ..$ :List of 4
  .. ..$ type      : chr "Feature"
  .. ..$ id        : chr "node/289041896"
  .. ..$ properties:List of 4
  .. .. ..$ @id       : chr "node/289041896"
  .. .. ..$ amenity   : chr "school"
  .. .. ..$ created_by: chr "Potlatch 0.10b"
  .. .. ..$ name      : chr "千葉県立浦安南高等学校"
  .. ..$ geometry  :List of 2
  .. .. ..$ type       : chr "Point"
  .. .. ..$ coordinates:List of 2
  .. .. .. ..$ : num 140
  .. .. .. ..$ : num 35.6
  ..$ :List of 4
  .. ..$ type      : chr "Feature"
  .. ..$ id        : chr "node/289052151"
  .. ..$ properties:List of 4
  .. .. ..$ @id       : chr "node/289052151"
  .. .. ..$ amenity   : chr "school"
  .. .. ..$ created_by: chr "Potlatch 0.10b"
  .. .. ..$ name      : chr "浦安市立高洲北小学校"
  .. ..$ geometry  :List of 2
  .. .. ..$ type       : chr "Point"
  .. .. ..$ coordinates:List of 2
  .. .. .. ..$ : num 140
  .. .. .. ..$ : num 35.6
  ..$ :List of 4
  .. ..$ type      : chr "Feature"
  .. ..$ id        : chr "node/390657444"
  .. ..$ properties:List of 3
  .. .. ..$ @id    : chr "node/390657444"
  .. .. ..$ amenity: chr "school"
  .. .. ..$ name   : chr "旭町小学校(Asahimachi Elementary School)"
  .. ..$ geometry  :List of 2
  .. .. ..$ type       : chr "Point"
  .. .. ..$ coordinates:List of 2
  .. .. .. ..$ : num 140
  .. .. .. ..$ : num 35.8
  ..$ :List of 4
  .. ..$ type      : chr "Feature"
  .. ..$ id        : chr "node/391376670"
  .. ..$ properties:List of 3
  .. .. ..$ @id    : chr "node/391376670"
  .. .. ..$ amenity: chr "school"
  .. .. ..$ name   : chr "若松高校"
  .. ..$ geometry  :List of 2
  .. .. ..$ type       : chr "Point"
  .. .. ..$ coordinates:List of 2
  .. .. .. ..$ : num 140
  .. .. .. ..$ : num 35.6
  .. [list output truncated]

結構な量のデータがザクザク手に入ってすごい。

leafletに直接JSON渡してしまおう!と思ったのですが
$nameの文字化け祭りに悩まされました。。あと結構遅い。。

なので諦めてこんな感じに。

>x<-1:1804

>test<-matrix(nrow=1804,ncol=2)
>for(i in 1:1804){
  test[i,1]<-json$features[[i]][[4]]$coordinates[[2]]
  test[i,2]<-json$features[[i]][[4]]$coordinates[[1]]
}

>test2<-as.data.frame(test)
>colnames(test2)<-c("lat","lon")

> head(test2)

       lat      lon
1 35.55021 140.1671
2 35.55049 140.1660
3 35.56881 140.1409
4 35.54088 140.1929
5 35.55761 140.1764
6 35.54163 140.1665


>leaflet() %>% 
  addTiles() %>% 
  addCircles(data=test2,~lon,~lat)

f:id:WAFkw:20151216005221p:plain


popup出したかったなあ。。。

まとめると

地価、ラブホ、学校データを全部乗せしてみます。

>leaflet() %>%
  addTiles() %>%
  addPolygons(data = city, color = ~color, fillOpacity = 0.8, stroke = FALSE) %>% 
  addMarkers(data=location_love,~lon, ~lat) %>% 
  addCircles(data=test2,~lon,~lat,color="#40BFB0")


f:id:WAFkw:20151216005352p:plain


近づく


f:id:WAFkw:20151216005413p:plain


確かに200Mくらいは離れている気がしなくもない。

が。

ここからは「半径200Mの円」みたいなものが欲しくなる...
うう...

amenity="school"だと予備校や塾が稀に混ざってくるので、
その辺をうまいことクエリで弾いてあげられたらもっと分かりやすいのかもしれない。
修行します。

まとめ


今回はここまでで力尽きました。いいのかこんなことで...

ラブホの立地の奥深さが分かって頂けたでしょうか。
私的にはさらに謎が深まってきてます。

なんとなく直感的に
「ラブホっぽい立地」とか「この建物ラブホだろたぶん」みたいな
そういう感覚はあるもので、
その「っぽさ」が何なのか、個人的には大変気になります。

まじめ。

おわり

アドベントカレンダーなのにお恥ずかしい限り。