티스토리 뷰

저번글에 이어서 geopandas를 계속 소개하겠습니다.

 

geopandas.org 여기 사이트에 들어가면 geopandas에 모든 기능이 나와 있습니다.

 

참고하셔도 좋을 것 같습니다.

 

오늘 포스트할 내용은 geopandas를 이용한 좌표체계 바꾸기와 intersect입니다.

 


첫번째로 읍면동안에 상점의 개수가 몇개인지 세어보겠습니다.

 

저번 포스팅에서 이어서 작업을 진행하겠습니다. 찾기 귀찮으신분은 아래의 코드를 사용해주시면 됩니다.

 

import geopandas as gpd
import pandas as pd

EMD = gpd.read_file('./EMD_202005/EMD.shp',encoding = 'ANSI')
seoul = EMD[EMD['EMD_CD'].str.startswith('11')]

shop = pd.read_csv('./상권정보/소상공인시장진흥공단_상가(상권)정보_서울_20200630.csv',sep='|')
shop = gpd.GeoDataFrame(shop, geometry=gpd.points_from_xy(shop['경도'], shop['위도']))
shop.set_crs(epsg = 4326, inplace = True)

자 이렇게 상점정보랑 읍면동을 shop, seoul 이란 변수로 불러왔습니다.

 

이제 shapely라는 library를 이용해 polygon 안에 point가 몇개 있는지 세어보겠습니다.

 

geopandas를 깔 때 자동으로 shapely가 깔리겠지만 만약 깔리지 않았다면 

pip install shapely

로 깔아주시길 바랍니다. shapely는 기하정보를 다룰 때 유용한 library로 공간정보를 다룰 때 유용하게 쓰이니 꼭 설치하시기 바랍니다. GeoDataFrame의 geometry 정보를 처리할 때 자주 쓰입니다.

 

point가 polygon에 포함되는지 안되는지 알 수 있는 방법은 <point>.intersect(<polygon>) 입니다. 

 

그런데 또 먼저 해야할 일이 있습니다. 우리가 불러온 seoul은 UTM-K 좌표계로 PCS 좌표계입니다. 이를 경위도 좌표계로 바꾸어줘야 분석을 진행할 수 있습니다. 이는 다음과 같이 아주 쉽게 해결할 수 있습니다.

# 좌표계 wgs 84로 바꾸기
seoul = seoul.to_crs(epsg=4326)

경위도 좌표계인 epsg = 4326으로 읍면동 geometry 정보를 바꿔줍니다.

f = lambda x:np.sum(shop.intersects(x))
seoul['count'] = seoul['geometry'].apply(f)

위는 람다를 사용하여 각 읍면동당 몇개의 상점이 존재하는지 'count'라는 column에 저장하는 코드입니다.

 

상점의 수를 histogram 으로 그리면 다음과 같습니다.

공간 정보의 분포는 위와 같이 팔레토 분포를 띄는 경우가 많습니다.

 

다음 글에는 이런 공간정보를 시각화 하는 방법에 대하여 포스팅해보겠습니다.

최근에 올라온 글
최근에 달린 댓글
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
글 보관함