geopy는 여러 지오코딩 웹 서비스를 위한 Python 라이브러리이다.
- 지오코딩(Geocoding): 고유명칭(주소나 산, 호수의 이름 등)을 가지고 위도와 경도의 좌표값을 얻는 것
geopy 라이브러리를 활용하여 다음과 같은 두 좌표(위도, 경도)간의 거리를 구할 것이다.
lat, long은 고객 주소의 위경도, merch_lat, merch_long은 상점의 위경도이다.
geopy 라이브러리를 사용하기 위해 먼저 pip를 이용해 설치한다.
pip install geopy
geopy 라이브러리에서 거리 계산을 위해 필요한 distance 모듈을 import 해준다.
import geopy.distance
distance 모듈은 두 지점에 대한 위도와 경도를 튜플 형태로 받아 거리를 계산한다.
geopy.distance.distance((위도1, 경도1), (위도2, 경도2))
직접 위도와 경도를 입력하면 다음과 같이 거리가 출력된다.
geopy.distance.distance((36.0788, -81.1781), (36.011293, -82.048315))
위도와 경도가 하나의 변수가 아닌 각각의 변수로 존재하면 zip()을 활용하여 하나의 묶음으로 만들 수 있다.
# 상점 위도, 경도 합치기
data['merch_coord'] = pd.Series(zip(data['merch_lat'], data['merch_long']))
# 고객 위도, 경도 합치기
data['cust_coord'] = pd.Series(zip(data['lat'], data['long']))
이렇게 위경도 묶음을 Series로 만들고 거리를 계산한 결과를 새로운 컬럼 distance에 저장하는 코드는 다음과 같다.
구하고자 하는 단위를 위경도 뒤에 지정해주면 그에 맞게 거리를 계산한다. 여기서는 km 단위를 사용하였다.
data['distance'] = data.apply(lambda x: geopy.distance.distance(x['merch_coord'], x['cust_coord']).km, axis=1)
apply 함수를 사용해 전체 행에 적용하고 axis=1로 가로 방향 한 행씩 lambda 함수를 실행한다.
다음과 같이 data['distance']를 보면 모든 데이터에 대한 거리가 계산되었음을 볼 수 있다.
data['distance']
더 자세한 정보는 아래 링크에서 확인할 수 있다.
데이터: https://media.githubusercontent.com/media/musthave-ML10/data_source/main/fraud.csv