次元の海で溺れる

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

【leaflet,ggplot2,ggmap】いたいけな気持ちでラブホテルのデータを集めてみた

毎度お馴染みの札幌からお届けしてます。(現在5℃)
さむい。ほんとさむい。

TokyoRに行ってきました

先日、第51回TokyoRに初参戦してきました。

一緒に行った竹馬の友が会場目前にしてぽつりと

「Rよりモテそうな趣味見つけようかと思って...」

と呟いた時はどうなることかと思いましたが、
最終的には誰よりもテンション高かったので皆様への感謝が止まりません。


モテそうな趣味ってなんだよ私だってモテたいよ。(消音)


勉強になること多すぎたのでちょこちょこDocument読んだり自分でも書いてみたりしつつ、
とりあえず目下、Generated Variables使いこなせるようになりたい...


SappoRoRにも行きます

11/14(土)らしいです。

年2回目開催!!!

関係者各位よろしくお願いします。
なんか納得いく資料できたらLTやりたい..かも..しれない...

本題

今回のテーマは「ラブホテル」です。

※やましい気持ちはありません
※いやらしい気持ちはありません

極めて純粋でいたいけな気持ちです。
極めて純粋でいたいけな気持ちです。

よし。


きっかけは
TokyoRに向かう、成田空港→東京のバスの道中にて。

私「なんかラブホばっかりあってすごい」


高速道路脇にラブホ多くない?なんで?すごくない?
ってなったので、

まず
「本当に千葉の高速道路脇にはラブホが多いのか論」
について考えてみました。

前提

前回エントリとかとあんま変わんない感じで

スクレイピングやら一部手作業で千葉全域のラブホテル255件取得
②前処理
③GoogleAPIで文字列ベクトルを座標に変換
④評価点と平日一泊の料金をマージ

平日一泊の料金がうまく取得出来たものが、このうち59件だったので
今回はこれを使います。

> location_love
        lat      lon  pt price
1  35.78402 140.3352 4.5  6000
2  35.80085 139.9191 4.5  7000
3  35.85322 140.4687 4.3  3880
4  35.91815 139.9271  NA  6450
5  35.48728 140.0462 5.0  3800
6  35.84596 140.0134 4.1  5820
7  35.44062 139.9772 3.5  4400
8  35.78536 139.8991 4.0  5700
9  35.37716 139.9362 4.1  6370
10 35.68156 140.1038 4.7  7400
11 35.82681 139.9213 4.0  6388
12 35.85934 139.9741 3.6  7700
13 35.91011 139.9380 4.7  7400
14 35.84737 139.9579  NA  6800
15 35.57963 140.1280 3.6  5250
16 35.64922 140.3053 4.6  3980
17 35.68822 139.9968 4.0  5980
18 35.65481 140.1078 4.1  5800
19 35.66906 139.9244 4.8  5980
20 35.81030 139.9156 3.5  6880
21 35.68156 140.1038 4.5  7500
22 35.79517 140.0617 4.5  9050
23 35.64458 140.5003 5.0  5500
24 35.41790 139.9408 4.5  6000
25 35.56509 140.1387 4.6  7000
26 35.38031 139.9222 5.0  4800
27 35.46777 140.0390 4.3  6000
28 35.67856 140.1265 4.8  7900
29 35.68342 140.4215 4.7  6300
30 35.57499 140.3303  NA  5500
31 35.61935 140.1264 4.9  7400
32 35.91993 139.9411 4.5  6480
33 35.85748 140.0115  NA  7800
34 35.79861 140.3392 4.0  6000
36 35.71079 140.1187 4.8  8800
37 35.70744 139.9606 3.6  5370
38 35.68763 140.0023 4.7  5800
39 35.37635 139.9365 4.2  6260
40 35.59229 140.3148  NA  7450
41 35.75037 140.3781 4.0  5380
42 35.60800 140.1194 4.6  9300
43 35.90121 139.9466 4.0  7500
44 35.41957 139.9433 4.2  6000
45 35.66947 140.1173 3.2  6800
46 35.66839 139.9241 5.0  7800
47 35.91281 139.9435 4.2  4970
48 35.68868 139.9975 3.7  5670
49 35.83821 139.9435 3.0  6500
50 35.78668 139.9019 4.8  5400
52 35.61221 140.1217 3.8  7300
53 35.67308 140.1259 4.5  7200
54 35.60908 140.1227 4.5  6500
55 35.44983 139.9938 4.0  5100
56 35.74332 140.0629  NA  8970
57 35.68150 140.1256 4.7  5900
58 35.61909 140.1259 4.5  5400
59 35.81782 139.9265 4.5  7500

