티스토리 뷰

안녕하세요. 이번 포스트에서는 공간정보를 다룰 때 꼭 사용하게되는 geopandas를 다루어 보겠습니다.

 

geopandas는 공간정보를 담은 .shp, .geojson, .csv 파일을 파이썬에서 분석할 수 있게 메모리에 불러오면서

 

shapely와 연계해서 공간분석을 지원하는 라이브러리 입니다.

 

Anaconda, Window로 개발하신다고 하면 anaconda prompt 창에서 다음을 입력해주시면 됩니다.

conda install geopandas

 

앞으로 다룰 데이터를 소개하겠습니다. 

 

polygon 데이터를 다루기 위해 전국 읍면동 데이터를 여기서 다운 받아 주세요.

 

point 데이터를 다루기 위해 여기서 전국 상권데이터를 다운 받아 주세요. 

본 포스팅에서는 이 파일 중 '소상공인시장진흥공단_상가(상권)정보_서울_20200630.csv' 파일만을 사용하겠습니다.

 

자 그럼 이제 본격적으로 geopandas를 다루어 보겠습니다.

 


우선 import를 하고 읍면동 polygon data를 파이썬으로 불러와보겠습니다.

 

import geopandas as gpd

EMD = gpd.read_file('./EMD_202005/EMD.shp',encoding = 'ANSI')
EMD.head()

EMD라는 변수에 읍면동 정보를 가져왔습니다.

 

읍면동 정보를 갖고 있다.

 

여기서 geometry는 polygon의 꼭지점 정보의 집합입니다.

 

나중에 이 geometry정보로 공간적인 연산을 진행할 수 있습니다.

 

type(EMD)

이렇게 가져온 EMD는 geopandas.geodataframe.GeoDataFrame 형태로 가져와집니다. 

 

이런 GeoDataFrame은 아주 아주 공간정보를 다룰 때 용이합니다. 

 

EMD.plot()

위와 같이 <GeoDataFrame>.plot()을 하면 아래와 같이 쉽게 직교 좌표계에서 공간정보를 볼 수 있습니다.

 

 

전국 읍면동을 한눈에 볼 수 있다

 

또한 GeoDataFrame은 pandas의 데이터프레임처럼 다룰 수 있습니다. 

 

seoul = EMD[EMD['EMD_CD'].str.startswith('11')]

서울의 행정동 코드가 11로 시작함을 착안하여 전국 읍면동에서 서울시에 속하는 읍면동만 가져왔습니다. 

 

pandas에서 데이터를 처리하는 방식과 비슷함을 확인할 수 있습니다. 이렇게 pandas를 잘 쓰시던 분은 geopandas를 

 

이용하여 아주 쉽게 공간정보를 다룰 수 있을 것 입니다.

 

이번 포스트에서는 마지막으로 csv 파일을 geopandas로 불러오는 작업을 해보겠습니다.

 

import pandas as pd

# pandas로 csv파일 불러오기
shop = pd.read_csv('./상권정보/소상공인시장진흥공단_상가(상권)정보_서울_20200630.csv',sep='|')
type(shop)  # pandas.core.frame.DataFrame

# GeoDataFrame 형식으로 변환하기
shop = gpd.GeoDataFrame(shop, geometry=gpd.points_from_xy(shop['경도'], shop['위도']))
type(shop)  # geopandas.geodataframe.GeoDataFrame

우선 pandas로 pandas.core.frame.DataFrame 형태로 불러온다음 geopandas.geodataframe.GeoDataFrame 형태로 

변환해준 코드입니다.

 

shop의 경도와 위도를 사용해서 geometry를 구성했습니다. xy축으로 가져오니 첫번째 argument에 경도, 두번째에는 위도를 넣어줍니다.

 

shop.head() 결과

이렇게해서 전국의 상점정보를 GeoDataFrame 형식으로 가져왔습니다.

 

GeoDataFrame 형태로 가져오면 문제점이 하나 있습니다. 바로 좌표계를 정해주지 않았다는 것입니다.

 

.shp파일의 위치를 보면 .prj 파일이 있음을 확인할 수 있습니다. prj 파일은 shp파일의 좌표계에 대한 설명정보이고 이 때문에 polygon을 geopandas로 불러올 때는 좌표계를 따로 설정할 필요가 없었습니다. 

 

하지만 위 shop의 geometry는 x,y가 어떤 좌표계인지 명시하지 않았기 때문에 명시해 줘야하는 작업이 필요합니다.

geopandas는 다음과 같이 아주 쉽게 좌표계를 명시할 수 있습니다.

 

shop.set_crs(epsg = 4326, inplace = True)

 

참~ 쉽죠? 좌표계에 대한 설명은 여기에 대강 정리해 놨으니 참고해주시길 바랍니다. 

 

그냥 경위도 좌표계를 쓰고 싶다하면 epsg 4326을 사용하시면 됩니다. 

 

그럼 이것으로 첫번째 geopandas 관련 글을 마치겠습니다~

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함