【Tips】石川県の熊出没データを、Pythonを使って突合してみよう
こんにちは。
共助のビジネスモデル検討協議会(IUDC)事務局で、データサイエンティストを務めている川田です。
私たちIUDCでは、地域課題の可視化と解決を目指し、データを活用した分析や可視化の取り組みを進めています。先日の「クマ×共生ハッカソン」でも、参加者の皆さんとともにデータを見ながら、熊と人の共生を考える貴重な時間となりました。
ハッカソン時にご紹介した分析結果については、以下記事を参照ください。
今回は、データ分析を実施する際にデータを突合する処理をpythonで実施しましたので、その方法をご紹介します。
1. 石川県の熊出没データを見てみよう
まずは、いしかわオープンデータカタログでどんなデータがあるかを見てみましょう。

令和1年~令和6年に関しては、様々な条件毎に出没情報がまとめられているようです。
森林からの出没データをExcelで見てみましょう。

例えば、「森林からの出没データ」のカラムは以下の通りです。
✔︎ WKT
✔︎ ID
✔︎ 目撃情報種類
✔︎ 出没年
✔︎ 出没日
✔︎ 時刻
✔︎ 市町名
✔︎ 場所
✔︎ 備考
✔︎ 頭数
✔︎ 集落
✔︎ 集落コード
✔︎ 500メッシュコード
✔︎ 緯度
✔︎ 経度
✔︎ 森林からの出没
時系列(出没日・時刻)や空間情報(緯度・経度)が揃っているため、地図上の可視化や時間帯別の傾向分析など、さまざまな切り口での活用が期待できます。
※注意点
データを見てみると、出没日が西暦ではなくR〇という記載になっていたり、頭数に頭という単位がついていてこのままだと数値として扱えなかったりと、分析する上でクレンジングする必要がある箇所が複数存在します。今回は、Tableauをつかって分析の準備のための加工を実施しましたので、そちらは以下記事でご紹介しています。
2. 複数CSVの統合に向けて
出没原因ごとにデータがファイルで分かれており、しかもそれぞれのCSVには出没要因(森林・河川・誘引物など)を示す列が存在しないため、このまま統合してしまうと「どのレコードがどの出没要因なのか」がわからなくなってしまいます。
そこで、データを統合する前に「出没カテゴリ」というカラムを追加して、ファイルごとの出没要因を明示しておく必要があります。
突合手順:
データをすべてダウンロード
全てのデータに「出没カテゴリ」列を追加(Excelで作業)
Pythonによりデータ突合
以下は、複数のCSVファイルを読み込み、1つのCSVに統合するPythonコードです。ファイル名をもとに元の出没要因を確認できるよう、ファイル名を列として記録する工夫も加えています。
import os
import pandas as pd
# === 設定 ===
folder_path = './' # CSVファイルがあるフォルダのパス
output_file = 'merged_bear_incidents.csv' # 統合後に保存するファイル名
# === ファイル統合処理 ===
# フォルダ内の 'bear_incidents' で始まるCSVファイルを対象とする
csv_files = [f for f in os.listdir(folder_path)
if f.startswith('bear_incidents') and f.endswith('.csv')]
# 各CSVを読み込み、リストに格納
dataframes = []
for file in csv_files:
df = pd.read_csv(os.path.join(folder_path, file))
df['source_file'] = file # オプション: 元ファイル名を列に追加
dataframes.append(df)
# すべてのデータフレームを縦方向に連結(行方向にマージ)
merged_df = pd.concat(dataframes, ignore_index=True)
# 統合結果をCSVとして保存
merged_df.to_csv(os.path.join(folder_path, output_file), index=False)
print(f"{len(csv_files)} ファイルを統合しました: {output_file}")今回ご紹介したような「複数ファイルの統合処理」といった手法は、熊の出没情報に限らず、他のオープンデータや日常業務で扱うデータ分析の現場でも広く応用可能です。
例えば、自治体の統計情報や施設情報、アンケート結果など、同じ構造のファイルが複数存在する場面では、同様の手法で効率的にデータを整えることができます。
ぜひみなさんも、ご自身の関心あるテーマやデータで、チャレンジしてみてください!
