geopandas 概要
GIS(Geographic Information System, 地理情報システム)データを扱うためのライブラリ。
使い方
pip install geopandas
実データを使った例
例:日本地図
国土地理院が持つ日本地図を例にして geojson のデータを描画してみる。
国土地理院のページから N03-20230101_GML.zip(日本全国)をダウンロードして解凍すると N03-23_230101.geojson が得られる。
import geopandas as gpd
from matplotlib import pyplot as plt
df_japan = gpd.read_file('N03-23_230101.geojson')
素直に描画(市区町村境を描画):
df_japan.plot(edgecolor='black', facecolor='aliceblue', linewidth=0.5)
plt.show()
df = df_japan[df_japan['N03_001']=='大阪府']
df.plot(edgecolor='black', facecolor='aliceblue', linewidth=0.5)
plt.show()
df = df_japan[(df_japan['N03_001']=='東京都')&(df_japan['N03_004']=='港区')]
df.plot(edgecolor='black', facecolor='aliceblue', linewidth=0.5)
plt.show()
df = df_japan[(df_japan['N03_001']=='大阪府')&(df_japan['N03_004']=='大阪市中央区')]
df.plot(edgecolor='black', facecolor='aliceblue', linewidth=0.5)
plt.show()
同じ都道府県は統合して都道府県境を描画:
df = df_japan.dissolve(by='N03_001')
df.plot(edgecolor='black', facecolor='aliceblue', linewidth=0.5)
plt.show()
df = df_japan[df_japan['N03_001']=='大阪府'].dissolve(by='N03_001')
df.plot(edgecolor='black', facecolor='aliceblue', linewidth=0.5)
plt.show()
→ ゴミのような境界線が残る。小数点の微小なところで境界点に誤差があるため?
from shapely.geometry import shape, mapping
from shapely import wkt
df = df_japan.dissolve(by='N03_001')
df['geometry'] = wkt.loads(wkt.dumps(df['geometry'], rounding_precision=5))
df.plot(edgecolor='black', facecolor='aliceblue', linewidth=0.5)
plt.show()
例:世界地図
同様に世界地図も描いてみる。
df_world = gpd.read_file('https://datahub.io/@olayway/geo-countries/_r/-/data/countries.geojson')
df_world.plot(edgecolor='black', facecolor='yellow', linewidth=0.5)
plt.show()