人流調査データでつくば市の通勤状況を可視化する
こんにちは。つくばに住む研究者です。
今回は人流調査データを使い、つくば市の通勤者の人流を可視化します。今回使うデータは、パーソントリップ調査データおよびそれを元にしたOD調査データです。
使用するデータについて
まず、パーソントリップ(PT)調査について簡単に説明しておきます。下記は国土交通省からの引用です。
PT調査データによって、例えば「鉄道を利用してつくば市へ通勤する人」や「鉄道を利用してつくば市から通勤する人」などの人流の様子を知ることができます。
調査データの数字の単位は”トリップ”であり、各トリップは個人の目的別の移動を示します。全数調査ではないので実際の人数を推定するにはサンプル数と母集団の大きさから計算する必要がありますので、比較等においては注意が必要になります。また、茨城県のつくば市以北の都市は首都圏PT調査のエリアに含まれていませんので、つくば市から水戸市などへの移動者やその逆方向の移動者については把握することができないなどの制限があります。
次にOD調査データについてもみてみます。OD調査とは、始点(Origin),終点(Destination)毎にトリップをまとめたものであり、PT調査の結果などをまとめて作成したものです。これらの数値情報データは国土交通省のHPからダウンロードすることができます。
今回やること
「鉄道を利用してつくば市へ通勤する人」および「鉄道を利用してつくば市から通勤する人」の2種類について数字を整理し、地図上にコロプレス図をつくって表示してみようと思います。
すなわちこんな感じの図を作成します。
図の作成のために、まずはOD量を整理します。OD調査では発着地を「ゾーン」という単位で区切っています。
今回は出発地点を「つくば市」としますが、「つくば市」はOD調査において、市内を8つの地域に分けています。これは市内でも徒歩やバスでの移動などについても調査を可能とするためです。つくば市のゾーンは下図のように区切られています。
従って「つくば市から出る人」は基本的には「上記の8つの地域を出発する人」ということになります。
コーディング
該当するゾーンの番号を東京都市圏ゾーンコード一覧から調べ、データを読み込みます。
必要なライブラリをインポートします。
!pip install --upgrade geopandas --q
!pip install japanize-matplotlib --q
from google.colab import drive
import pandas as pd
import numpy as np
import geopandas as gpd
import japanize_matplotlib
japanize_matplotlib.japanize()
drive.mount('/content/drive')
OD調査データを読み込みます。
dir_path = 'データの置き場所'
gfiles = [dir_path+'S05-b-10_SYUTO-1-g_PersonTripODAmount.shp',
dir_path+'S05-b-10_SYUTO-2-g_PersonTripODAmount.shp',
dir_path+'S05-b-10_SYUTO-3-g_PersonTripODAmount.shp']
gdf_all = gpd.GeoDataFrame(pd.concat([gpd.read_file(files, encoding='Shift-JIS') for files in gfiles]))
zones = ['5210','5211','5212','5213','5214','5215','5216','5217']
gdf = gdf_all[gdf_all['S05b_003'].isin(zones)].reset_index(drop=True)
gdf.crs = "epsg:4326"
上記では8つのゾーンから出発するすべての人が対象になっていますので、ゾーンコードをまとめた集計を計算します。
tag = 'S05b_005' #鉄道による通勤のデータのみを抽出
gdf_g = gdf.groupby(['S05b_004'],as_index=False)[[tag]].sum()
gdf_g = gdf_g.reset_index(drop=True)
OD調査データは始点と終点を結ぶ線(Linestring)のオブジェクトです。多地点を同時に見る場合に便利ですが、つくば市だけを対象に見るにはヒートマップ(コロプレス図)のほうが直感的にわかりやすいため、ゾーン形状をパーソントリップのデータから読みこみます。
gdf_pt = gpd.read_file(dir_path+'/S05-a-10_SYUTO-g_Occurred_ConcentratedTrafficVolumeOfPersonTrip.shp',encoding='shift-jis')
gdf_pt.crs = "epsg:4326"
gdf_pt = gdf_pt[gdf_pt['S05a_003']=='1'].reset_index(drop=True)
gdf_pt.head(3)
ゾーン形状をもったデータフレームに、先程集計した「つくばから出る鉄道利用の通勤者」の数字を入れていきます。
*ここはforではなくjoinで作った方が綺麗にかけます。forを使う場合は.iterrows()を使う方がスマートです。
gdf_pt['people_out']=0
for i in range(0,len(gdf_pt)):
try:
gdf_pt.loc[i,'people_out'] = float(gdf_g[gdf_g['S05b_004']==gdf_pt.iloc[i]['S05a_004']][tag])
except ValueError:
gdf_pt.loc[i,'people_out'] = 0
except TypeError:
gdf_pt.loc[i,'people_out'] = 0
for i in range(0,len(gdf_pt)):
if gdf_pt.iloc[i]['S05a_004'] in zones:
gdf_pt.loc[i,'people_out']=0
これまでと同じように地図を書きます。
v= np.arange(0, 500, 50)
c = cm.Reds(range(0,250,int(250/len(v))))
df2 = make_color_codes(gdf_pt, v,c, 'people_out')
draw_colors(c,v,skips=2)
map = draw_maps2(df2,w=1000,h=1000,body_color='blue')
map
出勤者の目的地は東京に集まっています。柏市や守谷市などのTX沿線駅の他、大宮(さいたま新都心)への出勤者も多いようです。
PT調査データを使えば市内/市外での移動の様子が分析でき、交通網への投資の判断やマーケティングに役立ちます。今回は単年での分析をしましたが、時系列で追うことで交通網の変化に伴う発見も期待できます。例えばCOVID19の影響により通勤者の様子はどう変化したのかなどは大変興味のあるところですが、コロナ後のPT調査はまだ整備されていません。
つくば市に関して言えばTX開通の前後での変化も気になりますね。
それでは。