従業員の自宅と避難情報が発表されている地域の関係を、Python/Jupyter Notebook を使って可視化するための分析ツール。従業員の住所とは関係なく、避難情報が発表された地区の地理的・時系列的な広がりを可視化するためにも使用可能。
以下、2023 年 7 月 15 日から 16 日朝にかけて秋田市で発表された避難情報を例にしています。
-
Python 3.x の最新版をインストール(Download Python | Python.org)
-
このレポジトリのコピーをローカルに作成する(「Git って...?」という方にはレポジトリのトップから
Code
>Download ZIP
が一番シンプルかと思いますが、fork
やgit clone
など他の方法をご存知の方はお好きにどうぞ)
-
ローカルに作成したフォルダを、以下「作業フォルダ」と呼びます。作業フォルダに移動して、以下のコマンドから Python の仮想環境を作成する:
python -m venv env
- 仮想環境を有効化する:
# Windows
env\Scripts\activate
# macOS/Linux
source env/bin/activate
- 必要なパッケージをインストールする:
pip install -r requirements.txt
平時のうちに、マッピングのために必要なデータをあらかじめダウンロード・整形して、data
フォルダに保存しておく。
国土交通省が提供する国土数値情報ダウンロードサイトから、必要な市町村について、最新の位置参照情報を CSV として取得・保存しておく(ナビゲーションメニューから位置参照情報
> データダウンロード
)。
位置情報の粒度はいくつか選択できるが、避難情報の発表単位と揃えるため、ここでは大字・町丁目単位のデータをダウンロードする(
data/akita-2022-ichijoho-utf8.csv
)。
データの形式は次のとおり(国土数値情報ダウンロードサイトからダウンロードしたファイルの形式をそのまま使用している):
都道府県コード | 都道府県名 | 市区町村コード | 市区町村名 | 大字町丁目コード | 大字町丁目名 | 緯度 | 経度 | 原典資料コード | 大字・字・丁目区分コード |
---|---|---|---|---|---|---|---|---|---|
5 | 秋田県 | 5201 | 秋田市 | 52010001000 | 旭川清澄町 | 39.743039 | 140.128123 | 0 | 1 |
5 | 秋田県 | 5201 | 秋田市 | 52010002000 | 旭川新藤田西町 | 39.740677 | 140.12612 | 0 | 1 |
ダウンロードしたファイルは、文字エンコードが Shift JIS になっている。Windows 端末だけで作業や情報共有が完結するのであればあまり不便はないが、macOS など、他の OS 端末でも操作・閲覧することを考えてここでは UTF-8 に変換しておく。
macOS の場合は、iconv
コマンドを使って変換する:
iconv -f SHIFT_JIS -t UTF-8 input.csv > output.csv
従業員の住所一覧を CSV 形式で保存しておく。
住所を直接地図にマッピングすることもできるが、それだと直接的な個人情報ということで、社内であっても簡単には共有できない。ここではマッピング結果を災害対策会議など、社内資料等で広く共有することを想定して、事前に住所をもとに大字・町丁目を抽出して、その代表地点を地図上にマッピングすることとする。大字・町丁目の表記は、先にダウンロードした位置参照情報のものと揃える。
ここでは例として、ダミーデータ
data/mock_employee_list.csv
を使用する。ダミーデータは、Fakerを使ってscripts/employees.py
で生成した。
自治体が提供する防災メールサービスなどから得た避難情報をスプレッドシートなどに記録して、CSV 形式で保存しておく(例ではdata/akita_evac_all.csv
)。
マップは、災害がまさに発生している事中にリアルタイムで更新していくことも想定しているので、この CSV 出力の段階では特に時点などを区切る必要はない。
自治体や第三者が提供するウェブ API を使って、避難情報そのものを自動で取得することができる場合もある。秋田市には 2023 年 7 月現在でそのような API サービスはなく、公式の防災メールから手動でスプレッドシートに内容を落とし込んだ(防災ネットあきた|秋田市公式サイト)。
CSV の例(data/akita_evac_all.csv
):
MAIL_TIMESTAMP |
LEVEL |
LEVEL_NAME |
REASON |
BLOCK_ORIGINAL |
BLOCK |
---|---|---|---|---|---|
2023/7/15 7:25:00 | 3 | 高齢者等避難 | 洪水 | 牛島東六丁目 | 牛島東六丁目 |
2023/7/15 7:25:00 | 3 | 高齢者等避難 | 洪水 | 仁井田小中島 | 仁井田小中島 |
2023/7/15 7:25:00 | 3 | 高齢者等避難 | 洪水 | 仁井田字新中島 | 仁井田 |
2023/7/15 7:25:00 | 3 | 高齢者等避難 | 洪水 | 仁井田字西潟敷 | 仁井田 |
- 時点情報は、発表時点や配信時点などいくつか考え方があるが、ここでは情報を入手した時点を意思決定の時点と捉えて、防災メールの受信日時を時点として扱う(
MAIL_TIMESTAMP
列)。 LEVEL
及びLEVEL_NAME
列は全国共通の警戒レベル(参考:「警戒レベル 4」で危険な場所から全員避難!5 段階の「警戒レベル」を確認しましょう | 暮らしに役立つ情報 | 政府広報オンラインなど)。REASON
列は、避難の理由(洪水、土砂災害、高潮、地震、津波、火山 etc.)。- 秋田市の防災メールでは
BLOCK_ORIGINAL
列にあるとおり、字単位での避難情報が発表されるが、国土数値情報ダウンロードサイトには位置情報(緯度・経度)がないため、大字・町丁目単位にまとめておく(BLOCK
列)。
列名を変更した場合は、employee-evac-map.ipynb
内の列名で情報を参照している箇所も変更すること。
employee-evac-map.ipynb
を Jupyter Notebook で開き、
juptyer notebook employee-evac-map.ipynb
適宜ファイル名などの変数を調整してから、セルを上から順に実行する。ファイル名(ファイルパス)と、いつ時点のマッピングをするか、が利用する際の主な調整ポイントとなる。