일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 빅데이터
- plugin
- mapping
- Data Analysis
- Spatial Data Analysis
- 데이터 시각화
- map
- 공간데이터 분석
- 인공지능
- AI
- QGIS
- GIS
- 데이터 분석
- 지도
- install
- CARTO
- 우버
- 플러그인
- Web Mapping
- Web GIS
- 머신러닝
- Uber
- 인스톨
- Kepler.gl
- data visualization
- machine learning
- 웹지도
- 설치
- Mapbox
- Big data
- Today
- Total
GIS & Spatial Analysis in KOREA
Python의 Geopandas를 이용한 공간데이터 시각화 (1) 본문
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> |
뉴욕주의 북동부 지역은 캠핑 여행을 위한 훌륭한 지역이다.
[ 과제 ]
비영리 단체가 필리핀에서 사업을 확장할 때 외곽지역 어디서부터 시작해야 하는지 지도 시각화를 통해 확인해 보자.