Geospatial Analysis 입문-1

원상연·2020년 8월 16일
0
post-thumbnail

캐글에 Courses 에 가면 주제별로 기본적인 내용과 예제로 구성된 과정들을 제공하고 있다. 초반에는 몇가지 없었지만 계속 업로드되고 있고 생각보다 알찬 구성으로 되어있어서 한 번씩 정리하기 좋게 되어있다.

그 중에서 공간데이터를 다루는 지형공간정보 분석 Geospatial Analysis 과정을 정리해보았다.
사실 해당 튜토리얼 및 예제가 세세하게 너무 잘 되어있어서, 예전에 정리하려다가 안했었다.
대신 구성을 조금 축약해서 예제 중심으로 다뤄보기로 했다.

1. GeoPandas로 지도 띄우기

첫 단원 Your First Map 에서는 GeoPandas 를 이용하여 공간데이터를 불러오는 부분과 공간데이터의 간단한 구성 및 포맷을 다루고 있다.
이후 5개의 예제를 통해 아래와 같은 연습과제를 다루게 된다고 소개하고 있다.

  • Where should a global non-profit expand its reach in remote areas of the Philippines?
  • How do purple martins, a threatened bird species, travel between North and South America? Are the birds travelling to conservation areas?
  • Which areas of Japan could potentially benefit from extra earthquake reinforcement?
  • Which Starbucks stores in California are strong candidates for the next Starbucks Reserve Roastery location?
  • Does New York City have sufficient hospitals to respond to motor vehicle collisions? Which areas of the city have gaps in coverage?
  • Visualize crime in the city of Boston, examine health facilities in Ghana, explore top universities in Europe, and track releases of toxic chemicals in the United States.

데이터 읽어오기

먼저 GeoPandas 라이브러리를 통해 공간데이터를 읽어보자.

import geopandas as gpd

공간정보 파일은 다양한 포맷으로 이용되고 있다.
주로 shapefile (ESRI 의 ArcGIS 포맷), GeoJSON (JSON 형태의 공간데이터), KML (Google Earth 포맷), GPKG (오픈표준 통합 포맷) 이 있으며,
처음부터 각 형식을 세세하게 알기보다는

  • shapefile 이 오래전부터 가장 보편적으로 쓰이는 포맷이며
  • geopandas 의 gpd.read_file() 함수를 통해 포맷들을 일괄적으로 불러올 수 있다.

Exercise: Your First Map 과제를 통해 연습해보자.

데이터 또한 캐글의 'geospatial-learn-course-data' 예제 데이터를 이용하였습니다.

# 데이터 열기
world_loans = gpd.read_file("../input/geospatial-learn-course-data/kiva_loans/kiva_loans/kiva_loans.shp")
world_loans.head()

head() 를 통해 데이터를 불러온 것에서 알 수 있듯이. Pandas DataFrame의 모든 커맨드를 동일하게 이용할 수 있습니다.
이는 GeoPandas GeoDataFrame 객체가 DataFrame 의 기능을 모두 가지고 있기 때문입니다.

type(world_loans)

즉 우리가 모든 컬럼을 쓰지 않는다면 선택해서 이용 가능하고, 여러 커맨드를 사용할 수 있습니다.

data = world_loans.loc[:, ["sector", "country", "geometry"]].copy()

value_counts() 로 국가별 그리고 몇번씩 나타났는지 정렬해줍니다.

data.country.value_counts()


마찬가지로 loc ,iloc 이나 isin 을 통해 데이터를 선택할 수 있습니다.

# 필리핀만 선택
PHL_loans = data.loc[world_loans.country=="Philippines"].copy()
PHL_loans.head()

지도 생성하기

plot() 을 이용하여 데이터를 빠르게 시각화 할 수 있습니다.

PHL_loans.plot()


GeoDataFrame 에는 "Geometry" 라는 공간컬럼이 존재합니다. plot() 을 실행했을때 보여지는 공간객체들을 모두 담고 있습니다.

world_loans.geometry.head()


Geometry 컬럼은 다양한 데이터타입을 지원하는데, 기본적으로 Point, LineString, Polygon 으로 구성되어있습니다.

필리핀 섬 경계 폴리곤을 추가하여 각 GeoDataFrame 을 지도에 생성하겠습니다.
plot() 에서 몇가지 파라미터를 통해 변화를 줄 수 있으며, ax 값을 명시하여 다 같은 지도에 표시될 수 있도록 해줍니다.


# 필리핀 섬 경계 KML파일 불러오기
gpd.io.file.fiona.drvsupport.supported_drivers['KML'] = 'rw'
PHL = gpd.read_file("../input/geospatial-learn-course-data/Philippines_AL258.kml", driver='KML')

# 필리핀 경계로 베이스맵 정의
ax = PHL.plot(figsize=(10,10), color='none', edgecolor='gainsboro', zorder=3)


# 베이스맵에 PHL_loans 추가
PHL_loans.plot(color='maroon', markersize=2, ax=ax)


점들이 어떤 지역 경계에 포함되는지 표시되었습니다.


이어서 좌표계와 Folium 패키지를 통해 동적지도까지 다뤄보려고 했으나 다음글에서 다루고 분석까지 마치고 목록을 다시 나눠보겠습니다.

3단원 Interactive Maps 에서 다루는 Folium 은 Leaflet 을 이용해서 배경지도를 띄워주고 줌을 가능하게 해주며, 간단하게 많이 쓰이고 있습니다.

Folium 예시

2020 국토교통 해커톤에 올렸던 간단한 Folium 사용법 링크입니다.
(데이콘)folium으로 동적지도에 좌표 시각화

0개의 댓글