Pythonでボロノイ図作成
Pythonを使ってボロノイ図を作成する方法についてご紹介します。
前回の記事「ボロノイ図を使った最寄り医療機関の可視化」では、ボロノイ図を用いた医療機関の可視化を紹介しましたが、今回はそのボロノイ図をPythonでどのように作成するか、ソースコードの解説を行います。
入力ファイルについて
ボロノイ図を作成するためには、「緯度」と「経度」という特定のカラム名が含まれたCSVファイルが必要です。
このカラム名は漢字で固定されており、入力データに必ずこの名称で情報が存在していなければなりません。
以下のようなCSVファイル形式が適しています。
入力ファイルの例
経度,緯度
139.6917,35.6895
135.5023,34.6937
140.1234,36.5678
ソースコードの解説
以下に、Pythonを使ってボロノイ図を生成し、GeoJSON形式で出力するスクリプトの全体を示します。
このスクリプトでは、特定の形式に従ったCSVファイル(「緯度」と「経度」カラムを持つ)を読み込み、そのデータをもとにボロノイ分割を行います。
必要なライブラリ
pip install pandas geopandas scipy shapely chardet
CSVファイルの読み込み
def load_csv(file_path):
with open(file_path, 'rb') as f:
result = chardet.detect(f.read())
encoding = result['encoding']
df = pd.read_csv(file_path, encoding=encoding)
return df
ボロノイポリゴンの生成
def generate_voronoi(df):
points = df[['経度', '緯度']].values # 「経度」と「緯度」のカラムを使用
vor = Voronoi(points)
polygons = []
for region in vor.regions:
if not region or -1 in region:
continue
polygon = [vor.vertices[i] for i in region]
polygons.append(Polygon(polygon))
return polygons
GeoJSONへのエクスポート
def export_to_geojson(polygons, output_file):
gdf = gpd.GeoDataFrame(geometry=polygons)
gdf.to_file(output_file, driver='GeoJSON', encoding='utf-8')
メイン処理
def main():
script_path = os.path.dirname(os.path.abspath(__file__))
csv_file = os.path.join(script_path, 'input.csv')
geojson_file = os.path.join(script_path, 'output.geojson')
df = load_csv(csv_file)
polygons = generate_voronoi(df)
export_to_geojson(polygons, geojson_file)
print(f"GeoJSONファイルが{geojson_file}に保存されました。")
結論
Pythonを使って「緯度」と「経度」カラムを持つCSVファイルを基にボロノイ図を作成する方法を紹介しました。
カラム名は固定ですが、データさえ整備されていれば、このスクリプトを使用することで、簡単に領域分割が可能です。
応用例として、最寄り施設の表示や地域分析など、幅広い分野で活用できるでしょう。
#Python #データサイエンス #GIS #ボロノイ図 #プログラミング #データ可視化 #GeoJSON #地理情報
コメント