お金と数字と温泉を考えるブログ

お金と数字と温泉を考えています。

首都圏の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()は、GoogleAPIを用いて経度・緯度を調べるもののため、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の乗降人数")


f:id:umejiro330:20200101141309j:plain
乗降者数ランキング上位100駅
色が付いているのが、乗降者数上位100駅がある地域です。東西南北の端を見てみると、
東…千葉駅
西…八王子駅
南…平塚駅
北…大宮駅 でした。平塚駅なんかは首都圏まで1時間くらいかかるのに乗降者数が多いですね。
※トップ100には仙台駅が含まれますが除外しました

f:id:umejiro330:20200101141806j:plain
乗降者数ランキング上位100駅(都内付近)
地域を都内付近に縮めました。当たり前ですが、新宿や池袋、渋谷、東京、品川あたりが乗降者数が多いです。