본문 바로가기
Python

python(지도 시각화)

by 글로리. 2020. 5. 21.

1) 필요한 모듈

1
2
3
4
5
pip install --upgrade folium   # 필요한 패키지설치
 
import folium
from pandas import DataFrame   # 데이터 분석 패키지
from pandas import ExcelFile   # 엑셀파일 가져오기
cs

 

2) 지도에 마커추가

  - 일반 마커

1
2
3
4
5
6
7
8
9
10
11
# 새로운 지도 객체 생성
map_osm1 = folium.Map(location=['위도','경도'], zoom_start='값')
 
# 마커 객체 생성
marker1 = folium.Marker(['위도','경도'], 
                        popup='서울특별시청',    # 팝업 이름
                        icon=folium.Icon(color='색',icon='아이콘'))
 
marker1.add_to(map_osm1)  # 마커 객체를 지도에 추가함
 
map_osm1                  # 지도 표시하기
cs

 

 ◆ 결과

 

일반 마커를 이용한 지도생성

- 사용자 지정아이콘, HTML 팝업

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 새로운 지도 객체 생성
map_osm2 = folium.Map(location=['위도''경도'], zoom_start= '값')
 
# HTML을 사용한 팝업
popup_html = folium.Popup("<font color='색상' style='글씨속성'><b>'팝업이름'</b></font>", parse_html=False)
 
# 사용자 지정 아이콘 이미지 사용
icon_img = folium.features.CustomIcon('이미지주소', icon_size=(5050))
 
# 마커 객체 생성
marker2 = folium.Marker(['위도''경도'], 
                        popup=popup_html,
                        icon=icon_img)
 
marker2.add_to(map_osm2) # 마커 객체를 지도에 추가함
 
map_osm2                 # 지도 표시하기
cs

 

 ◆ 결과

 

지정아이콘, html을 이용한 지도 생성

  - 원형 마커

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 새로운 지도 객체 생성
map_osm3 = folium.Map(location=['위도''경도'], zoom_start='숫자')
 
# 원형마커 
marker3 = folium.CircleMarker(['위도''경도'], 
                              radius='숫자',                 # 범위
                              color='색상코드',            # 선 색상
                              fill_color='색상코드',       # 면 색상
                              popup='장소명'
                              )
 
marker3.add_to(map_osm3)
 
map_osm3
cs

 

 

 ◆ 결과

 

원형 마커를 이용한 지도생성

3) 파일로 저장

1
map_osm3.save('map_osm3.html'#파일이 저장될 위치
cs

 

 ◆ 결과

 

 

 


 

 

<  응용  >

 - 서울의 초등학교 위치

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
# 엑셀 파일을 원격으로 내려받아 데이터프레임으로 변환 (다소 시간이 소요된다.)
>>> xlsx = ExcelFile("http://itpaper.co.kr/demo/py/school2019.xlsx")
 
>>> df = xlsx.parse(xlsx.sheet_names[0])
 
# 사용할 필드만 추출
>>> df2 = df.filter(['학교명''학교급구분''소재지도로명주소''위도''경도'])
 
# 서울시의 초등학교만 추출
>>> df3 = df2.query("학교급구분 == '초등학교' and 소재지도로명주소.str.contains('서울특별시')")
 
# 지도 객체 생성
# zoom_start: 배율 1~22
>>> map_osm = folium.Map(location=[37.566651126.978428], zoom_start=12)
 
# 데이터프레임의 행수 만큼 반복하면서 마커생성
>>> for i in df3.index:
>>>     # 행 우선 접근 방식으로 값 추출하기
>>>     name = df3.loc[i, '학교명']
>>>     lat = df3.loc[i, '위도']
>>>     lng = df3.loc[i, '경도']
    
>>>     # 추출한 정보를 지도에 표시
>>>     marker = folium.Marker([lat,lng], popup=name)
>>>     marker.add_to(map_osm)
    
>>> map_osm
cs

 

 

 ◆ 결과

 

댓글