Loading [MathJax]/extensions/tex2jax.js

2024年10月18日金曜日

Pythonで地図空間データを扱う⑤

ベースの地図が出来た所で、他のデータを被せてみます。

国土地理院の 500mメッシュ別将来推計人口データ を使用します。

同じく神奈川県のデータ 500m_mesh_suikei_2018_shape_14.zip をダウンロードします。

ベースの地図データと同じ場所に展開します。

そして同じようにread_fileで読み込みます。

  1. #!/usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3.   
  4. #  
  5. import geopandas as gpd  
  6. import matplotlib.pyplot as plt  
  7. import japanize_matplotlib  
  8.   
  9. fn = "../data/N03-20240101_14.shp"  
  10. gdf = gpd.read_file(fn)  
  11. fn2 = "../data/500m_mesh_2018_14.shp"  
  12. pdf = gpd.read_file(fn2)  
  13.   
  14. print(gdf.head(10))  
  15. print("")  
  16. print(gdf.shape)  
  17. print("")  
  18. print(pdf.head())  
  19. print("")  
  20. print(pdf.shape)  
(6193, 235)と巨大なデータフレームなので、必要なデータ以外は取り除いてもいいでしょう。
  1. # 必要な列だけ取り出し軽量化します。  
  2. pdf2 = pdf[['SHICODE''PTN_2020''geometry']]  
  3.   
  4. # ベースとなる地図  
  5. bg = gdf.boundary.plot(linewidth=0.5, edgecolor="gray", figsize=(148))  
  6.   
  7. # 人口データのプロット  
  8. pdf2.plot(ax=bg, column="PTN_2020", cmap="jet", legend=True)  
  9.   
  10. # 地域名を表示  
  11. for name, row in citys:  
  12.     if row['N03_001'].count() > 1:  
  13.         x = row["geometry"].centroid.bounds.minx.mean()  
  14.         y = row["geometry"].centroid.bounds.miny.mean()  
  15.         bg.annotate(name, xy=(x, y), color="red")  
  16.     else:  
  17.         x = row["geometry"].centroid.bounds.minx  
  18.         y = row["geometry"].centroid.bounds.miny  
  19.         bg.annotate(name, xy=(x, y), color="red")    
  20.   
  21. plt.title("神奈川県人口マップ")  
  22. plt.show()  
地図データに人口データを重ね合わせることが出来ました。

0 件のコメント:

コメントを投稿

Pythonで地図空間データを扱う⑤

ベースの地図が出来た所で、他のデータを被せてみます。 国土地理院の  500mメッシュ別将来推計人口データ  を使用します。 同じく神奈川県のデータ  500m_mesh_suikei_2018_shape_14.zip をダウンロードします。 ベースの地図データと同じ場所に展開...