티스토리 뷰
내가 하고자 했던 건 지역사랑화폐 가맹점 수를 시군구 단위의 히트맵으로 시각화하여 비교하는 것이었다.
사실 히트맵을 그리는 방법은 다양하겠지만 카카오나 네이버 지도에서 제공하는 api로는 조금 복잡한 부분이 있어서 간단하게 Folium 모듈을 사용하여 python으로 간단하게 만들어보았다!
0. 준비물
- 시군구 행정구역 정보가 들어있는 geojson 파일
(처음에 mapshaper을 이용해서 수작업으로 geojson을 구했는데 해결되지 않는 인코딩 문제 때문에 다른 json 파일을 찾았다. 너무 감사하게도 어떤 분이 친절하게 올려주셔서 편하게 다운만 받으면 됐다..)
https://neurowhai.tistory.com/350
대한민국 행정구역(시도, 시군구) GeoJSON 파일 다운로드 및 SHP 파일 단순화 후 변환 방법 설명
원본 출처이자 해상도가 높은 파일(SHP)은 아래 링크에서 구하실 수 있습니다. http://www.gisdeveloper.co.kr/?p=2332 대한민국 최신 행정구역(SHP) 다운로드 – GIS Developer www.gisdeveloper.co.kr 위 데이터..
neurowhai.tistory.com
- 히트맵으로 표현할 데이터 csv 파일
먼저 내가 갖고있는 파일은 원래 아래와 같은 형식이었다. (가맹점 수는 내가 랜덤하게 넣은 값이라 실제와 다르다)
여기서 geojson 파일에 있는 SIG_CD값과 사용처지역코드를 비교하여 그려줘야하기 때문에 사용처지역코드와 가맹점 수만 따로 분리하여 새로운 csv를 만들었다.
이렇게 만들어주면 아래와 같이 새로운 csv 파일이 저장된다.
준비물 끗!
1. 지도 그리기
준비물이 준비가 되었으면 본격적으로 코드를 짜보도록 하자.
먼저 전체코드는 아래와 같다.
1. Geojson 파일을 읽어 geo 변수안에 넣어준다.
2. folium.map으로 seoul이라는 변수명의 지도를 그려준다. (사실은 전국지도인데 이름만 서울...)
3. folium.GeoJson(geo, name='').add_to(seoul)로 seoul 지도에 geo라는 json파일을 적용해준다.
4. state_voucher = '(준비물로 만들어준 csv 파일명)'으로 파일명 변수 만들어주고 (사실 필요없고 바로 아랫줄에 파일명 넣어주면 된다.)
5. pd.read_csv('파일명', encoding='euc-kr')로 csv 파일을 읽어 state_data라는 변수에 저장해준다.
6. state_data['Code'] 컬럼의 타입을 str로 바꿔준다. (바꿔줘야 하는 이유는 블로그 Error 카테고리의 글 참고 부탁!)
7. 드디어 히트맵을 그리는 부분이다..! choropleth를 이용해 표현하고자 하는 히트맵 속성을 채워준다.
- geo_data : geojson 파일 넣어주면 된다.
- data : csv 파일 넣어주면 된다.
- columns : ['csv파일 가장 첫번째 열(여기서는 사용처지역코드)', '표현하고자하는 값에 대한 컬럼']
- keys_on : 여기에서 정의한 키를 기준으로 비교해서 지도를 그려주니까 SIG_CD(지역코드)를 넣어줘야한다.
- fill_color : 내가 원하는 색으로. YlorRd하면 빨간색-노란색의 색이 값에 따라 나타나고 YlGn하면 초록색-노란색이다.
- fill_opacity : 색깔 투명도 조절
- line_opacity : 라인 투명도 조절
- legend_name : 범례 이름
8. 위에서 seoul에 choropleth를 넣어줬으니 이제 folium.LayerControl().add_to(seoul)로 지도를 만들어준다.
9. 마지막으로 html로 만들어서
10. webbrowser에 바로 띄워주면
짜잔!!!
은근 크고작은 이슈들이 많아서 따로 정리해보려고 한다.
뭐가 잘 안된다 싶으면 어쩌면 나와 같은 에러를 마주했을지도..? Error 글을 읽어보자 ㅎㅎ
'TIL' 카테고리의 다른 글
백엔드 공부 로드맵 (0) | 2022.07.01 |
---|---|
[Python] map 함수 (0) | 2022.03.16 |
[Javascript] 자바스크립트에서 '==='와 '==' 의 의미와 차이 (0) | 2022.03.05 |
[Algorithm] DFS/BFS 알고리즘 정리 (0) | 2022.03.05 |
[Algorithm] Greedy(그리디) 개념 정리 (0) | 2022.03.01 |