地理空間データ分析は、位置情報を持つデータを分析し可視化することで、地理学、歴史学、考古学、都市計画、環境モニタリング、ビジネス立地分析など様々な分野で役立てられています。Pythonには地理空間データを扱うための強力なライブラリが複数存在し、データの読み込みから高度な分析まで幅広い処理が可能です。この記事では、Pythonを用いた地理空間分析の基礎を解説します。

地理空間データの基本概念

地理空間データとは

地理空間データとは、レコードの地理的な位置に関する情報を含むデータセットを指します。例えば、都市の人口規模に関する情報に加えて、緯度と経度の座標を含むデータセットは地理空間データとなります。この位置情報があることで、都市間の距離測定や地域特性の分析、地図作成など多くの情報を導き出すことができます。

データ表現方法

地理空間データは主に以下の2つの方法で表現されます:

1.ベクトルデータ:空間要素をx座標とy座標で表現したものです。基本的な形式として:

  • 点(Point):単一の座標位置(例:都市の中心)
  • 線(Line):2つ以上の点から構成される(例:道路、河川)
  • ポリゴン(Polygon):3つ以上の線で囲まれた閉じた形状(例:建物の境界、行政区域)

2.ラスターデータ:行と列のマトリックスで構成され、各セルに何らかの情報が関連付けられています。例えば衛星画像や、各セルに気象情報を含んだデータなどがこれに該当します。

Pythonの地理空間データ分析ライブラリ

Python libraries you should know about if you're working with geospatial information
地理空間情報を扱うなら絶対に知っておきたいPythonライブラリ

主要ライブラリの紹介

GeoPandas
GeoPandasはPandasを拡張したライブラリで、「GeoDataFrame」と呼ばれる地理空間データフレームを操作できます。Pandasの機能に加えて、最も近い点を探したり、ポリゴン内の面積や点の数を計算したりといった地理空間機能を備えています。

Shapely
Shapelyは地理空間オブジェクトの作成、操作、分析を行うライブラリです。点、線、ポリゴンなどの基本的な地理空間オブジェクトを扱い、距離計算や交差判定などの空間解析が可能です。

Fiona
FionaはジオメトリデータをGDAL(Geospatial Data Abstraction Library)から読み込むためのライブラリです。GeoPandasが内部で使用しています。

著:Garrard, Christine
¥6,573 (2025/04/03 20:11時点 | Amazon調べ)

Folium
FoliumはJavaScriptのleaflet.jsをPythonで使えるようにしたライブラリで、インタラクティブな地図の作成が可能です。

その他のライブラリ

  • PyProj:座標系の変換
  • xarray:ラスターデータの処理
  • matplotlib:静的な地図の可視化

基本的な地理空間データ操作

環境設定

まずは必要なライブラリをインストールします:

pip install geopandas shapely folium pyproj matplotlib

データの読み込み

GeoPandasを使って地理空間データを読み込みます:

import geopandas as gpd

# シェープファイルの読み込み
gdf = gpd.read_file('filename.shp')

# 基本情報の確認
print(gdf.head())
print(gdf.crs)  # 座標参照系(CRS)の確認

GeoPandasは、シェープファイル(.shp)やGeoJSON、CSV(座標データを含む)など様々な形式の地理空間データを読み込むことができます。

地理空間オブジェクトの作成

Shapelyを使って基本的な地理空間オブジェクトを作成します:

from shapely.geometry import Point, LineString, Polygon

# 点の作成(東京の座標)
point = Point(139.6917, 35.6895)
print("Point:", point)

# 線の作成
line = LineString([(139.6917, 35.6895), (139.7671, 35.6812)])
print("Line:", line)

# ポリゴンの作成
polygon = Polygon([(139.6917, 35.6895), (139.7671, 35.6812), (139.7295, 35.6639)])
print("Polygon:", polygon)

この例では、緯度経度座標を使って東京周辺の点、線、ポリゴンを作成しています。

座標系の確認と変換

地理空間データを適切に扱うためには、座標系の理解が重要です:

# 座標系を確認
print(gdf.crs)

# 座標系を変換(WGS84という世界で広く使われる緯度経度の座標系に変換)
gdf = gdf.to_crs(epsg=4326)

EPSG:4326はWGS84と呼ばれる世界標準の緯度経度座標系で、地図描画によく使われます。

空間演算と分析

地理空間オブジェクト間の関係を計算します:

from shapely.ops import nearest_points

# 距離の計算
distance = point.distance(line)
print("Distance between point and line:", distance)

# 最も近い点を見つける
nearest = nearest_points(point, line)
print("Nearest points:", nearest)

