はじめに
地理空間データの分析は、都市計画、環境科学、マーケティングなど、さまざまな分野で重要な役割を果たしています。Python
には、地理空間データを効率的に扱うためのライブラリが豊富に揃っており、その中でもGeoPandas
とFolium
は強力なツールです。この記事では、これらのライブラリを使って、地理空間データを処理し、地図上にビジュアライゼーションする方法を紹介します。
GeoPandasとは?
GeoPandas
は、Python
のデータ分析ライブラリであるPandasの拡張機能として、地理空間データを操作するためのツールを提供します。これにより、シェープファイルなどの地理データをPandasのデータフレーム形式で扱えるようになり、地理空間データの読み込み、解析、可視化が容易に行えます。
GeoPandasのインストール
GeoPandasは、pipまたはcondaを使って簡単にインストールできます。
pip install geopandas
また、GeoPandasは内部でGDALなどの依存関係を使用するため、場合によっては環境構築が必要になることがあります。Anaconda環境では、以下のコマンドで簡単にセットアップできます。
conda install -c conda-forge geopandas
地理データの読み込みと操作
GeoPandasを使って、まずはシェープファイルなどの地理データを読み込み、基本的な操作を行います。
データの読み込み
GeoPandasでは、geopandas.read_file()
を使って、シェープファイルやGeoJSONファイルなどを簡単に読み込むことができます。ここでは、世界各国の境界線データを例に進めます。
import geopandas as gpd
# 世界の国境データを読み込む(例: GeoPandas内のサンプルデータを使用)
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
# データの概要を確認
print(world.head())
データの確認
world
データフレームは、Pandasデータフレームに似た構造を持っていますが、geometry
という特別な列があり、各国の境界線がジオメトリとして保存されています。
# データフレームの構造を確認
print(world.columns)
# 国名とジオメトリの表示
print(world[['name', 'geometry']])
地理空間データの解析
次に、GeoPandasを使って基本的な地理空間解析を行います。ここでは、単純なフィルタリングと幾何演算を実施します。
国のフィルタリング
特定の条件でデータをフィルタリングできます。例えば、アジアの国々だけを抽出する場合:
# アジアの国々をフィルタリング
asia = world[world['continent'] == 'Asia']
# アジアの国境データを表示
print(asia[['name', 'geometry']])
バッファや面積計算
GeoPandasでは、地理データに対して幾何演算も可能です。例えば、各国の面積を計算したり、境界線にバッファ(拡大領域)を設定することができます。
# 各国の面積を計算
world['area'] = world['geometry'].area
# 境界線に100kmのバッファを設定
world['buffered'] = world['geometry'].buffer(1) # 度単位で指定
Foliumを使った地図ビジュアライゼーション
次に、GeoPandasで操作したデータを地図上にインタラクティブに可視化するために、Folium
を使用します。Foliumは、Leaflet.jsというJavaScriptライブラリをベースにしており、簡単にインタラクティブな地図を作成できます。
Foliumのインストール
Foliumもpipを使って簡単にインストールできます。
pip install folium
基本的な地図の作成
まずは、Foliumで基本的な地図を作成してみましょう。
import folium
# 地図の中心を設定してFoliumマップを作成
m = folium.Map(location=[20, 0], zoom_start=2)
# 地図を表示(Jupyter Notebookの場合)
m
GeoPandasのデータをFoliumで表示
GeoPandasで操作したデータをFoliumで表示するには、folium.GeoJson()
を使ってデータを地図上に追加します。
# GeoPandasデータをGeoJSON形式で地図に追加
folium.GeoJson(world).add_to(m)
# 地図を表示
m
カスタムスタイルでの表示
データを地図上にプロットする際、スタイルやポップアップをカスタマイズすることができます。ここでは、各国の名前をポップアップで表示し、国ごとに異なる色で塗り分けます。
# カスタムスタイルとポップアップ付きのGeoJSON
folium.GeoJson(
world,
style_function=lambda x: {
'fillColor': 'green' if x['properties']['continent'] == 'Asia' else 'blue',
'color': 'black',
'weight': 1,
'fillOpacity': 0.5,
},
tooltip=folium.GeoJsonTooltip(fields=['name'])
).add_to(m)
# 地図を表示
m
マーカーの追加
Foliumでは、地理データだけでなく、地図上にマーカーを追加することもできます。例えば、特定の都市にマーカーを配置する場合:
# 特定の都市にマーカーを追加
folium.Marker(location=[35.6895, 139.6917], popup="Tokyo").add_to(m)
folium.Marker(location=[40.7128, -74.0060], popup="New York").add_to(m)
# 地図を表示
m
応用例:コロプレスマップの作成
Foliumでは、コロプレスマップ(Choropleth Map)を作成し、地図上に数値データを視覚的に表示することができます。ここでは、各国の人口密度を表示するコロプレスマップを作成します。
コロプレスマップの作成
# 各国の人口密度を計算
world['pop_density'] = world['pop_est'] / world['area']
# コロプレスマップを作成
folium.Choropleth(
geo_data=world,
name='choropleth',
data=world,
columns=['name', 'pop_density'],
key_on='feature.properties.name',
fill_color='YlGnBu',
fill_opacity=0.7,
line_opacity=0.2,
legend_name='Population Density (per sq. km)'
).add_to(m)
# 地図を表示
m
コードの解説
Choropleth
: Foliumのコロプレスマップを作成するための関数です。geo_data
には地理データ、data
には色分けに使う数値データを渡します。fill_color
: 色のパターンを指定し、fill_opacity
で色の透明度を設定します。legend_name
: 地図の凡例を表示します。
まとめ
Python
のGeoPandasとFoliumを使えば、地理空間データを簡単に解析し、インタラクティブな地図としてビジュアライゼーションすることができます。GeoPandasでデータを操作し、Foliumで可視化するこの流れは、都市分析や環境モデリング、さらにはビジネスデータの可視化にも応用可能です。ぜひ、自分のプロジェクトでもこれらのツールを活用して、地理空間データの解析や可視化に挑戦してみてください。
参照:
Folium公式ドキュメント