文京区の保育園内定指数をTableauでマッピングしてみる
こんにちは。
現在Tableau DATA Saber Boot Camp(https://datasaber.world/#whois)というものに参加しています。 その中の課題で以下のものがありましたので、ブログ記事&Publicに投稿するネタとして、最近直面した保活をテーマにすると面白いかなと思いました。
私が住んでる文京区では、以下のURLにあるような選考方法で選考指数を算出します。 夫婦フルタイム共働きだと26点(夫婦フルタイム20点+区民4点+新規入園1点+近隣親族無し1点)で、兄弟やひとり親、受諾・待機などで更に加点/減点されます。
そしてこの選考指数を、過去の保育園ごとの内定指数と照らし合わせながら保育園を選びます。 ただ、この過去の内定指数はPDFの表で表示されているのみで、 例えば自分の家に近いのかや気になる園がどの辺にあるのかがパッと見わからない状況になってます。
■2020年内定指数 https://www.city.bunkyo.lg.jp/var/rev0/0208/3737/shisuu2.4.pdf
以下に地図と保育園位置が載ってるので、上記の指数と照らし合わせてみればよいのですが、 一覧性に欠けますし、保育園探しと家探しを両方やろうとするときはかなり面倒です。
■2021年度保育施設マップ https://www.city.bunkyo.lg.jp/var/rev0/0208/3734/map.pdf
上記の問題を解決すべく、今回はTableauのマップ機能を使って、地図上への保育園と内定指数のプロットを試みたいと思います。
流れとしては、以下の通りです。
- 内定指数のPDFデータをテーブルデータに変換する(過去2年分)
- 保育園住所のPDFデータをテーブルデータに変換し、緯度経度情報を加える
- データの整合性チェック
- Tableauで1と2のデータを読み込み、inner_join(内部結合)する
- Tableau上でマッピング&ビジュアライズ
内定指数のPDFデータをテーブルデータに変換する(過去2年分)
データは以下にあります。
■2020年内定指数 https://www.city.bunkyo.lg.jp/var/rev0/0208/3737/shisuu2.4.pdf
■2019年内定指数 https://www.city.bunkyo.lg.jp/var/rev0/0208/3738/nateishiu2.15.pdf
上記PDF、普通にExcelやスプレッドシートにコピペしても上手くいかないので、 Wordで保存⇒表部分をExcelに張り付けて整形しました。
◇Before ※悪名高きセル結合やセル毎の文字分割がされていて辛い
◇After
保育園住所のPDFデータをテーブルデータに変換し、緯度経度情報を加える
データは以下にあります。 ■2020年度保育施設住所・連絡先一覧 ※2019年版が見当たらなかったので2020年のみ https://www.city.bunkyo.lg.jp/var/rev0/0208/5428/ichiran.pdf
上記PDFも同じようにWordで保存⇒表部分をExcelに張り付けて整形しました。
◇Before
◇After
PDFデータから追加した点としては、「緯度経度の情報」「郵便番号」です。 Tableauで地図情報を表現する場合、都道府県や区レベルまでなら文字情報で問題ないのですが、 町域や丁目・番地・号レベルでのマッピングになると緯度経度や郵便番号が必要になります。
保育園所在地毎に緯度経度や郵便番号を付加したく、以下のサイトから付与しました。(ジオコーディングというそうです)
■東京大学空間情報科学研究センターが提供する「CSVアドレスマッチングサービス」 newspat.csis.u-tokyo.ac.jp
※国土交通省の以下のサイトからデータ引っ張ってきて紐づけても良いかもしれません nlftp.mlit.go.jp
上記の2つは番地レベルでの緯度経度を引っ張ってきています。 ただ、以下の例のように番地まで重複した園も出てきました。
- グローバルキッズ茗荷谷園 東京都文京区小石川5-38-11
- ちいさいおうち小石川 東京都文京区小石川5-38-2
このような場合は以下のサイトで号レベルまでの緯度経度を直接調べて上書きしました。※このような細かいチェックが時間かかる www.geocoding.jp
郵便番号については日本郵便の以下のサイトのデータと結合しました。(東京都文京区春日、などの町域レベルで結合) ※ちなみに郵便番号は今回は使わず、次回記事で使用予定です www.post.japanpost.jp
データの整合性チェック
ここまでやるのもかなり大変でしたが、内定指数のデータと保育園住所のデータがきちんと結合しないと意味がありません。 なので、園名が一致するかどうかをチェックしました。
2020年と2019年の内定指数データの園名は特に問題なかったのですが、 内定指数データの園名と保育園住所データの園名が一致しないケースがいくつかあったので、(半角全角違い大文字小文字違い、園名省略、余分な文字等) こちらも修正を加えました。
□違いの例
Tableauで1と2のデータを読み込み、inner_join(内部結合)する
いよいよTableauで読み込みます。以下のデータを読み込みました。
- 2020年内定指数データ
- 2019年内定指数データ
- 2020年保育園住所データ
1と2のデータはユニオンし、3のデータとリレーションシップを行いました。
◇ユニオン
◇後で使いやすいように内定指数部分をピボット(横持ち⇒縦持ち)
◇内定指数データと保育園住所データのリレーションシップ
Tableau上でマッピング&ビジュアライズ
最後に地図上にマッピングしていきます。
- 列に「経度」行に「緯度」追加⇒マップ自動生成
- マップタブのマップレイヤーでスタイル:ストリート、ウォッシュアウト70%で設定
- 年度と年齢をパラメータ化&フィルターと連動するようにする ※年度の例:IF [年度]=[年度 のパラメーター] THEN [年度] ELSE NULL ENDの「表示年度」を作りフィルターに入れNULLを除外
- 「園名」「所在地」をマークの「詳細」に追加
- 「内定指数」をマークの「色」に追加。色合いを指数が高いほど濃く、低いほど薄く表現する
- マークの形状を「〇円」にして、サイズを少し大きくする
出来上がりはこちら。 年度を2020年や2019年に切り替えたり、年齢を0歳~5歳で切り替えることができます。 マウスオーバーすると園名や指数の数値が出てきます。 例えば2020年の1歳だと、全般的に26点以上が多そうですが、大塚地域や小規模保育園は点数が低そう、などがわかりますね。 2019年と比較したり、0歳で見てみたりするのも良いかもしれません。
※詳細はこちらでもご覧いただけます public.tableau.com
いかがでしたでしょうか? 次回は地域別の傾向をみたり、経年比較や年齢比較をしてみたいと思います。 感想などありましたら、コメントに記載いただくかコンタクトくださいませー。
ではでは。