【leaflet】ラブホマップ(改)~orverpass turboを添えて~
R Advent Calendar 2015 - Qiita 16日目の記事です。
初めてなので勝手が分からない。。
今回のテーマ
これの続きをやります。
ただやるだけだと日々進歩の無い人間だということが露呈してしまうので
小さいテーマとして
- シェープファイルの属性テーブルに別なデータをマージしてみる
- 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)
とりあえず描けました。
うーん
南東側は地価の変化がほとんど無いのでコロプレス感が出ませんでした。
肝心のラブホも地価の高い千葉、松戸あたりに集中しているかといえばそうでもない、、
かといって郊外にあるかといえばそうでもない、、といった感じです。
気を取り直して、
学校のそばにラブホは置けないんじゃないか説を考えてみます。
噂によると200M離さないといけないらしい...ほう...?
orverpass turboから学校のデータを抽出編
先日縁あってFOSS4Gの会に混ぜて頂いたのですが、
そこで「ジオコーディングが手間ならoverpass turboのタグで抜けばいいじゃない」みたいな話が出たのでやってみます。
overpass turbo 、みんな大好きopenstreetmapのデータを抜いてくることが出来ます。
Rでは無いので深くは語りませんがこんな感じ、、
学校のデータを抜きたいので「amenity="school"」のタグを指定、
千葉付近だけでいいので範囲指定をします。
これで実行するとデータが抜いてこれるのですが、そのとき右ウィンドウに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)
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")
近づく
確かに200Mくらいは離れている気がしなくもない。
が。
ここからは「半径200Mの円」みたいなものが欲しくなる...
うう...
amenity="school"だと予備校や塾が稀に混ざってくるので、
その辺をうまいことクエリで弾いてあげられたらもっと分かりやすいのかもしれない。
修行します。
まとめ
今回はここまでで力尽きました。いいのかこんなことで...
ラブホの立地の奥深さが分かって頂けたでしょうか。
私的にはさらに謎が深まってきてます。
なんとなく直感的に
「ラブホっぽい立地」とか「この建物ラブホだろたぶん」みたいな
そういう感覚はあるもので、
その「っぽさ」が何なのか、個人的には大変気になります。
まじめ。
おわり
アドベントカレンダーなのにお恥ずかしい限り。