제로베이스_EDA/웹크롤링(4)_지도시각화

KulangK·2023년 6월 1일
0

EDA/웹크롤링

목록 보기
5/9
post-thumbnail

📄 목차

  1. Folium
    • 사용 가능한 기능
    • folium.Map()
    • folium.Marker()
    • folium.ClickForMarker()
    • folium.LatLngPopup()
    • folium.Circle(), .CircleMarker()
    • folium.Choropleth()
  2. 지도 시각화
  3. 장소별 분석

1. Folium

  • 사용의 편의성, 활발한 기능 개선 등으로 만족도 높은 모듈
  • 또한 크롬에서 동작이 가장 좋다고 알려져있음.
  • conda install -c conda-forge folium

사용 가능한 기능

  1. 위도 경도를 입력하면 지도 이미지를 보여줌
  2. 지도를 html 형식으로 저장 가능
  3. 스타일을 tiles 옵션으로 지정 가능 (어떠한 형태로 지도를 보일 것인지...)
  4. 마커 추가 가능
  5. 다양한 아이콘 지원
  6. circle 마커 지원
  7. 클릭으로 해당 부분 위도, 경도 정보 반환

folium.Map()

Init signature:
folium.Map(
    location=None, 
    width='100%', 
    height='100%', 
    left='0%', 
    top='0%', 
    position='relative',
    tiles='OpenStreetMap', 
    attr=None, 
    min_zoom=0, 
    max_zoom=18, 
    zoom_start=10, 
    min_lat=-90,
    max_lat=90, 
    min_lon=-180, 
    max_lon=180, 
    max_bounds=False,
    crs='EPSG3857',
    control_scale=False,
    prefer_canvas=False,
    no_touch=False,
    disable_3d=False,
    png_enabled=False,
    zoom_control=True,
    **kwargs,
    )
  • 굉장히 다양한 parameters 들을 사용할 수 있음
  • location에 list 형식으로 위도, 경도를 넣어주면 됨
  • zoom_start=정수 >> 초기 확대 정도를 결정하는 것
  • tiles='' >> 보여지는 형식을 결정

folium.Marker()

Init signature:
folium.Marker(
    location=None,
    popup=None,
    tooltip=None,
    icon=None,
    draggable=False,
    **kwargs,
)
  • 위 함수를 이용하여 Marker를 만들고, .add_to(지도)를 사용하면 해당 마커를 지도에 넣을 수 있음
  • location >> marker로 표지할 부분
  • popup = 클릭 했을 때 나타낼 내용 (html 문법 적용)
    • html 문법이 적용되므로 링크를 추가하는 것도 가능
  • tooltip = 커서가 올라가면 나타나는 내용
  • icon = 마커 아이콘 모양, 색상 등 변경
    • icon내에서 prefix 같은 추가적인 parameter들이 있고, 이를 이용하면 더 다양한 아이콘 표현 가능

folium.ClickForMarker()

  • 지도함수.add_child(folium.ClickForMarker())
    • 위와 같이 먼저 보일 지도함수를 만들어 놓고, 추가적으로 사용하면 됨
    • 클릭하면 그 위치에 마커를 생성함
    • 괄호 내에 popup=""을 넣으면 클릭 했을 때 내용 띄움

folium.LatLngPopup()

  • 지도함수.add_child(folium.LatLngPopup())
    • 클릭한 위치의 위도 경도 값 반환 (마커 생성 x)

folium.Circle(), folium.CircleMarker()

folium.Circle(
	location=None,
    radius=50,
    popup=None, 
    tooltip=None, 
    **kwargs
)
folium.CircleMarker(
    location=None,
    radius=10,
    popup=None,
    tooltip=None,
    **kwargs,
)
  • fill=True, fill_color="색상" >> 원형 내부 색상이 채워짐

folium.Choropleth()

folium.Choropleth(
    geo_data,
    data=None,
    columns=None,
    key_on=None,
    bins=6,
    fill_color=None,
    nan_fill_color='black',
    fill_opacity=0.6,
    nan_fill_opacity=None,
    line_color='black',
    line_weight=1,
    line_opacity=1,
    name=None,
    legend_name='',
    overlay=True,
    control=True,
    show=True,
    topojson=None,
    smooth_factor=None,
    highlight=None,
    use_jenks=False,
    **kwargs,
)
  • geo_data: 경계선 좌표 값이 담긴 데이터
    • URL, file path, or data
  • data: 표현할 내용이 담긴 데이터 (데이터 참조)
  • columns: 해당 데이터에서 표현할 컬럼 (값 참조)
    • column 1 = key, column 2 = values
  • key_on: Variable in the geo_data GeoJSON file to bind the data to. Must
    start with 'feature' and be in JavaScript objection notation.
    Ex: 'feature.id' or 'feature.properties.statename'.
  • fill 이나 line: 색상, 경계선 표현 등에 대한 내용

  • 위에서 다룬 내용들을 이용하여 지역별 데이터에 따른 표시를 할 수 있음

    • 데이터 다운로드 후,
      1. 변수로 지도를 받고 (df)
      2. 해당 변수의 위도 경도 데이터를 for문을 이용하여 위치 표시
      3. 해당 위치의 세대수 데이터를 받아 색깔 입힘
        • folium.Marker()
        • folium.Circle()

2. 지도 시각화

  • 지금까지 다뤘던 서울시 범죄현황을 지도에 표시해보자
    • folium.Choropleth()에서 geo_data는 서울 경계 관련 data를 geo_path로 불러서 geo_str이라는 변수에 저장하였음
      (geo_str = json.load(open(geo_path, encoding="utf-8")))
    • 경계선으로 나타나는 정보는 범죄 발생율
    • 원형으로 나타나는 것은 경찰서 위치와 검거율에 비례하는 원의 넓이임.

3. 장소별 분석

  • 추가적으로 서울시 범죄현황의 장소별 분석을 heatmap으로 표현
profile
새싹 데이터 분석가 https://github.com/KulangK

0개의 댓글