mcpField
G
geopandas

geopandas

github.com/crazymsnデータ・データベース2336 回インストール22 週間前に更新
リポジトリ

geopandas について

GeoPandasは、pandasにジオメトリ対応のデータ構造と空間操作を加えるPythonライブラリです。地理空間データの形式、座標参照系、分析、地図作成を扱います。

主な機能

  1. 01GeoSeriesとGeoDataFrame
  2. 02地理空間形式の読み書き
  3. 03座標参照系の管理
  4. 04空間結合とオーバーレイ
  5. 05静的・インタラクティブ地図の作成

活用シーン

  1. 01GeoJSONやGeoPackageの読み込みと絞り込み
  2. 02空間分析前のデータ再投影
  3. 03ポイントとポリゴンの結合・集計
  4. 04コロプレス図やインタラクティブ地図の作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/crazymsn/academic-skills --skill geopandas

インストール後、Claude Code で/geopandasを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
crs-management.md
data-io.md
data-structures.md
geometric-operations.md
spatial-analysis.md
visualization.md

詳細

GeoPandas

GeoPandas は pandas を拡張し、ジオメトリ型に対する空間演算を可能にします。pandas と shapely の機能を組み合わせ、地理空間データ分析に利用できます。

インストール

uv pip install geopandas
オプションの依存関係
# For interactive maps
uv pip install folium

# For classification schemes in mapping
uv pip install mapclassify

# For faster I/O operations (2-4x speedup)
uv pip install pyarrow

# For PostGIS database support
uv pip install psycopg2
uv pip install geoalchemy2

# For basemaps
uv pip install contextily

# For cartographic projections
uv pip install cartopy

クイックスタート

import geopandas as gpd

# Read spatial data
gdf = gpd.read_file("data.geojson")

# Basic exploration
print(gdf.head())
print(gdf.crs)
print(gdf.geometry.geom_type)

# Simple plot
gdf.plot()

# Reproject to different CRS
gdf_projected = gdf.to_crs("EPSG:3857")

# Calculate area (use projected CRS for accuracy)
gdf_projected['area'] = gdf_projected.geometry.area

# Save to file
gdf.to_file("output.gpkg")

主要な概念

データ構造
  • GeoSeries: 空間演算を備えたジオメトリのベクトル
  • GeoDataFrame: ジオメトリ列を持つ表形式のデータ構造

詳細は data-structures.md を参照してください。

データの読み込みと書き出し

GeoPandas は Shapefile、GeoJSON、GeoPackage、PostGIS、Parquet など複数の形式の読み書きに対応しています。

# Read with filtering
gdf = gpd.read_file("data.gpkg", bbox=(xmin, ymin, xmax, ymax))

# Write with Arrow acceleration
gdf.to_file("output.gpkg", use_arrow=True)

I/O 操作の詳細は data-io.md を参照してください。

座標参照系

正確な空間演算のために、常に CRS を確認して管理してください。

# Check CRS
print(gdf.crs)

# Reproject (transforms coordinates)
gdf_projected = gdf.to_crs("EPSG:3857")

# Set CRS (only when metadata missing)
gdf = gdf.set_crs("EPSG:4326")

CRS 操作については crs-management.md を参照してください。

一般的な操作

ジオメトリ演算

バッファ、単純化、重心、凸包、アフィン変換:

# Buffer by 10 units
buffered = gdf.geometry.buffer(10)

# Simplify with tolerance
simplified = gdf.geometry.simplify(tolerance=5, preserve_topology=True)

# Get centroids
centroids = gdf.geometry.centroid

すべての演算については geometric-operations.md を参照してください。

空間分析

空間結合、オーバーレイ演算、ディゾルブ:

# Spatial join (intersects)
joined = gpd.sjoin(gdf1, gdf2, predicate='intersects')

# Nearest neighbor join
nearest = gpd.sjoin_nearest(gdf1, gdf2, max_distance=1000)

# Overlay intersection
intersection = gpd.overlay(gdf1, gdf2, how='intersection')

# Dissolve by attribute
dissolved = gdf.dissolve(by='region', aggfunc='sum')

分析演算については spatial-analysis.md を参照してください。

可視化

静的マップとインタラクティブマップを作成します:

# Choropleth map
gdf.plot(column='population', cmap='YlOrRd', legend=True)

# Interactive map
gdf.explore(column='population', legend=True).save('map.html')

# Multi-layer map
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
gdf1.plot(ax=ax, color='blue')
gdf2.plot(ax=ax, color='red')

地図作成の手法については visualization.md を参照してください。

詳細ドキュメント

  • データ構造 - GeoSeries と GeoDataFrame の基礎
  • データ I/O - ファイルの読み書き、PostGIS、Parquet
  • ジオメトリ演算 - バッファ、単純化、アフィン変換
  • 空間分析 - 結合、オーバーレイ、ディゾルブ、クリッピング
  • 可視化 - プロット、コロプレスマップ、インタラクティブマップ
  • CRS 管理 - 座標参照系と投影法

一般的なワークフロー

読み込み、変換、分析、書き出し
# 1. Load data
gdf = gpd.read_file("data.shp")

# 2. Check and transform CRS
print(gdf.crs)
gdf = gdf.to_crs("EPSG:3857")

# 3. Perform analysis
gdf['area'] = gdf.geometry.area
buffered = gdf.copy()
buffered['geometry'] = gdf.geometry.buffer(100)

# 4. Export results
gdf.to_file("results.gpkg", layer='original')
buffered.to_file("results.gpkg", layer='buffered')
空間結合と集計
# Join points to polygons
points_in_polygons = gpd.sjoin(points_gdf, polygons_gdf, predicate='within')

# Aggregate by polygon
aggregated = points_in_polygons.groupby('index_right').agg({
    'value': 'sum',
    'count': 'size'
})

# Merge back to polygons
result = polygons_gdf.merge(aggregated, left_index=True, right_index=True)
複数ソースのデータ統合
# Read from different sources
roads = gpd.read_file("roads.shp")
buildings = gpd.read_file("buildings.geojson")
parcels = gpd.read_postgis("SELECT * FROM parcels", con=engine, geom_col='geom')

# Ensure matching CRS
buildings = buildings.to_crs(roads.crs)
parcels = parcels.to_crs(roads.crs)

# Perform spatial operations
buildings_near_roads = buildings[buildings.geometry.distance(roads.union_all()) < 50]

パフォーマンスのヒント

  1. 空間インデックスを活用する: GeoPandas はほとんどの演算で自動的に空間インデックスを作成します
  2. 読み込み時にフィルタリングする: bbox、mask、where パラメータを使い、必要なデータだけを読み込みます
  3. I/O に Arrow を使う: use_arrow=True を追加すると、読み書きが 2〜4 倍高速になります
  4. ジオメトリを単純化する: 精度が重要でない場合は .simplify() で複雑さを減らします
  5. バッチ処理を行う: ベクトル化された演算は、行を反復処理するより大幅に高速です
  6. 適切な CRS を使う: 面積や距離の計算には投影 CRS、可視化には地理座標系を使います

ベストプラクティス

  1. 空間演算の前に必ず CRS を確認する
  2. 面積と距離の計算には投影 CRS を使う
  3. 空間結合やオーバーレイの前に CRS を揃える
  4. 演算の前に .is_valid でジオメトリを検証する
  5. ジオメトリ列を変更するときは .copy() を使い、副作用を避ける
  6. 分析のために単純化する際はトポロジーを維持する
  7. 最新のワークフローには GeoPackage 形式を使う(Shapefile より優れています)
  8. sjoin_nearest では max_distance を設定し、性能を向上させる

コメント