파이썬으로 지도 시각화 하기
folium라이브러리
import folium
지도를 시각화하는 기능을 제공하는 라이브러리로 매출 데이터, 고객 분포, 물류 경로 등 지리적 데이터 분석을 할때 유용하다.
※ 모듈이 설치되지 않았다면 아래 코드를 입력 후 사용
pip install folium
Map( ) 클래스
Map(location, zoom_start)
지도를 생성하는 클래스로 마커, 경로, 히트 맵 등 시각화 요소를 추가할 수 있다.
location : 지도의 위도, 경도를 리스트 또는 튜플 형태로 전달 받음
zoom_start : 위치 확대 수준을 전달 받음 / 값이 클수로 구체적으로 표현(1~18, 기본갑 : 10)
지도 부르기
Gyeongbokgung_map = folium.Map(location = [37.579702, 126.977442], zoom_start = 16)
display(Gyeongbokgung_map)
Marker()클래스
Marker(location, popup, tooltip, icon)
지도 위에 특정 위치의 마커를 나타내는 클래스로 좌표에 핀을 꽂는 등의 시각적 요소로 위치를 강조할 때 유용 하다.
Marker 객체를 add_to()메서드로 Map에 추가해야 마커가 지도에 표시된다.
location : 위치의 좌표를 리스트 또는 튜플 형태로 전달 받는다.
popup : 마커를 클릭했을 때 표시 할 팝업 창의 내용을 전달 받는다.
tooltip : 마커 위 마우스를 올렸을 때 표시할 문자열을 전달 받는다.
icon : 마커에 사용할 아이콘을 전달 받는다.
지도 위 마커하기
Gyeongbokgung_map = folium.Map(location = [37.579702, 126.977442], zoom_start = 16)
folium.Marker([37.579702, 126.977442], tooltip = "경복궁").add_to(Gyeongbokgung_map)
display(Gyeongbokgung_map)
지도 위 마커 아이콘 변경하기
Gyeongbokgung_map = folium.Map(location = [37.579702, 126.977442], zoom_start = 16)
folium.Marker([37.579702, 126.977442], tooltip = "경복궁", icon = folium.Icon(color="red", icon = "star")).add_to(Gyeongbokgung_map)
display(Gyeongbokgung_map)
CircleMarker( )클래스
CircleMarker(location, radius, fill, fill_color, fill_opacity, weight)
지도 위 특정 위치를 원형 마커를 나타내는 클래스이다.
location : 원형마커가 위치할 좌표를 리스트 또는 튜플로 전달 받는다.
radius : 원형마커의 반지름
fill : 원형마커 내부 채우기 여부를 불리언으로 전달 받는다.
fill_color : 원형마커 내부 색상
fill_opacity : 원형 마커 내부 투명도 0(투명) ~ 1(불투명) 으로 실수로 전달 받는다.
weight : 원형마커 테두리 두께를 픽셀 단위로 전달 받는다.
Gyeongbokgung_map = folium.Map(location = [37.579702, 126.977442], zoom_start = 16)
folium.CircleMarker([37.579702,126.977442],radius=20).add_to(Gyeongbokgung_map)
display(Gyeongbokgung_map)
원형마커 색상 변경 밑 투명도 변경
Gyeongbokgung_map = folium.Map(location = [37.579702, 126.977442], zoom_start = 16)
folium.CircleMarker([37.579702, 126.977442],radius=20,fill=True, fill_color = "red", fill_opacity = 0.5, weight = 0).add_to(Gyeongbokgung_map)
display(Gyeongbokgung_map)
Circle()클래스
지도 위 특정 위치의 원형을 나타내는 클래스로 CircleMarker와 비슷하지만 반경 설정에서 차이가 있다.
Circle()은 지도를 확대,축소 시 원형이 지도에 비례해서 변경된다.
Gyeongbokgung_map = folium.Map(location = [37.579702, 126.977442], zoom_start = 16)
folium.Circle(location=[37.579702, 126.977442], radius=200, color="red", fill = True, fill_color = "cyan").add_to(Gyeongbokgung_map)
display(Gyeongbokgung_map)
folium 모듈 플러그인 HeatMap 모듈
import folium from folium.plugins import heatmap
히트맵을 그릴 수 있게 해주는 모듈
HeatMap(data, radius)
표시할 점의 위치를 중첩리스트 형태로 전달 받음
radius : 각 데이터가 영향을 미치는 반경을 지정하는 매개변수로 기본값은 25, 픽셀단위로 원형영역의 반지름을 나타낸다.
from folium.plugins import HeatMap
map_us = folium.Map(location=[39.5902, -95.7129],zoom_start=5)
HeatMap(sales_df[["Latitude", "Longitude"]],radius=25).add_to(map_us)
display(map_us)
folium모듈 플러그인 MarkerCluster 모듈
import folium from folium.plugins import MarkerCluster
가까운 마커들을 군집으로 묶어 시각화 할 수 있게 해주는 모듈
from folium.plugins import MarkerCluster
map_us = folium.Map(location=[39.5902, -95.7129], zoom_start=5) # 미국 지도 생성
marker_cluster = MarkerCluster().add_to(map_us) # 미국 지도에 마커 추가
for idx, row in sales_df.iterrows(): # 마커 클러스터 객체에 마커 추가하기
folium.Marker(location=[row["Latitude"], row["Longitude"]], tooltip=row["Address"], add_to(marker_cluster)
display(map_us)
Selenium라이브러리
설치가 안되어있을 경우 아래 코드를 입력하여 설치
pip install selenium
브라우저를 자동으로 조작하여 크롤링할때 유용한 라이브러리로 반복적 웹 작업을 자동화 할 때 사용된다.
selenium라이브러리 실행
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
resolution_tup = (1000,616) #해상도 설정
chrome_options = Options()
#add.argument : Options 객체 옵션 리스트에 옵션을 추가하는 메서드
# "--"는 명령줄에서 플래그 또는 옵션 설정을 나타내는 표기법
#headless : 화면에 브라우저를 띄우지 않고 백그라운드에서 실행하는 옵션
#window-size : 브라우저 창 크기(해상도)를 설정하는 옵션
chrome_options.add_argument("--headless")
chrome_options.add_argument(f"--window-size={resolution_tup[0]},{resolution_tup[1]}")
driver = webdriver.Chrome(chrome_options)
지도를 이미지로 변환
#이미지로 변환 할 지도 생성
import pandas as pd
import folium
sales_df = pd.read_csv("./data/slaes_Compound_details.csv", encoding="utf-8-sig")
map_usa = folium.Map(location=[39.5902, -95.7129], zoom_start=5)
for idx, row in sales_df.iterrows():
folium.CircleMarker(location=[row["Latitude"], row["Longitude"]], radius=5, fill=True, fill_color="red", fill_opacity=0.5, weight=0, tooltip=row["Address"]).add_to(map_usa)
#해당 지도를 이미지로 변환 작업
from PIL import Image
import io
import os
#_to_png()는 Map객체를 PNG형식으로 변환해주는 메서드
img_data = map_usa._to_png(driver=driver)
#io모듈의 BytesIO클래스는 전달받은 바이트 데이터를 파일 객체로 변환해주는 클래스
#open()을 이용해 이미지로 변환해 반환
img = Image.open(io.BytesIO(img_data))
result_dir = "./data/folium" # 이미지를 저장할 폴더 경로
img.save(os.path.join(result_dir, f"scatter_plot.png"))
img
이 글은 제가 공부하면서 개념정리 겸 작성하는 글입니다.
틀린점이 있을 수도 있습니다.
[파이썬 업무자동화] 일곱번째. 웹크롤링_기초 개념 및 코드방식 (1) | 2025.06.03 |
---|---|
[파이썬 업무자동화] 다섯번째 - 이미지 불러오기, 편집, 저장(워터마크) (2) | 2025.06.02 |
[파이썬 업무자동화] 네번째. 파이썬을 이용한 Excel, PPTX 파일 수정,저장하기 (0) | 2025.06.02 |
[파이썬 업무자동화] 세번째. 파이썬으로 PPT제작 그리고 수정 - python-pptx라이브러리 (1) | 2025.05.31 |
[파이썬 업무자동화] 두번째. pandas모듈 이용한 엑셀 파일병합,저장 - 자동화 (0) | 2025.05.30 |