{leaflet}で見てみる

まず{leaflet}に点を打ってみる。

>library(leaflet)
>m <- leaflet() %>% setView(lng = tokyo_station[,1], lat = tokyo_station[,2], zoom = 12)
>m %>% 
  addProviderTiles("CartoDB.Positron") %>% 
  addMarkers(data = location_love,~lon, ~lat,popup=~as.character(price)) 


f:id:WAFkw:20151014212242p:plain


※leafletほんとはぐりぐり動くんだけど静止画でごめんなさい...
※popupには平日一泊の料金が出るようにしてみました。

これを見ると!
高速道路&幹線道路沿いにきれいにならんでいるように見えます。

{ggmap}で見てみる

さらに詳細な道路情報とかが気になるので、{ggmap}ことgooglemapを使って見てみる。

>tokyo_map <- ggmap::get_googlemap(center = c(lon =tokyo_station[,1] , lat = tokyo_station[,2]),
                                    zoom = 9, scale = 2,maptype = "roadmap",color ="color")

>love_map<-ggmap::ggmap(tokyo_map)+geom_point(data=location_love,aes(x=lon,y=lat,colour="red"),size=5);love_map

f:id:WAFkw:20151014212349p:plain

love_mapとかいう最高のオブジェクト名...
marker引数使うの忘れてた...

こっちで見ると、黄色いラインである高速道路、幹線道路沿いなのがはっきり見て取れますね


総合すると

高速道路&幹線道路 + 松戸・柏エリア

にいわゆるラブホテルが分布してる感じでしょうか。

なんかあまりにも綺麗に道路沿いすぎて怖いぞラブホテル...
なんでこんなに道路沿いなの...みんな車なの...?

おまけ

評価点とかって、実は一泊の値段の単回帰とかであっさり予測できたりして!!!という
私の邪な期待はこんな感じで裏切られました。

>d <- ggplot2::ggplot(location_love, aes(price, pt))
>d+stat_binhex(bins = 10)

f:id:WAFkw:20151014215405p:plain

そんな単純な話じゃなさそうだ...

ICからの距離とか、繁華街からの距離、
築年数とか設備とかの要素も絡んで来るのかな-なんて。

引き続きなんか考えます。

おまけ2

今回使ったラブホテルたちの価格帯をヒストグラムなんぞにしてみました。
千葉の方、参考にしてください。

> summary(location_love$price) #中央値平均値などなど

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   3800    5670    6300    6405    7400    9300 

>library(ggthemes)
ggplot(location_love,aes(x=price,y= ..density..))+
  geom_histogram(alpha = 0.3,binwidth=500,fill="red")+
  geom_density(aes(colour="red",fill="red"),alpha=0.1,size=1.5)+
 xlim(2500,10500)+
  ggthemes::theme_solarized()

#透過はalpha引数
#{ggthemes}でplotにthemeを適用

#Generated Variablesはこういう使い方で良いのかな...

f:id:WAFkw:20151014235006p:plain

追記

ヒストグラムのサイドが切れてしまっていてむむむ、と思っていたら
@berobero11さんに教えて頂きました。qiita.com


xlim()で最小値、最大値に余裕をもたせると
端っこが切れない!!たしかに!!すごい!!

ということでヒストグラムを切れてないタイプに差し替えてます。

さらに追記

最後のヒストグラム

ヒストグラムの色とdensityの線の色を同じにできなくて、はて???
colourって普通に入れちゃだめだっけ?aesでくくんなきゃだめ?はて??ってなって謎のコードにしていたところ、
twitterにて助けて頂いたので...



(感動のわかりやすさ)
(元気のない日に読み返しまくった)

よって直します。

histgarmは変わらず。

geom_lineで線を引いてから、線なしのdensityを重ねて中に色をつけてます。
そしたらalpha指定も思うがまま!!!

ggplot(location_love,aes(x=price,y= ..density..))+
  geom_histogram(alpha=0.3, binwidth=500,fill="red") +
  geom_line(stat = "density", colour="red", alpha=0.3, size=1.5) +
  geom_density(colour = "transparent", fill="red", alpha=0.3)+
  xlim(2500,10500)+
  ggthemes::theme_solarized()

f:id:WAFkw:20151027210440p:plain


できたーー
わーーーい


ビジネスホテルの値段とかもそうだけど、
キリの悪い値段設定なんてなかなかないので、
binwidthで500円単位にカウントしないとスカスカになっちゃうなあ


おわり

私だってラブホテルを利用するチャンスがあれば現地調・・・ry

現場からは以上です。ご査収ください。