Notice
Recent Posts
Recent Comments
관리 메뉴

GIS & Spatial Analysis in KOREA

Python의 Geopandas를 이용한 공간데이터 시각화 (1) 본문

Machine Learning/Mapping with Python

Python의 Geopandas를 이용한 공간데이터 시각화 (1)

Borin78 2019. 11. 19. 08:00

[Mapping with Python]

#Data Analysis #Spatial Data Analysis #Big Data #Machine Learning #AI #Data Visualization #Python

#데이터 분석 #공간데이터 분석 #빅데이터 #기계학습 #머신러닝 #인공지능 #데이터 시각화 #파이썬

 

 

[ 개요 ]

짧은 강의를 통해 공간 데이터를 시각화하고 여러 다른 방법으로 얽어내는 것을 배워보자.

최근 공간 빅데이터 분석 시도가 다양한 방법으로 이뤄지고 있으며, 현실 세계에서 공간 데이터 분석이 활용된 사례는 다음과 같다.

 

  • 국제적인 비영리 단체가 필리핀 외곽 지역 어디서부터 확장해 나가야 하는지 공간데이터 분석을 시도한 사례
  • 멸종 위기종인 암청색 큰 제비의 이동 경로(북미-남미, 보존구역 등) 분석 사례
  • 지진 피해 방지를 위한 보강 지역 분석 사례
  • 캘리포니아에서 Starbucks Reserve Roastery 매장 후보지역 중 위치적으로 가장 우수한 지점 분석 사례
  • 뉴욕에서 차량 사고 발생 시 대응할 수 있는 병원 및 수요 부족 지역 분석 사례
  • 보스턴 범죄 지도, 가나의 보건 시설 조사 분석, 미국 내 독성 화학 물질 배출 추적 분석 및 시각화도 해볼 예정이다.

이번 강의에서는 본격적인 강의에 앞서 기본적으로 알고 있어야 하는 내용들에 대해 다루고자 한다. 좀 더 깊이 있는 공부가 필요하다면 Pandas micro-course를 공부해볼 것을 추천한다.

 

[ 데이터 불러오기 ]

GeoPandas 라이브러리를 이용한 공간데이터를 불러들여보자.

Import geopandas as gpd

공간데이터는 shapefile, GeoJSON, KML, GPKG 등 다양한 포멧 형태의 데이터로 되어있다. 각각의 데이터 타입에 대해 논의할 것은 아니나,

 

  • Shapefile은 공간데이터 분석 시 가장 많이 활용하는 데이터 형태이며,
  • 대부분의 공간 데이터들은 gpd.read_file() 기능을 이용해 쉽고 빠르게 로딩할 수 있다.

다음 코드 셀은 통계지리정보서비스(http://sgis.kostat.go.kr/view/index)의 행정동 정보가 들어있는 파일을 업로드한 예시이다. 이 후 데이터의 5줄만 불러와 살펴보자.

# Read in the data

full_data = gpd.read_file(""C:/Users/Borin78/Deskotop/EMD_2018/Z_SOP_BND_ADM_DONG_PG.shp")

# View the first five rows of the data

ful_data.head(n=5)

 

[ 사전학습 ]

이번에는 첨부한 실습용 데이터(뉴욕시 환경보호국 자료)를 이용해 실습해보자. 앞서 head() 방법을 사용해 데이터 5줄을 살펴봤다. 이런 방식으로 우리는 Pandas DataFrame을 미리 보는 데 사용함을 기억해야 한다. 사실, DataFrame과 함께 사용할 수 있는 모든 명령은 데이터와 같이 작동한다. 데이터가 (Pandas) DataFrame의 모든 기능을 가진 (GeoPandas) GeoDataFrame 객체에 모두 로드되었기 때문이다.

Type(full_data)
Geopandas.geodataframe.GeoDataFrame

 예를 들어, 우리가 전체 데이터의 컬럼들을 모두 사용할 계획이 아니라면, 데이터의 하위 컬럼들을 선택할 수 있다.

Data = full_data.loc[:.["CLASS", ""COUNTY, "geometry"]].copy()

 우리는 value_counts() 방법을 이용해 데이터 셋에서 나타나는 다른 토지 형태와 횟수를 확인할 수 있다.

# How many lands of each type are there?

Data.CLASS.value_counts()

loc(혹은 iloc) isin을 이용해 하위 데이터들을 선택할 수 있다.

# Select lands that fall under the "WILD FOREST" or "WILDERNESS" category

wild_lands = data.loc[data.CLASS.isin(['WILD FOREST', 'WILDERNESS'])].copy()

wild_lands.head()

 

[ 지도 만들기 ]

plot() 방법을 이용해 빠르게 시각화를 해보자.

wild_lands.plot()

<matplotlib.axes._subplots.AxesSubplot at 0x2769e47ba58>

 

모든 GeoDataFrame은 특별한 “geometry” 컬럼을 가지고 있다. 공간정보를 담고 있다면 plot() 방법으로 호출할 때 표시되는 모든 기하학적 객체를 포함한다. 반면 이 칼럼은 다양한 종류의 데이터 타입들을 저장할 수 있으며, 일반적으로 각각의 엔트리는 점(Point), (LineString), (Polygon)이다.

예제로 활용하고 있는 데이터의 경우 총 2,983개의 각각 다른 폴리곤 형태의 데이터 셋을 포함하고 있으며, 위에 나온 이미지처럼 각각 다른 형태의 폴리곤이다. 아래 코드 셀은 캠핑장의 위치(Point), 트래킹 경로(LineString) 및 행정경계 (Polygon)을 포함하는 3개의 GeoDataFrame을 만드는 코드이다.

# Campsites in New York state (Point)

POI_data = gpd.read_file("../input/geospatial-learn-course data/DEC_pointsinterest/DEC_pointsinterest/Decptsofinterest.shp")

campsites = POI_data.loc[POI_data.ASSET=='PRIMITIVE CAMPSITE'].copy()

 

# Foot trails in New York state (LineString)

roads_trails = gpd.read_file("../input/geospatial-learn-course-data/DEC_roadstrails/DEC_roadstrails/Decroadstrails.shp")

trails = roads_trails.loc[roads_trails.ASSET=='FOOT TRAIL'].copy() 

 

# County boundaries in New York state (Polygon)

counties = gpd.read_file("../input/geospatial-learn-course-data/NY_county_boundaries/NY_county_boundaries/NY_county_boundaries.shp")

이제 4개의 GeoDataFrame을 모두 이용해 지도를 그려보자. plot() 방법은 모양을 결정하는 몇 개의 변수를 선택적으로 정의해 입력해 사용 가능하다. 가장 중요한 것은 ax 값을 설정하면 모든 정보가 동일한 위치에 그려진다는 것이다.

# Define a base map with county boundaries 
ax = counties.plot(figsize=(10,10), color='none', edgecolor='gainsboro', zorder=3) 

# Add wild lands, campsites, and foot trails to the base map 
wild_lands.plot(color='lightgreen', ax=ax) 
campsites.plot(color='maroon', markersize=2, ax=ax) 
trails.plot(color='black', markersize=1, ax=ax)
<matplotlib.axes._subplots.AxesSubplot at 0x7fbb7aef8f28> 

뉴욕주의 북동부 지역은 캠핑 여행을 위한 훌륭한 지역이다.

 

[ 과제 ]

비영리 단체가 필리핀에서 사업을 확장할 때 외곽지역 어디서부터 시작해야 하는지 지도 시각화를 통해 확인해 보자.

Comments