はじめに
先日、JAFから”信号機のない横断歩道での歩行者横断時における車の一時停止状況全国調査(2023年調査結果)”が公表された。
全国平均と各都道府県のデータが示されていて、2019年以降毎年実施されていることが分かった。
しかし、全国平均を除いて、各都道府県の時系列変化について一目で把握できるものではなかったので、Webスクレイピング手法などを用いて、5年分のデータ取得・成形をしたのち、データ分析・可視化をやってみることにした。
地理空間情報(GIS)の習熟にちょうどいい題材だと思うので、ヒートマップの作成にも挑戦する。
元データの特徴の把握
どういう調査方法によって取得されたデータなのかを押さえておく。
降雪が多い時期や濃霧が発生しやすい時期は避けられていて、交通量や道路環境に偏りが出ないように調査場所の選定基準が明確になっている。
ドライバーによる横断歩道と歩行者の認知能力に、極力他の要因が関与しないように意図されたものだと考えられる。
また、注釈にもあるように、"調査場所は各都道府県内で2箇所ずつですので、都道府県内すべての市町村の箇所で同様の数値(傾向)とは限りません。"としており、各都道府県の標本数が少ない点に留意する必要がある。
以下、JAFのWebページから引用。
1. 調査時期
各年とも8月(2023年のみ、8−9月)
平日10-16時の時間帯
2. 気象条件
小雨を含む雨天時以外に実施
3. 調査場所
各都道府県2箇所ずつ(全国合計94箇所)の信号機が設置されていない横断歩道
※センターラインのある片側1車線道路で、原則として、調査場所の前後5m以内に十字路および丁字路交差点がない箇所で、道路幅員が片側2.75m~3.5m、交通量が3~8台/分(目安)とし、制限速度が時速40~60km程度の箇所
※詳細の調査場所は非公表
4. 調査方法
横断歩行者はJAF職員(横断歩道の立ち位置や横断しようとするタイミングを統一)
調査回数は1箇所50回の横断(合計100回の横断)
5. 調査対象の車両
横断歩行者側の車線を走行する自家用自動車、自家用トラック(白ナンバー)
6. 調査台数
各年、7千台から9千台程度
データ収集の方針
2019年から2023年にかけてのデータはそれぞれ以下のWebページで公開されている。
WebページとHTMLのソースコードを見ると、比較的きれいなテーブル形式となっていて、Webスクレイピングが容易に実施可能であることが確認できた。(図1、図2)
さらに、各年のWebページも同様な形式であることも分かった。
同じ処理を繰り返せば良いことになる。
ただし、"全国平均"のだけ図3のようにtdタグになっている。thタグとtdタグに注目して抽出処理する場合には、何らかの後処理が必要となる。
Webスクレイピング
前述の方針の基づいて、BeautifulSoupとseleniumでWebスクレイピングして、pandasでcsvファイルに書き出すPythonスクリプトを作成。
"全国平均"のtdタグのせいで、都道府県名と値を含むthタグとtdタグの数がズレるので、それを調整する処理を追加している。
from bs4 import BeautifulSoup
from selenium import webdriver
import re
import pandas as pd
def get_data(url):
driver = webdriver.Chrome()
driver.get(url)
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, "lxml")
# ページのタイトルから実施年を取得
title = soup.find('h1',class_='l-pageHeader').text
pattern = '\d{4}年'
year = re.findall(pattern, title)[0].replace("年","")
# 都道府県名リストを取得
table = soup.find('table',class_='table-default')
rows_prefecture = table.findAll("th")
list_prefecture = []
for row in rows_prefecture:
list_prefecture.append(row.text)
# 最後に全国平均を追加
list_prefecture.append('全国平均')
# 値リストを取得
rows_value = table.findAll("td")
list_value = []
for row in rows_value:
# 不要なtdタグを除外
if "全国平均" not in row.text:
list_value.append(row.text)
# 都道府県名リストと値リストを結合して、1つのデータフレームに集約
df = pd.DataFrame(list_value, index=list_prefecture)
# csvファイルで書き出し
df.to_csv("survey_"+str(year)+".csv")
return
ここで、念のために都道府県と値がズレていないか、目視でチェック。問題なさそう。
出力された5年分のcsvファイルをJupyter Notebookでマージして1つの表にした。
Excelで表を加工
Excelで表を読み込んで、以下の加工を行なった。
- 各年で、全国平均以下の数値の文字の色 => 赤
- 各年で、上位5件の数値の文字の色 => 青
- 2019年から2023年にかけての都道府県ごとの年単位での平均変化率(相乗平均)を追加
- 前年比の変化率を追加
- 変化率が1.00未満となった数値の文字の色 => 赤
- 変化率が2.00以上となった数値の文字の色 => 青
なお、平均変化率の算出は、以下の数式で行なった。
=("2023年のデータ"/"2019年のデータ")^(1/4)
図4 表の加工結果
Excelデータの観察
冒頭で述べた各都道府県で2地点でしか調査されていないことを念頭に置きつつ、図4を観察してみる。
いくつか興味深い傾向が得られた。
- 全国平均は毎年増加傾向にあるが、毎年増加傾向にある都道府県は22であり半数以下であった。
- 関東、四国は全国平均を下回る傾向にある。
- 長野県が毎年上位ランクイン。静岡もほぼ毎年上位ランクイン。
- 隣接している大阪府、兵庫県のギャップが大きい。
- 沖縄を除く九州7県は、隣接している県とのギャップが大きい。
地域差があるものの、交通安全の啓発活動のおかげで全国平均で増加傾向となっていることが見受けられる。
ここで、警察庁による年次報告での、道路交通法違反の取締り状況のデータも見てみる。(図5)
JAFの調査では、歩行者が横断歩道を渡る際に一時停止する割合が毎年平均で1.27倍に増加傾向にあるが、歩行者妨害の取締り件数は、2019年から2022年にかけて毎年平均で1.14倍増加している。
(情報ソース)
また、横断歩道横断中の死亡事故件数も見てみる。(図6中、青線)
2019年(令和元年)から2022年(令和4年)にかけて、2021年に最小となったがその後増加している。
(引用元)
一概にはJAFと警察庁のデータを結びつけて考察することは難しいが、JAFが調査対象とした交通環境以外で歩行者妨害が発生しやすいのかも知れない。言い換えれば、複数の交通環境で観察実験を行うことで、歩行者妨害が発生しやすい環境要因を特定できる可能性がある。
次にやること
- ヒートマップの作成
- ヒートマップを使った傾向分析
- 全体の考察