首都圏のJR乗降者数ランキング上位を地図にプロットし様子を見てみる
どのあたりが通勤圏内なのか
JR東日本は毎年、乗降者数ランキングをweb上にアップしています。
www.jreast.co.jp
今回は上記データを用いて、首都圏の乗降者数トップ100がどのあたりに集中しているのかを、Rを使って図示してみたいと思います。
使うパッケージ、データ取得
今回の図示のために用いるパッケージは下記の通りです。
{rvest}…スクレイピングする際に用います
{dplyr}…データ前処理に用います
{ggmap}…地名から、経度・緯度を調べる際に用います
{leaflet}…地図に図示する際に用います
早速、webページからデータを取得していきます。
library(rvest) library(dplyr) library(ggmap) library(leaflet) station<-read_html("https://www.jreast.co.jp/passenger/")#htmlソースを取得 table<-html_table(station,fill=TRUE)#htmlソースの中からテーブルのみ抽出 table1<-table[[1]]%>%as.data.frame(header=F)#1位〜50位 table1<-table1[-1,]#行名削除 table2<-table[[2]]%>%as.data.frame(header=F)#51位〜100位 table2<-table2[-1,]#行名削除 tablebind<-rbind(table1,table2)#1位〜100位 eki<-c("駅") tablebind$駅名<-paste(tablebind$駅名,eki,sep="")#駅名に「駅」を付ける
これで、1位〜100位までのテーブルが作成できました。
経度・緯度の取得
上記データには駅名は乗っていても、経度・緯度の情報がなくこのままでは地図にプロットできません。そこで、{ggmap}のgeocode()というコマンドを使って緯度・経度を調べます。geocode()は、GoogleのAPIを用いて経度・緯度を調べるもののため、GoogleのAPIkeyが必要になります。
register_google(key="***")#取得したkey has_google_key()#APIが使えるかの確認 address<-geocode(tablebind$駅名)#経度・緯度を駅名から算出 tablebind<-cbind(tablebind,address)#経度・緯度を元テーブルに結合 names(tablebind)<-c("rank","station","定期外","定期内","sum","前年比","lon","lat")#テーブル名を付ける。「sum」が乗降人数合計
図示
経度・緯度の情報と、乗降人数を用いて地図上にプロットします。
ここで、取得したテーブルの情報はすべて文字列になっているため、それを数値に変換する処理をします。
tablebind$sum<-as.numeric(gsub(",","",tablebind$sum))#数値に変えるために、カンマを削除 pal<-colorNumeric("YlGnBu",domain=tablebind$sum) tablebind%>%leaflet()%>%addTiles()%>% addCircleMarkers(lng = ~lon, lat = ~lat,color=~pal(sum),radius=10,weight=10,stroke=F,opacity=0,fillOpacity=0.5)%>% addLegend(position="topright",pal=pal,values=~sum,title="2018年JRの乗降人数")
色が付いているのが、乗降者数上位100駅がある地域です。東西南北の端を見てみると、
東…千葉駅
西…八王子駅
南…平塚駅
北…大宮駅 でした。平塚駅なんかは首都圏まで1時間くらいかかるのに乗降者数が多いですね。
※トップ100には仙台駅が含まれますが除外しました
地域を都内付近に縮めました。当たり前ですが、新宿や池袋、渋谷、東京、品川あたりが乗降者数が多いです。