このコードでは、点と線の間の距離計算や、最も近い点を見つける操作を行っています。

地理空間データの可視化

静的な地図の作成

GeoPandasとmatplotlibを使って静的な地図を作成します:

import matplotlib.pyplot as plt

# 世界地図データを読み込む
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

# 大陸ごとに色分けした世界地図を描画
world.plot(column='continent', legend=True, figsize=(10, 10))
plt.title('World Map by Continent')
plt.show()

このコードでは、GeoPandasに付属するサンプルデータを使って、大陸ごとに色分けした世界地図を作成しています[6]。

インタラクティブな地図の作成

Foliumを使ってインタラクティブな地図を作成します:

import folium

# 中心座標を指定して地図を作成
m = folium.Map(location=[35.6895, 139.6917], zoom_start=12)

# マーカーを追加
folium.Marker([35.6895, 139.6917], popup='Tokyo').add_to(m)

# 地図を表示
m

Foliumを使うと、ズームイン・アウトやクリックでの情報表示など、インタラクティブな操作が可能な地図を作成できます。

応用例:地理空間データの結合と分析

地理空間データと属性データを結合する例を見てみましょう:

# 日本の都道府県ポリゴンデータ
japan = gpd.read_file('japan_prefectures.shp')

# 各都道府県の統計データ
import pandas as pd
stats_df = pd.DataFrame({
    'prefecture': ['Tokyo', 'Osaka', 'Hokkaido'],
    'population': [13960000, 8840000, 5380000]
})

# 地理データと統計データを結合
merged_df = japan.merge(stats_df, left_on='prefecture_name', right_on='prefecture')

# 人口別に色分けした日本地図を描画
merged_df.plot(column='population', legend=True, cmap='YlOrRd', figsize=(10, 10))
plt.title('Population by Prefecture')
plt.show()

このような結合処理により、人口統計などの属性データを地図上に可視化することができます。

GISデータの種類と形式

ベクターデータ形式

シェープファイル(SHP)
最も一般的なGISデータ形式の一つで、道路や建物などの位置や形状、属性情報を持つベクターデータを格納します。

GeoJSON
JSON形式を拡張した地理データ形式で、Webアプリケーションでよく使われます。

KML/KMZ
Google EarthやGoogle Mapsで使われる形式です。

ラスターデータ形式

GeoTIFF
地理情報を含むTIFF形式の画像ファイルです。衛星画像や航空写真によく使われます。

NetCDF
科学データ用のバイナリ形式で、気象データなどに使われます。

地理空間データ分析の活用分野

1. 都市計画・交通解析

活用の例

渋滞予測と対策立案

交通センサーデータ(車両通行量や速度情報など)やSNS上のリアルタイム投稿を活用し、AIを用いて交通混雑の予測を行う。これに基づいて信号制御を最適化し、渋滞緩和やCO₂排出の削減を実現。

ナビゲーションシステム

地理空間データベースから道路情報、公共交通機関の時刻表データ、ユーザの位置情報などを集約し、最短ルートや最速ルートをリアルタイムに提案。

都市開発・ゾーニング

住宅地や商業地をどのように配置すべきか、地価情報や人口分布などの地理データを組み合わせて検討。将来的な都市機能の配置計画や公共交通整備の最適化に役立てる。

使用される技術・データ

• 衛星データ・ドローン空撮などによる地形・地物情報

• 交通センサーデータ(車両カメラ、交通量カウンター、GPSログなど)

• GISソフトウェア(ArcGIS、QGISなど)や交通解析向けシミュレーションソフト(PTV Vissim など)

主な課題

• リアルタイムデータを扱うための大規模なインフラ整備コスト

• プライバシーへの配慮(車両位置情報やスマートフォンの位置情報などの個人データ保護)


2. 環境モニタリング

活用の例

森林破壊・土地利用変化の監視

人工衛星(NASAのMODISやヨーロッパのSentinelなど)や航空機・ドローンの画像から、森林の減少、砂漠化、農地拡大状況などを解析。違法伐採の監視や自然保護区の管理に活用。

大気汚染・水質汚染解析

大気中のPM2.5濃度や河川・湖沼の水質情報を、時系列で地図化し可視化。汚染源の特定や行政の規制強化策の立案に用いられる。

気候変動の長期的なモニタリング

気温や海面温度、氷床の厚みなどの長期変化を追跡し、温暖化の影響を予測するモデルの構築に寄与。

使用される技術・データ

• リモートセンシング(衛星画像、ドローンの空撮)

• 地理空間情報システム(GIS)

