[Zero-Base DS]스터디노트_EDA(04)

HAHAHAEUN·2024년 4월 7일
post-thumbnail

주요 학습내용

1. 데이터 시각화(Seaborn)

2. 지도 시각화(Folium)

I. Seaborn

아래의 데이터를 여러가지 방법을 통해 시각화를 해보자

1. pair plot

  • kind = reg, scatter, kde, hist
# 1) reg
sns.pairplot(data=crime_anal_norm, vars=["강도", "살인", "폭력"], kind="reg", height=3);

# 2) scatter
sns.pairplot(data=crime_anal_norm, vars=["강도", "살인", "폭력"], kind="scatter", height=3);

# 3) kde
sns.pairplot(data=crime_anal_norm, vars=["강도", "살인", "폭력"], kind="kde", height=3);

# 4) hist
sns.pairplot(data=crime_anal_norm, vars=["강도", "살인", "폭력"], kind="hist", height=3);

2. heatmap

# 검거율 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",  # d: 정수 # f: 실수
        linewidth = 0.5, # 간격설정(디폴트: 0)
        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

  • 저장하고자하는 데이터 할당 후 .save()
m = folium.Map(location=[37.544564958079896, 127.05582307754338], zoom_start = 14)  # 0~ 18, 디폴트 10
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)
OpenStreetMapCartoDB 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하기

m = folium.Map(
    location=[37.544564958079896, 127.05582307754338], # 성수역(list형태)
    zoom_start = 14,
    tiles = "OpenStreetMap"
)  # 0~ 18, 디폴트 10

# icon basic
folium.Marker(
    (37.54712311308356, 127.04721916917774), 
    icon=folium.Icon(color="black", icon="info-sign")
).add_to(m)
, 
# icon icon_color
folium.Marker(
    location = [37.544564958079896, 127.05582307754338],
    popup = "<b>Subway</b>",  # 출력되는 값
    icon = folium.Icon(
        color="red",
        icon_color = "blue",
        icon = "cloud")
).add_to(m)

# Icon custon (1)
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)


# Icon custon (2)
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")  # glyphicon 
).add_to(m)
m
Icon basic/color/custom1Icon custom2

5. Marker 수동 생성

  • 지도위를 클릭하면 Marker가 생기게끔 설정
  • folium.ClickForMarker()
m = folium.Map(
    location=[37.544564958079896, 127.05582307754338], # 성수역(list형태)
    zoom_start = 14,
    tiles = "OpenStreetMap"
)  # 0~ 18, 디폴트 10

m.add_child(folium.ClickForMarker(popup = "ClickForMarker")))
popup = 설정 안했을 경우popup = "ClickForMarker"

6. 위치 나타내기(위도, 경도)

  • 지도 위에 마우스를 갖다댔을 때, 위도 경도 정보를 반환(Marker생성 x)
m = folium.Map(
    location=[37.544564958079896, 127.05582307754338], # 성수역(list형태)
    zoom_start = 14,
    tiles = "OpenStreetMap"
)  # 0~ 18, 디폴트 10

m.add_child(folium.LatLngPopup())

7. 지도에 원형으로 표시하기

1) Circle

  • Basic
# 지도에 원형 표시해줌

m = folium.Map(
    location = [37.544564958079896, 127.05582307754338],  # 성수역
    zoom_start = 14,  # 0 ~ 18
    titles = "OpenStreetMap"
)

# circle
folium.Circle(
    location = [37.555243442409406, 127.04370422643919], # 한양대학교
    radius = 100,
    fill = False # 원형 내부 채우기(디폴트 값 : False)
).add_to(m)

m
fill = Falsefill = True
  • Color 추가
# circle
folium.Circle(
    location = [37.555243442409406, 127.04370422643919], # 한양대학교
    radius = 100,
    fill = True, # 원형 내부 채우기(디폴트 값 : False)
    color = "#eb9e34",
    fill_color = "red"
).add_to(m)

m
  • popup, tooltip 추가
folium.Circle(
    location = [37.555243442409406, 127.04370422643919], # 한양대학교
    radius = 100,
    fill = True, # 원형 내부 채우기(디폴트 값 : False)
    color = "#eb9e34",
    fill_color = "red",
    popup = "Circle Popup",
    tooltip = "Circle Tooltip"
).add_to(m)

m

2) CircleMarker

  • 기본적으로는 Circle과 똑같음
  • 다만, 같은 radius설정해줘도 CircleMarker에 크기가 더 크게 나옴
# circle
folium.Circle(
    location = [37.555243442409406, 127.04370422643919], # 한양대학교
    radius = 100,
    fill = True, # 원형 내부 채우기(디폴트 값 : False)
    color = "#eb9e34",
    fill_color = "red",
    popup = "Circle Popup",
    tooltip = "Circle Tooltip"
).add_to(m)


# circleMarker
folium.CircleMarker(
    location = [37.54347089498245, 127.04439204503049], # 한양대학교
    radius = 100,
    fill = True, # 원형 내부 채우기(디폴트 값 : False)
    color = "#34ebc6",
    fill_color = "#5934eb",
    popup = "CircleMarker Popup",
    tooltip = "CircleMarker Tooltip"
).add_to(m)

m

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

profile
할 거면 제대로 하자

0개의 댓글