주요 학습내용
1. 데이터 시각화(Seaborn)
2. 지도 시각화(Folium)
I. Seaborn
아래의 데이터를 여러가지 방법을 통해 시각화를 해보자
1. pair plot
- kind = reg, scatter, kde, hist
sns.pairplot(data=crime_anal_norm, vars=["강도", "살인", "폭력"], kind="reg", height=3);
sns.pairplot(data=crime_anal_norm, vars=["강도", "살인", "폭력"], kind="scatter", height=3);
sns.pairplot(data=crime_anal_norm, vars=["강도", "살인", "폭력"], kind="kde", height=3);
sns.pairplot(data=crime_anal_norm, vars=["강도", "살인", "폭력"], kind="hist", height=3);
2. heatmap
def drawGraph():
target_col = ["강간검거율", "강도검거율", "살인검거율", "절도검거율", "폭력검거율", "검거"]
crime_anal_norm_sort = crime_anal_norm.sort_values(by= "검거", ascending=False)
plt.figure(figsize=(10, 10))
sns.heatmap(
data=crime_anal_norm_sort[target_col],
annot = True,
fmt = "f",
linewidth = 0.5,
cmap = "RdPu",
)
plt.title("범죄 검거 비율(정규화된 검거의 합으로 정렬)")
plt.show()
drawGraph()

II. Folium
- 인터랙티브 지도 시각화 라이브러리
- 근본적으로는 그냥 위도 경도를 알려주면 됨
- 지도를 html로 저장 가능
- 스타일을 tiles 옵션으로 지정
- marker를 추가할 수 있다
- 다양한 모양의 아이콘 지원
- folium.Map(location=[위도, 경도])를 통해 지도 확인 가능
- list 혹은 tuple 형태로 작성
- google map에서 원하는 위치 마우스 우클릭 시, 위도 & 경도 확인 가능
- zoom_start=숫자입력(보통 0~18)을 통해 확대하여 불러오기 가능
1. save as html
m = folium.Map(location=[37.544564958079896, 127.05582307754338], zoom_start = 14)
m
m.save("./folium.html")

2. tiles option
- OpenStreetMap(디폴트 값)
- Mapbox Bright(Limited levels of zoom for free tiles)
- Mapbox Control Room(Limited levels of zoom for free tiles)
- Stamen(Terrain, Toner, and Watercolor)
- Cloudmade(Must pass API key)
- Mapbox(Must pass API key)
- CartoDB(positron, dark_matter, voyager)
OpenStreetMap | CartoDB dark_matter |
|---|
3. Marker 생성
- marker 출력 원할 경우
- folium.Marker(위치).add_to(지도)
- 클릭시, 마커에 표시하고자 하는 값 있는 경우
- folium.Marker(location=(위치), popup=" 출력하고자 하는 값").add_to(지도)
- 마우스 가져다대기만 해도 값 출력 원하는 경우
- folium.Marker(location=(위치), popup=" 출력하고자 하는 값", tooltip="값").add_to(지도)
- 클릭시, 바로 연결되는 홈페이지 주소 넣고 싶은 경우
- folium.Marker(location=(위치), popup="<a href='주소' target=_'blink'>표시되는 값", tooltip="값").add_to(지도)
popup="Subway" | + tooltip = "성수역" |
|---|
4. Marker Custom하기
- folium.Icon
- color
- icon_color
- icon
- angle
- prefix(fa/glyphicon)
- icon 참고 사이트
m = folium.Map(
location=[37.544564958079896, 127.05582307754338],
zoom_start = 14,
tiles = "OpenStreetMap"
)
folium.Marker(
(37.54712311308356, 127.04721916917774),
icon=folium.Icon(color="black", icon="info-sign")
).add_to(m)
,
folium.Marker(
location = [37.544564958079896, 127.05582307754338],
popup = "<b>Subway</b>",
icon = folium.Icon(
color="red",
icon_color = "blue",
icon = "cloud")
).add_to(m)
folium.Marker(
location=[37.54035903907497, 127.066913328776446],
pop = "<b>건대입구역</b>",
tooltip = "Icon custom",
icon = folium.Icon(
color = "purple",
icon_color = "green",
icon= "bookmark")
).add_to(m)
folium.Marker(
location=[37.54035903907497, 127.066913328776446],
pop = "<b>건대입구역</b>",
tooltip = "Icon custom",
icon = folium.Icon(
color = "purple",
icon_color = "white",
icon= "subway",
angle = 50,
prefix = "fa")
).add_to(m)
m
Icon basic/color/custom1 | Icon custom2 |
|---|
5. Marker 수동 생성
- 지도위를 클릭하면 Marker가 생기게끔 설정
- folium.ClickForMarker()
m = folium.Map(
location=[37.544564958079896, 127.05582307754338],
zoom_start = 14,
tiles = "OpenStreetMap"
)
m.add_child(folium.ClickForMarker(popup = "ClickForMarker")))
popup = 설정 안했을 경우 | popup = "ClickForMarker" |
|---|
6. 위치 나타내기(위도, 경도)
- 지도 위에 마우스를 갖다댔을 때, 위도 경도 정보를 반환(Marker생성 x)
m = folium.Map(
location=[37.544564958079896, 127.05582307754338],
zoom_start = 14,
tiles = "OpenStreetMap"
)
m.add_child(folium.LatLngPopup())

7. 지도에 원형으로 표시하기
1) Circle
m = folium.Map(
location = [37.544564958079896, 127.05582307754338],
zoom_start = 14,
titles = "OpenStreetMap"
)
folium.Circle(
location = [37.555243442409406, 127.04370422643919],
radius = 100,
fill = False
).add_to(m)
m
fill = False | fill = True |
|---|
folium.Circle(
location = [37.555243442409406, 127.04370422643919],
radius = 100,
fill = True,
color = "#eb9e34",
fill_color = "red"
).add_to(m)
m
folium.Circle(
location = [37.555243442409406, 127.04370422643919],
radius = 100,
fill = True,
color = "#eb9e34",
fill_color = "red",
popup = "Circle Popup",
tooltip = "Circle Tooltip"
).add_to(m)
m
2) CircleMarker
- 기본적으로는 Circle과 똑같음
- 다만, 같은 radius설정해줘도 CircleMarker에 크기가 더 크게 나옴
folium.Circle(
location = [37.555243442409406, 127.04370422643919],
radius = 100,
fill = True,
color = "#eb9e34",
fill_color = "red",
popup = "Circle Popup",
tooltip = "Circle Tooltip"
).add_to(m)
folium.CircleMarker(
location = [37.54347089498245, 127.04439204503049],
radius = 100,
fill = True,
color = "#34ebc6",
fill_color = "#5934eb",
popup = "CircleMarker Popup",
tooltip = "CircleMarker Tooltip"
).add_to(m)
m

[참고자료 출처] 제로베이스 데이터 스쿨