• 機械学習・画像解析技術(深層学習を用いた土地被覆分類など)

主な課題

• 大量のリモートセンシングデータの処理と保管が必要

• 雲や天候の影響による観測データの欠損や偏り

• 地表面の細かな分類には、高分解能なデータ取得が不可欠であり、コスト面や撮影頻度の制約がある


3. 社会課題分析

活用の例

人口動態・少子高齢化の空間分析

国勢調査や住民基本台帳のデータと地理情報を組み合わせ、高齢化が進む地域の分布や人口減少の傾向を可視化。医療・介護施設の配置計画や公共交通機関の維持計画策定に役立つ。

犯罪発生率の地域特性分析

地域ごとの犯罪発生データをマッピングし、高リスクエリアを可視化。警察の巡回計画や防犯対策の最適化につなげる。

不平等・格差の可視化

所得水準や教育水準、インフラへのアクセス状況などを地理的に重ね合わせることで、社会的格差の顕在化を支援。行政施策の優先エリアを特定しやすくなる。

使用される技術・データ

• 国勢調査(総務省統計局など)、行政統計、各種オープンデータ

• GISソフトを用いた地図可視化・統計分析

• 個人レベルデータを用いる場合は、プライバシーを守るための匿名化やジオマスキング技術

主な課題

• 公的統計の更新頻度が低いことによるリアルタイム性の不足

• プライバシー保護(個人情報との紐づけは要注意)

• 統計データの粒度(メッシュや市区町村単位など)による分析精度の限界


4. ビジネス立地分析

活用の例

小売店の最適立地

人口密度、世帯収入、競合店舗の位置などの地理データをもとに、販売ポテンシャルの高い場所を選定。新規出店戦略や既存店舗のリニューアル計画に活用。

配送ルート最適化

配送先の場所や道路の混雑状況、車両台数を考慮し、AIを用いて複数配送拠点や複数車両のルートを最適化。燃料コストの削減やCO₂排出量削減にも寄与。

マーケティング分析

地域ごとの購買行動や消費傾向を地図上で可視化し、広告出稿やプロモーション戦略を地域特性に合わせて実施。

使用される技術・データ

• POSデータや顧客データとGISデータの連携

• 時系列位置情報データ(スマートフォンの位置情報など)

• 需要予測モデル(機械学習や統計モデル)

主な課題

• 競合状況や経済状況の変化など外部要因の影響をどう評価するか

• データの確保やプライバシーへの配慮(特にスマートフォンの位置情報)

• 都市部と郊外・地方で分析手法や指標が異なる場合がある


5. 防災・減災

活用の例

洪水リスク評価とハザードマップ作成

地形データ(標高、傾斜など)や降雨量の予測データを組み合わせて洪水リスクをシミュレート。ハザードマップを作成し、住民や自治体の防災意識向上や避難計画立案に役立てる。

地震・津波被害シミュレーション

プレート境界や断層線の位置情報、地盤の特性データをもとに地震の規模を想定し、津波の浸水範囲や被害を予測。災害時の避難ルートや救援拠点の配置検討に利用。

土砂災害・火山災害の予測

地質情報や降水データ、地表の植生状況などを考慮し、土砂崩れや火山噴火の影響を評価。危険区域の指定など、事前の対策や早期警戒に役立つ。

使用される技術・データ

• 地形モデル(DEM:数値標高モデル、LiDAR計測データなど)

• 気象庁や各研究機関が提供する降雨・地震・火山活動情報

• 各種シミュレーションソフト(地震波伝搬モデル、津波伝搬モデルなど)

主な課題

• 異常気象や地殻変動など、不確実性の高いデータを扱う難しさ

• 被害予測の精度と、住民に対してどのように情報を伝え防災行動を促すかというコミュニケーション面

• 常に最新の地理空間データを取得し更新する運用コスト

結論

It can also be used for spatial analysis of the distribution of archaeological sites!!
考古学の遺跡分布の空間的解析にも使えます!!

Pythonを使った地理空間データ分析は、GeoDataFrameを中心として位置情報と属性データを統合的に扱うことができる強力なアプローチです。GeoPandas、Shapely、Foliumなどの専門ライブラリを活用することで、データの読み込みから可視化、空間分析まで幅広い処理が可能となります。基本的なコンセプトとライブラリの使い方を理解することで、様々な分野での応用が可能になるでしょう。

地理空間データ分析は、単に数値データを分析するだけでなく、地理的な文脈を加えることで、より立体的で精度の高い予測や分析を行うことができます。Pythonの豊富なライブラリ群は、こうした分析を効率的に進めるための強力なツールセットを提供しています。