비교 테스트 패키지 선택

ChatGPT-4에서 추천한 패키지들입니다. pyproj를 선택해서 진행해보겠습니다. 물론 AI가 정답은 아니지만 모두 유명한 패키지들이기 때문에 엉뚱한 답은 아닙니다.
테스트
먼저, 필요한 패키지들을 준비합니다.
import pandas as pd
import pyproj
import geopandas as gpd
print(pyproj.__version__)
print(gpd.__version__)
3.6.0
0.13.2
파이썬은 3.11이고, 패키지들도 최신 버전들입니다.
테스트 데이터로는 공공데이터포털의 공개데이터를 이용했습니다.
df = pd.read_csv('data/전국CCTV표준데이터.csv', encoding='cp949')
df.head(2)
필요한 항목만 남기고, NULL 데이터를 제거했습니다.
df = df[['위도', '경도', '관리기관명']]
df.columns = ['lat', 'lon', 'org']
df = df.dropna(subset=['lon'])
df = df.dropna(subset=['lat'])
테스트하기에는 건수가 적어서 동일 데이터를 겹쳐서 494,600건으로 늘렸습니다.
df2 = pd.concat([df, df, df, df, df, df, df, df, df, df], ignore_index=True)
PYPROJ
먼저 PYPROJ를 이용하여 좌표 변환을 해보겠습니다. 좌표는 Geometry가 아닌 추가 속성 항목으로 생성되는 방식입니다.
# 프로젝션 정의
wgs84 = pyproj.CRS('epsg:4326') # 원래 좌표계 (WGS84)
tm_korea = pyproj.CRS('epsg:5179') # 변환하려는 좌표계 (TM Korea)
# Transformer 생성
transformer = pyproj.Transformer.from_crs(wgs84, tm_korea)
# 좌표 변환 함수 정의
def convert_coordinates(lon, lat):
new_lat, new_lon = transformer.transform(lat, lon) # 주의: transform 함수는 위도 먼저 받습니다.
return new_lon, new_lat
# 새로운 좌표를 계산하고 새로운 컬럼에 저장
df2['x'], df2['y'] = zip(*df2.apply(lambda row: convert_coordinates(row['lon'], row['lat']), axis=1))
제 장비 기준으로 약 4초~4.5초가 걸렸습니다.
Geopandas
Geopandas는 to_crs를 이용해서, Geometry도 변환하고, 이어서 변환한 좌표 속성 항목까지도 만들었습니다.
# 좌표계를 가진 GeoDataFrame 생성
gdf = gpd.GeoDataFrame(df2, geometry=gpd.points_from_xy(df2.lon, df2.lat))
# 현재 좌표계 설정 (예를 들어, WGS84)
gdf.crs = 'epsg:4326' # WGS84는 EPSG 코드 4326을 사용합니다
# 좌표계를 EPSG:5179로 변환
gdf = gdf.to_crs('epsg:5179')
# 변환 좌표 속성 생성
gdf['x'] = gdf['geometry'].x
gdf['y'] = gdf['geometry'].y
제 장비 기준으로 약 0.8초가 걸렸습니다!
제 예상을 깨는 결과여서 데이터를 150만 건 정도까지 늘리고 해봐도 pyproj는 약 12초, Geopandas는 약 2초가 걸렸습니다.
Geopandas가 더 빠른 이유
Geopandas에서도 좌표변환에 proj를 이용하는 것으로 알고 있었는데 제 상식을 깨고 Geomtery까지 변환한 Geopandas가 더 빠른 이유는 뭘까요?
https://jorisvandenbossche.github.io/blog/2020/02/11/geopandas-pyproj-crs/
또한, 1년이 안된 다른 자료에서는 대용량데이터 좌표변환시 Geopandas 보다는 pyproj나 PostGIS를 권하고 있습니다. 물론, Geoapndas를 개선하고 있다는 얘기도 있지만요
https://stackoverflow.com/questions/73582525/geopandas-convert-crs
Geopandas 개발자 분은 정확한 답을 아시겠지만 ChatGPT-4의 답변은 이렇습니다.

결론적으로, 정말 빅데이터가 아닌 일반적인 수준의 데이터인 경우 Geopandas로 좌표변환 등의 작업을 해도 느리지 않다는 것입니다.