✔ Python/2. Visualization

[GeoPandas] Python으로 .shp 파일 읽기

  • -
주제 :  파이썬으로 .shp 파일 읽기
작성일 : 13rd January, 2023
버젼 : pandas 1.4.4 / geopandas 0.9.0 / mpl 3.5.2
활용데이터 : 공간정보시스템 - 대한민국 최신 행정구역(SHP) 다운로드

SHP 파일 읽기

안녕하세요, wscode 루카스입니다.
오늘은 파이썬 Geopandas 활용하여 .shp 파일 읽는 방법입니다.


1. 데이터

1.1. 대한민국 최신 행정구역(SHP) 다운로드

우선, 필자가 가지고 있는 SHP파일이 없으니, 대한민국 최신 행정구역 데이터를 다운받도록 하겠습니다.
필자는 다음 포스팅에서 서울시의 공원 시각화 작업을 위해, 읍면동까지 확인이 가능한 .shp 파일을 다운로드하겠습니다.

 

대한민국 최신 행정구역(SHP) 다운로드 – GIS Developer

 

www.gisdeveloper.co.kr

대한민국 최신 행정구역 .shp 파일 다운로드

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.head() 결과값

우선, 데이터를 표출해 봅시다

D1.convex_hull.plot(color='gray', edgecolor="w")

대한민국 읍면동

3. 전국 SHP 파일에서 서울만 표출하기

3.1. 데이터 전처리

법정동코드(EMD_CD) 활용하여 서울만 표출하기

법정동코드는 행정표준코드관리시스템에 조회가 가능합니다. 이를 이용해서 서울만 표출할 수 있습니다.
서울의 EMD_CD는 20,000,000 미만일 것을 확인할 수 있습니다.

데이터형식 파악

. 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 부분의 경우, 원하는 색상을 영문으로 기입하는 방식 외에도 헥스 코드(색상값)를 넣는 것도 가능합니다.

SHP 파일로 서울 그리기

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 링크입니다


Reference

  1. Geopandas 설치방법 : 2023.01.06 - [✔ Python/Visualization] - [GeoPandas] GeoPandas 라이브러리 설치
 

[GeoPandas] GeoPandas 라이브러리 설치

주제 : GeoPandas 라이브러리 설치 작성일 : '23.01.06. 1. GeoPandas 1.1. 소개 GeoPandas는 Geography + Pandas로 파이썬에서 지리정보 데이터처리를 기하학적 연산과 시각화 등의 작업을 돕는 벡터 데이터 작업을

wscode.tistory.com

   2. 도로명주소 데이터 좌표계 확인 : https://anweh.tistory.com/53

 

[python, GIS] 도로명주소 데이터 좌표계 확인 및 변환

건물 레이어, 배경도 레이어, 등등 여러 GIS 관련 오픈데이터를 제공하는 사이트는 많지만 안타깝게도(?) 데이터들 간 좌표계가 달라서 여러 데이터들을 종합적으로 융합하여 사용하기가 매우 어

anweh.tistory.com

 


 

 

 

 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.