Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python 3で鳥の渡りを追跡!GPSデータによる移動経路の可視化

野生動物の研究現場では、GPSモジュールを動物に取り付けて行動を追跡する手法が広く活用されています。これにより、年間を通じて動物がどのような場所を移動しているのか、いつどこに滞在しているのかといった詳細な行動パターンを把握することが可能です。

本記事では、こうしたGPSトラッキングデータを題材に、Pythonを使って鳥の移動経路を可視化する方法を解説します。使用するデータセットには、GPSモジュールが記録した位置情報が格納されており、CSV形式で提供されています。ファイルには、bird_id(個体ID)、date_time(日時)、latitude(緯度)、longitude(経度)、speed(速度)の各フィールドが含まれています。

必要なライブラリのインストール

このタスクでは、matplotlib、pandas、cartopyの3つのモジュールを使用します。Anaconda環境にインストールするには、以下のコマンドを実行してください。必要に応じて、依存関係にあるその他の重要なモジュールも自動的にインストールされます。

conda install -c conda-forge matplotlib
conda install -c anaconda pandas
conda install -c scitools/label/archive cartopy

ステップ1:緯度・経度による移動経路のプロット

まずは、緯度と経度の値をもとに位置情報をシンプルにプロットしてみましょう。データセットには2羽の鳥のデータが含まれているため、個体ごとに異なる色で描画すれば、それぞれの追跡地点をひと目で区別できます。

サンプルコード

import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv('bird_tracking.csv')
cr = df.groupby('bird_id').groups
cr_groups = df.groupby('bird_id')
group_list = []
for group in cr:
   group_list.append(group)

plt.figure(figsize=(7, 7))

# 個体(bird_id)ごとにデータセットからグラフを作成
for group in group_list:
   x, y = cr_groups.get_group(group).longitude, cr_groups.get_group(group).latitude
   plt.plot(x, y, marker='o', markersize=2)
plt.show()

出力結果

Python 3で鳥の渡りを追跡!GPSデータによる移動経路の可視化

この図から、2羽の鳥がそれぞれ異なる経路をたどって移動している様子を確認できます。ただし、この状態では地理的な文脈が分かりにくいため、次は実際の地図上に重ねて描画してみましょう。

ステップ2:cartopyで地図上に移動経路を描画

続いて、cartopyライブラリを使い、追跡結果を実際の地理的な地図上にプロットします。これにより、鳥が通過した海域や陸地、国境との位置関係など、正確な移動ルートを視覚的に把握できるようになります。

サンプルコード

import pandas as pd
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt

df = pd.read_csv("bird_tracking.csv")
bird_id = pd.unique(df.bird_id)

# 地図上にデータを表示するための投影法を設定
projection = ccrs.Mercator()
plt.figure(figsize=(7, 7))
axes = plt.axes(projection=projection)
axes.set_extent((-30.0, 25.0, 10.0, 50.0))
axes.add_feature(cfeature.LAND)
axes.add_feature(cfeature.OCEAN)
axes.add_feature(cfeature.COASTLINE)
axes.add_feature(cfeature.BORDERS, linestyle=':')

for id in bird_id:
   index = df['bird_id'] == id
   x = df.longitude[index]
   y = df.latitude[index]
   axes.plot(x, y, '.', transform=ccrs.Geodetic(), label=id)
plt.legend(loc="lower left")
plt.show()

出力結果

Python 3で鳥の渡りを追跡!GPSデータによる移動経路の可視化

メルカトル図法を採用した地図上に、陸地・海洋・海岸線・国境線が描画され、その上に各個体の移動経路が点としてプロットされます。transform引数にccrs.Geodetic()を指定することで、緯度経度の生データが正しく地図座標へ変換されます。また、凡例には個体IDが表示されるため、どの経路がどの鳥のものかも簡単に判別できます。


  1. Python(Matplotlib)で超高品質の画像を保存する方法

    Pythonで非常に高品質な画像を保存したい場合、Matplotlibを使えば簡単に実現できます。ここでは、dpi(解像度)や保存形式を指定して、印刷品質レベルの画像を出力する手順を詳しく解説します。 高品質画像を保存するための手順 subplots()メソッドを使って、figとaxの変数を作成します。デフォルトでは行数(nrows)と列数(ncols)はどちらも1に設定されています。 plot()メソッドを使用して、グラフの線を描画します。 ylabel()とxlabel()を使って、Y軸・X軸のラベルを追加できます。 高品質な画像を取得するには、.eps形式(ベクター形式)での保存が有効

  2. PythonのScikit-learn(sklearn)でテストデータセットを作成する方法

    PythonのScikit-learn(sklearn)ライブラリには、さまざまなグラフやプロットを作成するために利用できるサンプルデータセットが標準で用意されています。これらのデータセットは、サンプルグラフやチャートの作成、値の変化に応じたグラフの挙動の確認などに非常に便利です。さらに、実際のデータセットを使い始める前に、色や軸などの表示パラメータを自由に調整して試すこともできます。ここでは、代表的なデータ生成関数である make_blobs と make_circles を使って、テスト用の散布図データセットを作成する方法を紹介します。make_blobs を使ってクラスタ状のデータを作成