개발 블로그

[Python] 데이터 시각화 (지도/ Folium, GeoJSON) 본문

Programming Language/Python

[Python] 데이터 시각화 (지도/ Folium, GeoJSON)

draidev 2022. 3. 24. 21:06

시각화할 데이터는 [Python] pandas, seaborn 실습에서 사용한걸 활용합니다.​

목차>

더보기

목차

    01 Folium

    Folium은 leaftlet.js를 기반으로 하는 Python 지도 시각화 라이브러리입니다.

    Folium library 설치 :

    • pip install folium==0.5.0
    • pip install --index-url=http://pypi.python.org/simple/ --trusted-host pypi.python.org folium==0.5.0
    • conda install folium==0.5.0

    southkorea-maps/kostat/2013/json/skorea_municipalities_geo_simple.json

    02 GeoJSON 

    JSON 데이터 형식을 활용한 공간 데이터 교환 포맷(Geospatial Data Interchange Format)

    • GeoJSON에서 Feature는 Geometry object와 속성정보를 담고 있고, Feature 컬렉션은 Feature의 집합으로 구성됩니다.

    <참고>

    http://www.onspatial.com/2010/01/geojson-format-specification.html

    https://en.wikipedia.org/wiki/GeoJSON

     

     

    03 지도를 활용한 데이터 시각화

    우선 github에서 가져온 파일이 json형식이기 때문에 json을 import해주고 json변수를 만들어 줍니다.

    import json
    
    geo_path = 'skorea_municipalities_geo_simple.json'
    geo_str = json.load(open(geo_path, encoding='utf-8')) # 'r'모드 생략

    출력해보면 아래와 같이 dict타입의 json형식이 출력되는것을 볼 수 있습니다.

    json에 대해서 더 알고싶다면 -> JSON이란?

    geo_str 출력

    03_01 folium.Map( )

    folium을 사용하기 위해 import해줍니다.

    folium.Map()을 이용하여 지도 객체를 만들어 줍니다.

    • location = [위도, 경도]
    • zoom_start : map객체 실행 후 지도의 확대 정도
    • tiles : 지도 타입 (default type, "Stamen Terrain", "Stamen Toner")
    import folium
    
    map = folium.Map(location=[37.5502, 126.982], zoom_start=11, tiles='Stamen Toner')

    Stamen Toner 출력
    default 출력
    Stamen Terrain 출력

    03_02 map.choropleth( )

    choropleth는 Pandas DataFrames/Series와 Geo/TopoJSON 지오메트리 간에 데이터를 바인딩하여 쉽게 만들 수 있습니다. Color Brewer 순차 색 구성표는 라이브러리에 내장되어 있으며 다른 조합을 빠르게 시각화하기 위해 전달할 수 있습니다.

    • geo_data : 지도 데이터 파일 경로
    • data :  시각화 하려는 데이터파일
    • columns : [지도 데이터와 매핑할 값, 시각화 할 변수]
    • fill_color : 시각화에 쓰일 색https://colorbrewer2.org/#type=sequential&scheme=BuGn&n=3
    • key_on : 컬러 범주 이름,  json 파일(지도 데이터)의 "feature" type의 "id" 에 매칭됩니다.
    map.choropleth(geo_data = geo_str, 
                   data = gu_df['살인'], 
                   columns = [gu_df.index, gu_df['살인']], 
                   fill_color = 'PuRd', 
                   key_on = 'feature.id')

    choropleth( )실행 후 map 출력

     

     

    Comments