見出し画像

【データで見るつくば】つくば市の小学校区の変遷

こんにちは。つくばに住む研究者です。

前回は茨城県内の市町村毎の小学生数の推移についてみました。今回はつくば市内の小学校区の変遷を地図から見ていきたいと思います。

昨年は人口増加率がとうとう全国1位となったつくば市です。とくに15歳以下の人口比率が高いつくば市ですが、急激な人口増加によって小学校区はどのように変化したのでしょうか?

今回使うデータは、国土交通省のまとめる「国土数値情報 学校データ」および「国土数値情報 小学校区データ」です。前者は小学校の名称や所在地について、後者はそれぞれの小学校の通学学区のポリゴンデータが含まれています。今回は2021年と、2013年(学区は2010年)のデータについて比較します。(正確な分析のために両方の年度を揃えたかったのですが、近いものが見つかりませんでした。)

地図データの取り扱いなので、今までと同じように必要なライブラリを入れていきましょう。今回はたくさんあります。

from google.colab import drive

import geopandas as gpd
import pandas as pd
import numpy as  np

import shapely
import folium
from branca.element import Figure
import matplotlib.pyplot as plt
import japanize_matplotlib

japanize_matplotlib.japanize()
drive.mount('/content/drive')
dir_path = '/content/drive/MyDrive/Colab Notebooks/Data/2023_08/SchoolDistrict'

まずは2010年時点での学区と学校所在地を見てみます。データに含まれる小学校の数は37校でした。

gdf = gpd.read_file(dir_path+'/A27-10_08-g_SchoolDistrict.shp',encoding='shift-jis')
gdf = gdf.reset_index()
gdf = gdf[gdf['A27_006'] =='つくば市立']

gdfp = gpd.read_file(dir_path+'/P29-13_08.shp',encoding='shift-jis')
gdfp = gdfp.reset_index()
gdfp = gdfp[gdfp['P29_001'] == '08220']
gdfp = gdfp[gdfp['P29_004'] == '16001']
aid = 1
fig = Figure(width=800, height=1000)
map = folium.Map(location=[gdf.iloc[aid].geometry.exterior.xy[1][0],gdf.iloc[aid].geometry.exterior.xy[0][0]],zoom_start=11)

for aid in range(0,len(gdf)):
  # map = folium.Map(location=[gdf.iloc[aid].geometry.exterior.xy[1][0],gdf.iloc[aid].geometry.exterior.xy[0][0]],zoom_start=16)
  folium.GeoJson(gdf.iloc[aid]["geometry"],
                style_function = lambda feature:{"fillColor": '#c3d5f2',
                                "color": '#0000EE',
                                "weight": 1,
                                "fillOpacity": 0.2}
                 ).add_to(map)

for pid in range(0,len(gdfp)):
  folium.Marker(location=[gdfp.iloc[pid]["geometry"].y, gdfp.iloc[pid]["geometry"].x],
                icon=folium.DivIcon(html=define_width(gdfp.iloc[pid]['P29_005'])),
                ).add_to(map)

  folium.CircleMarker(location=[gdfp.iloc[pid]["geometry"].y, gdfp.iloc[pid]["geometry"].x],
                      radius=5,
                      alpha = 0,
                      fill=True,
                      color='Blue'
                      ).add_to(map)

map
2010年の小学校区(+2013年の小学校所在地)

中央部にある春日小学校と葛城小学校の学区が重なっています。当時は葛城小学校を春日小学校に新築移転する計画だったそうですが、住民の要望により葛城小学校が存続し、学区の北部を春日小学校改め春日学園義務教育学校に、学区の南部を葛城小学校に分割したそうです。

さて、2021年の学区および小学校の所在地についても見てみます。
2021年の時点でつくば市にある小学校数は33校で、2010年時点とくらべて4校減っています。実際に廃校になった学校と、開校された学校を調べてみます。

gdf = gpd.read_file(dir_path+'/A27-21_08.shp',encoding='shift-jis')
gdf = gdf.reset_index()
gdf = gdf[gdf['A27_002'] =='つくば市立']
school_names1 = set(gdf[gdf['A27_002'] =='つくば市立']['A27_004'].unique())

