リモートも増えて来たので
会社から2時間以内で行ける駅を
探してみようと思いました。
解説動画はこちら
今回は会社から2時間圏内の場所を
探してみようということで
会社から2時間以内で行ける駅を
探してみようと思いました。
解説動画はこちら
今回は会社から2時間圏内の場所を
探してみようということで
いい感じのものは無いかなーと探していたら
NAVITIMEのAPIが使えるみたいですね。
これは起点となる駅からXX分以内で
行ける駅と緯度経度を取得できるという
素敵なAPIでした。
これを使って
NAVITIMEのAPIが使えるみたいですね。
これは起点となる駅からXX分以内で
行ける駅と緯度経度を取得できるという
素敵なAPIでした。
ここら辺から参照してね
これを使って
NAVITIMEのAPIから該当する駅を取得するコードを
書いていきましょう。
なおこのコードを動かすには
書いていきましょう。
なおこのコードを動かすには
APIキーが必要です。
無料で取得できますんで、ここは自分で
取得して下さいね!!!
コードはこんな感じです
今回は起点となる駅を新橋駅にしています。無料で取得できますんで、ここは自分で
取得して下さいね!!!
コードはこんな感じです
import requests
# NAVITIMEのAPI
url = "https://navitime-reachable.p.rapidapi.com/reachable_transit"
# 基点の緯度経度(今回は新橋駅)
base_loc = "35.667272,139.758786"
# かかる分数
term = "120"
## API_KEY (登録が必要)
# api_key # ここは自分で取得して設定してね
query_str = {
"start":base_loc,
"term":term,
"term_from":"0",
"walk_speed":"5",
"transit_limit":"3",
"offset":"0",
"limit":"2000",
"datum":"wgs84",
"coord_unit":"degree",
}
headers = {
'x-rapidapi-host' : "navitime-reachable.p.rapidapi.com",
'x-rapidapi-key' : api_key # ここは自分で取得して設定してね
}
res = requests.request("GET", url, headers=headers, params=query_str)日本のサラリーマンの中心ですからね。
ここら辺に勤めている人も多いはず
変えたい方は緯度経度の指定の部分(base_loc)を
変えてください。
なお3時間でも良いという方は
term(120)を180に変えてくださいね。
さてこのコードを動かすと、120分以内の
駅群が取得出来ます。
APIから取得した駅をデータフレームにして
使えるようにしましょう。
# データ化
items = res.json()['items']
data = []
for item in items:
time = item['time']
lat = item['coord']['lat']
lon = item['coord']['lon']
name = item['name']
node_id = item['node_id']
transit_count = item['transit_count']
tmp = [name,node_id,time,transit_count,lat,lon]
data.append(tmp)
# データフレームの作成
import pandas as pd
df = pd.DataFrame(data,columns=['駅名','駅ID','時間','乗換回数','緯度','経度'])
df.head()

綺麗な表形式のデータフレームに直しました。
これで使いやすくなります。
これを眺めるのも良いですが
やはり緯度経度が有るので
地図にプロットしたいですよね。
Foliumを使えば
簡単に地図にプロッティングできます
早速コードを書いていきましょう。
なおFoliumはデフォルトのライブラリには無いので
インストールが必要です。
入れていない無い方、エラーが出る方は
インストールしてください。
Foliumを使って可視化する
import folium
from folium.features import CustomIcon
# マーカー用の関数
def make_maker(r,color):
tmp = folium.Marker(
location = [r['緯度'],r['経度']],
popup = '{0} : {1}分'.format(r['駅名'],r['時間']),
icon = folium.Icon(color=color))
return tmp
# 地図生成
lat,lon = float(base_loc.split(',')[0]),float(base_loc.split(',')[1])
plot_map = folium.Map(location=[lat,lon] , zoom_start=8)
group1 = folium.FeatureGroup(name="60分以内").add_to(plot_map)
group2 = folium.FeatureGroup(name="120分以内").add_to(plot_map)
# 起点マーカーの書き込み
folium.Marker(
location = [lat,lon],
popup = '{0} : {1}分'.format('新橋駅',0),
icon = folium.Icon(color='green')).add_to(plot_map)
# マーカーの書き込み
for i, r in df[df['時間']<=60].iterrows():
group1.add_child(make_maker(r,'blue'))
for i, r in df[(df['時間']>60)].iterrows():
group2.add_child(make_maker(r,'red'))
# 判例コントローラー表示
folium.LayerControl().add_to(plot_map)
# HTMLファイルへ書き込み
plot_map.save("eki_maps.html")
なおこのコードは起点が新橋駅なので
変えたい方は関係するコード部分を
書き換えてくださいね。
これを実行すると
HTMLファイルが作成されます。
早速見ていきましょう。

青マーカーが1時間以内
赤マーカーが2時間以内の駅です
右上のマーカーから絞り込みが出来ます。

60分以内のみ

61-120分のみ

緑色のマーカーが起点の新橋駅です。
これで見ると
結構遠くまで行けますねえ
最北端や最西端は新幹線でしょうねえ
流石にここら辺は厳しいかもしれませんが
千葉や埼玉、神奈川は結構行けるところありますね。
ここら辺から引越しの候補が
見つかるかもしれません。
伊東辺りまで行けそうなので
温泉街に住むのもアリかもしれません!!
APIをうまく使えば
もう少し絞り込めるので
色々と遊んでみると良いと思います。
今回はこれまでです
それでは。

コメントする