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']
더 자세한 정보는 아래 링크에서 확인할 수 있다.
Welcome to GeoPy’s documentation! — GeoPy 2.3.0 documentation
Different services have different Terms of Use, quotas, pricing, geodatabases and so on. For example, Nominatim is free, but provides low request limits. If you need to make more queries, consider using another (probably paid) service, such as OpenMapQuest
geopy.readthedocs.io
데이터: https://media.githubusercontent.com/media/musthave-ML10/data_source/main/fraud.csv