gdf = gpd.read_file(dir_path+'/A27-10_08-g_SchoolDistrict.shp',encoding='shift-jis')
gdf = gdf.reset_index()
gdf = gdf[gdf['A27_006'] =='つくば市立']
school_names2 = set(gdf[gdf['A27_006'] =='つくば市立']['A27_007'].unique())

print('廃校',school_names2.difference(school_names1))
print('開校',school_names1.difference(school_names2))

結果を見ると、廃校となったのは'北条小学校', '田水山小学校', '小田小学校', '筑波小学校', '作岡小学校', '田井小学校', '山口小学校', '菅間小学校'の計8校、開校されたのは'学園の森義務教育学校', '春日学園義務教育学校', 'みどりの学園義務教育学校', '秀峰筑波義務教育学校'の計4校です。いずれも9年制の義務教育学校ですね。地図で見てみます。

2021年度のつくば市の小学校の所在地および学区

北部の8校の学区が統合され、秀峰筑波義務教育学校となったようです。新たに開校された義務教育学校は市の中心部に2つと、つくばみらい市との境に1つです。

描写する際の線を半透明にして、2010年と2021年の学区を重ねてみます。薄い青を2010年、赤色を2021年に割り当てます。学区が変わっていない部分は2つが重なった色(紫色)になります。

aid = 1
fig = Figure(width=700, height=900)

for aid in range(0,len(gdf[gdf['A27_006'] =='つくば市立']['A27_007'].unique())):
  folium.GeoJson(gdf.iloc[aid]["geometry"],
                style_function = lambda feature:{"fillColor": '#EEEEEE',
                                "color": '#0000CC',
                                "weight": 5,
                                "opacity":0.2,                                                                 
                                "fillOpacity": 0.3}
                 ).add_to(map)

gdf = gpd.read_file(dir_path+'/A27-21_08.shp',encoding='shift-jis')
gdf = gdf.reset_index()
gdf = gdf[gdf['A27_002'] =='つくば市立']

for aid in range(0,len(gdf[gdf['A27_002'] =='つくば市立']['A27_004'].unique())):
  folium.GeoJson(gdf.iloc[aid]["geometry"],
                style_function = lambda feature:{"fillColor": '#EEEEEE',
                                "color": '#CC0000',
                                "weight": 5,
                                "opacity":0.2,                
                                "fillOpacity": 0.3}
                 ).add_to(map)
  folium.Marker(location=[gdf.iloc[aid]["geometry"].centroid.y, gdf.iloc[aid]["geometry"].centroid.x],
                icon=folium.DivIcon(html=define_width(gdf.iloc[aid]['A27_004'])),
                ).add_to(map)

map

描写するとこんな感じです。

2010年/2021年の小学校区

元の地図と重なってみにくい部分もありますが、大きく変わったところは北部と中央部ですね。

北部の様子
中央部の様子

さて、最後に学区の面積についてもみていきます。2021年度の小学校区について、最大の秀峰筑波と最小の松代小学校でどの程度面積が違うのでしょうか。多角形の面積計算は地図からは難しく、実際には地球の丸みを考慮して計算しなければならないため、素人ではほぼ不可能ですが、python(+geopandas)なら簡単にできます。

gdf = gpd.read_file(dir_path+'/A27-21_08.shp',encoding='shift-jis')
gdf = gdf.reset_index()
gdf = gdf[gdf['A27_002'] =='つくば市立']

area1 = gdf[gdf['A27_004'] == '松代小学校']['geometry'].to_crs(epsg=32652).area
area2 = gdf[gdf['A27_004'] == '秀峰筑波義務教育学校']['geometry'].to_crs(epsg=32652).area

print('松代小学校区の面積','{:.5f}'.format(float(area1/(1000*1000))))
print('秀峰筑波義務教育学校区の面積','{:.5f}'.format(float(area2/(1000*1000))))

結果は、

・松代小学校区の面積 0.81793平方キロメートル、
・秀峰筑波義務教育学校区の面積 79.86558平方キロメートル

となり、およそ100倍も違うことがわかりました。面積で100倍の差があるということは、通学路については単純計算で10倍程度になることが予想されます。自治体が通学の安全や利便性をどのようにサポートしているのか気になりますね。

この記事が気に入ったらサポートをしてみませんか?