주제 : 파이썬으로 .shp 파일 읽기
작성일 : 13rd January, 2023
버젼 : pandas 1.4.4 / geopandas 0.9.0 / mpl 3.5.2
활용데이터 : 공간정보시스템 - 대한민국 최신 행정구역(SHP) 다운로드
안녕하세요, wscode 루카스입니다.
오늘은 파이썬 Geopandas 활용하여 .shp 파일 읽는 방법입니다.
1. 데이터
1.1. 대한민국 최신 행정구역(SHP) 다운로드
우선, 필자가 가지고 있는 SHP파일이 없으니, 대한민국 최신 행정구역 데이터를 다운받도록 하겠습니다.
필자는 다음 포스팅에서 서울시의 공원 시각화 작업을 위해, 읍면동까지 확인이 가능한 .shp 파일을 다운로드하겠습니다.
- [공간정보시스템] 대한민국 최신 행정구역(SHP) - http://www.gisdeveloper.co.kr/?p=2332
1.2. 데이터 속성
데이터 표출하기 전에 데이터의 속성을 미리 파악하면, 데이터에 대한 이해의 폭이 넓어집니다.
혹시 Geometry 및 SHP file가 생소하시다면 "더 보기"를 클릭하시면 확인이 가능합니다.
1. Geometry 란 ?
- Geometry 타입의 데이터는 다음과 같은 지리정보 속성을 포함하고 있습니다.
- area : 넓이 정보
- boundary : 테두리 정보
- centroid : 중앙지점 정보
- Geopandas을 통해 두 지점간의 거리를 계산이 가능합니다.
(단, 우리가 흔히 사용하는 넓이와 거리의 단위를 사용하는 것이 아니기때문에 다른 객체 안에서의 비교는 불가능합니다.)
2. Shape file 란 ?
- 통상 .shp, .shx, .dbf 3개의 파일을 합쳐서 shape file 이라고하며, GIS에서 사용하는 벡터 형식의 데이터입니다.
- .shp : 점, 다각형 등의 지리정보 포함
- .shx : 지리정보의 인덱스 정보 포함
- .dbf : 지리정보의 속성 정보 포함
- .shp 파일의 특이한 점은 나머지 .dbf, .shx 파일이 없으면 불러올 수 없다는 점입니다. 그 외에 .prj 해당 데이터가 활용하는 좌표계의 대한 정보가 포함되어있음
2. .shp 파일 읽기
2. 1. Python의 Geopandas 활용
Geopandas는 Pandas API을 기반으로 만들어져 있어, Pandas의 문법과 유사하게 구성되어 있습니다.
- pandas 문법
- csv 파일 읽기 : pd.read_csv("파일이름. csv")
- excel 파일 읽기 : pd.read_excel("파일이름.xlsx")
- geopandas 문법
- shp 파일 읽기 : gpd.read_file("파일이름.shp")
# import libaray and packages
%matplotlib inline
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
# prepare and read data
F1 = './행정구역/EMD_20221119/emd.shp'
D1 = gpd.read_file(F1, encoding='cp949')
D1.head()
※ 주의 ※ .shp 파일 위치에 .dbf, .shx 파일도 모두 포함되어야합니다.
우선, 데이터를 표출해 봅시다
D1.convex_hull.plot(color='gray', edgecolor="w")
3. 전국 SHP 파일에서 서울만 표출하기
3.1. 데이터 전처리
법정동코드(EMD_CD) 활용하여 서울만 표출하기
법정동코드는 행정표준코드관리시스템에 조회가 가능합니다. 이를 이용해서 서울만 표출할 수 있습니다.
서울의 EMD_CD는 20,000,000 미만일 것을 확인할 수 있습니다.
- 법정동코드목록조회 - https://www.code.go.kr/stdcode/regCodeL.do
데이터형식 파악
. info()을 통해서 데이터형식(Dtype) 확인할 수 있습니다.
D1.info()
df1 = D1.astype({ 'EMD_CD' : 'int' })
df1.info()
다만, 필자는 EMD_CD가 20,000,000 이하의 값만을 필요함으로 EMD_CD 데이터형식을 정수(INTEGER)로 변경이 필요합니다.
seoul = df1[df1['EMD_CD']<20000000]
3.2. 서울만 표출
ax = seoul.convex_hull.plot(color='pink', edgecolor="w")
# ax.set_axis_off() # 축제거
plt.show()
color 부분의 경우, 원하는 색상을 영문으로 기입하는 방식 외에도 헥스 코드(색상값)를 넣는 것도 가능합니다.
- Encycolorpedia : https://encycolorpedia.kr/bfff00
- Adobe color : https://color.adobe.com/ko/create/color-wheel
4. 전체 소스코드
# import libaray and packages
%matplotlib inline
import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
# prepare and read data
F1 = './행정구역/EMD_20221119/emd.shp'
D1 = gpd.read_file(F1, encoding='cp949')
D1.convex_hull.plot(color='gray', edgecolor="w")
# extract seoul data from the orginal dataset
df1 = D1.astype({ 'EMD_CD' : 'int' })
seoul = df1[df1['EMD_CD']<20000000]
# draw the seoul map
ax = seoul.convex_hull.plot(color='pink', edgecolor="w")
ax.set_axis_off()
plt.show()
Other Posts
Geopandas 활용한 Geoscience series 링크입니다
- Part 1- 2023.01.06 - [✔ Python/Visualization] - [GeoPandas] GeoPandas 라이브러리 설치
- Part 3- 2023.01.13 - [✔ Python/Visualization] - [GeoPandas] 서울시 공원 위치 시각화1/2
- Part 4- 2023.01.14 - [✔ Python/Visualization] - [Folium] 서울시 공원 위치 시각화2/2
Reference
2. 도로명주소 데이터 좌표계 확인 : https://anweh.tistory.com/53
'Python > 4️⃣ 시각화' 카테고리의 다른 글
[Folium] 서울시 공원 위치 시각화(2/2) (0) | 2023.01.14 |
---|---|
[GeoPandas] 서울시 공원 위치 시각화(1/2) (0) | 2023.01.13 |
[Folium] 지진 데이터 시각화 (0) | 2023.01.10 |
[GeoPandas] GeoPandas 라이브러리 설치 (2) | 2023.01.06 |
[Python/Cartopy]모델자료 활용한 일기도 묘화 (1) | 2020.11.06 |