Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 조류 이동 경로 추적하기: GPS 데이터 시각화 완벽 가이드

다양한 연구 현장에서 연구자들은 GPS 모듈을 활용해 동물의 행동을 추적합니다. GPS 데이터를 분석하면 특정 동물이 계절에 따라 어떤 지역을 오가는지, 언제 어디로 이동했는지 등을 정밀하게 파악할 수 있습니다.

이번 글에서는 바로 그런 유형의 데이터셋을 사용해 조류가 여러 지역으로 어떻게 이동하는지 확인해 보겠습니다. 사용할 데이터셋에는 GPS 모듈이 기록한 위치 정보가 담겨 있으며, 전체 데이터는 CSV 형식으로 제공됩니다. 파일에는 새 ID(bird_id), 날짜와 시간(date_time), 위도(latitude), 경도(longitude), 속도(speed) 필드가 포함되어 있습니다.

필요한 라이브러리 설치

이 작업을 수행하려면 Python 코드에서 사용할 몇 가지 모듈이 필요합니다. 여기서는 matplotlib, pandas, cartopy 세 가지 모듈을 사용합니다. Anaconda 환경이라면 아래 명령어로 손쉽게 설치할 수 있으며, 설치 과정에서 필요한 다른 의존성 모듈들도 함께 설치됩니다.

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

위도·경도 값으로 이동 경로 그리기

먼저 위도(latitude)와 경도(longitude) 값을 이용해 새들의 위치를 그래프로 표현해 보겠습니다. 데이터셋에는 두 마리의 새가 포함되어 있으므로, 서로 다른 색상을 적용하면 각 개체의 추적 위치를 한눈에 구분해 볼 수 있습니다.

예제 코드

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))
# 첫 번째 그룹(두루미) 데이터부터 그래프 생성
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으로 조류 이동 경로 추적하기: GPS 데이터 시각화 완벽 가이드

단순한 좌표 플롯만으로도 두 마리의 새가 서로 다른 경로로 이동했다는 사실을 확인할 수 있습니다.

실제 지도 위에 추적 결과 표시하기

이제 추적 결과를 실제 지리적 지도 위에 겹쳐 그려 보겠습니다. 이렇게 하면 새들이 실제로 어떤 항공 경로를 따라 이동했는지 훨씬 직관적으로 파악할 수 있습니다. 지도 투영(projection)과 해안선, 국경 등의 지리 정보를 추가하기 위해 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으로 조류 이동 경로 추적하기: GPS 데이터 시각화 완벽 가이드

결과를 보면 육지, 해양, 해안선, 국경선이 함께 표시된 메르카토르(Mercator) 투영 지도 위에 개체별 이동 궤적이 점으로 나타납니다. 범례(legend)를 통해 어떤 경로가 어느 개체의 것인지도 쉽게 구분할 수 있습니다.

마무리

이처럼 pandas로 GPS 로그 데이터를 손쉽게 불러오고, matplotlib과 cartopy를 조합하면 별도의 GIS 전문 도구 없이도 동물의 이동 경로를 지도 위에 시각화할 수 있습니다. 같은 방식을 응용하면 이동 거리 계산, 속도 분석, 계절별 이동 패턴 비교 등 더 깊이 있는 조류 생태 분석으로 확장할 수 있습니다.