[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.07.25
📕 학습 목록
- Plotly, Folium을 이용한 데이터 시각화
📗 기억할 내용
1. Plotly
1) Plotly 란?
- Plotly는 Python, R, JavaScript 등에서 사용할 수 있는 인터랙티브한 데이터 시각화 라이브러리
- 다양한 그래프 유형을 제공
- 웹 애플리케이션 및 Jupyter Notebook에 쉽게 통합하여 사용할 수 있음
2) Plotly 주요 기능
- 인터랙티브 기능: 그래프를 확대/축소하거나 항목별로 세부 정보를 확인할 수 있음
- 호환성: 웹 프레임워크와의 높은 호환성
- 커스터마이징: 레이아웃, 색상, 주석, 데이터 포인트 등의 요소를 세밀하게 제어할 수 있음
3) 기본 플롯 유형 및 설정 방법
- 라인 차트: 연속 데이터 시각화에 유용하며, 시간에 따른 변화를 추적할 때 효과적
import plotly.express as px
import pandas as pd
data = pd.DataFrame({
'날짜': ['2021-01-01', '2021-02-01', '2021-03-01'],
'가격': [100, 150, 200]
})
fig = px.line(data, x='날짜', y='가격', title='가격 변화')
fig.show()
- 산점도: 변수 간 상관관계를 시각화할 때 적합하며, 마커 크기, 색상 설정으로 다양한 표현 가능
fig = px.scatter(data, x='날짜', y='가격', title='가격 변화 산점도')
fig.show()
- 바 차트: 범주형 데이터를 비교할 때 유용하며, 그룹화 및 누적 바 차트로 확장 가능
fig = px.bar(data, x='날짜', y='가격', title='가격 변화 바 차트')
fig.show()
- 히스토그램: 데이터 분포를 나타내며, 빈 크기와 색상을 조정할 수 있어 데이터의 분포 특성을 쉽게 파악할 수 있음
data = pd.DataFrame({'점수': [20, 25, 30, 35, 40]})
fig = px.histogram(data, x='점수', nbins=5, title='점수 분포')
fig.show()
4) 고급 플롯 기능
- 서브플롯 및 삽입 플롯: 여러 플롯을 make_subplots을 사용해 한 화면에 배열하여, 다양한 시각적 비교 가능
from plotly.subplots import make_subplots
import plotly.graph_objects as go
fig = make_subplots(rows=1, cols=2)
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[4, 5, 6]), row=1, col=1)
fig.add_trace(go.Bar(x=[1, 2, 3], y=[6, 5, 4]), row=1, col=2)
fig.show()
- 3D 플롯: 데이터를 3차원으로 표현하여 깊이와 입체감을 부여할 수 있음
import numpy as np
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
z = np.sin(np.sqrt(x**2 + y**2))
fig = go.Figure(data=[go.Surface(z=z)])
fig.show()
- 맵 시각화: 지리 데이터를 효과적으로 시각화할 수 있음
fig = px.scatter_geo(data, lat='위도', lon='경도', color='변수', title='지리적 데이터 시각화')
fig.show()
2. Folium
1) Folium 이란?
- Folium: Python 기반의 지도 시각화 라이브러리
- 간단한 코드로 대화형 지도를 생성할 수 있어 웹 애플리케이션에 적합함
2) Folium 주요 기능
- 대화형 지도 생성: 지도를 통해 다양한 시각적 요소를 제공하며, 특정 위치의 정보를 직관적으로 확인할 수 있음
- 위치 정보 시각화: GPS 좌표를 통해 특정 위치를 표시할 수 있으며, 스타일과 색상을 통해 정보를 직관적으로 전달
- 다양한 지도 스타일: 다양한 지도 스타일과 레이어를 제공하여 사용자 맞춤형 지도를 제작할 수 있음
3) Folium의 지도 생성 및 커스터마이징 방법
- 기본 지도 생성: folium.Map() 함수로 지도의 중심 좌표와 줌 레벨을 설정하여 기본 지도를 생성
import folium
map = folium.Map(location=[37.5665, 126.9780], zoom_start=12) # 서울 중심 좌표
map
- 마커 추가: folium.Marker()를 사용해 지도 위에 마커를 추가하고, 팝업을 통해 정보를 표시
folium.Marker([37.5665, 126.9780], popup='서울').add_to(map)
map
- 아이콘 및 색상 설정: 마커의 시각적 요소를 강화하기 위해 아이콘과 색상을 설정
folium.Marker([37.5665, 126.9780],
popup='서울',
icon=folium.Icon(color='red', icon='info-sign')).add_to(map)
map
- 다각형, 원, 경로 추가: 특정 지역을 강조하거나 경로를 표시
folium.Circle(location=[37.5665, 126.9780], radius=500, color='blue', fill=True).add_to(map)
map
4) 고급 기능
- 지도 레이어와 컨트롤 기능: folium.LayerControl을 통해 사용자가 지도의 레이어를 켜고 끌 수 있게 설정할 수 있음
folium.TileLayer('stamenwatercolor').add_to(map)
folium.TileLayer('stamenterrain').add_to(map)
folium.LayerControl().add_to(map)
map
- GeoJSON 데이터 시각화: folium.GeoJson을 사용해 GeoJSON 형식의 데이터를 지도에 표현
import requests
url = 'https://raw.githubusercontent.com/python-visualization/folium/master/examples/data/world-countries.json'
geo_json_data = requests.get(url).json()
folium.GeoJson(geo_json_data).add_to(map)
map
- 스타일맵 설정: 다양한 배경 지도를 지원하여 지도 스타일을 맞출 수 있음
folium.Map(location=[37.5665, 126.9780], tiles='Stamen Terrain', zoom_start=12)
5) 응용 예시
- 지역 통계 시각화: Folium을 사용해 대화형 지도로 지역별 통계를 시각화
- 각 지역별 인구 분포나 특정 변수의 데이터를 색상으로 구분하여 표시
import pandas as pd
data = pd.DataFrame({
'name': ['서울', '부산', '인천'],
'lat': [37.5665, 35.1796, 37.4563],
'lon': [126.9780, 129.0756, 126.7052],
'population': [9776000, 3448737, 2957026]
})
map = folium.Map(location=[36.5, 127.5], zoom_start=7)
for _, row in data.iterrows():
folium.CircleMarker(
location=[row['lat'], row['lon']],
radius=10,
color='blue',
fill=True,
fill_color='blue',
popup=f"{row['name']}: {row['population']}명"
).add_to(map)
map
- 클러스터링과 히트맵: 많은 마커를 클러스터링하거나 히트맵을 통해 데이터 밀도를 표현
from folium.plugins import MarkerCluster
marker_cluster = MarkerCluster().add_to(map)
for _, row in data.iterrows():
folium.Marker([row['lat'], row['lon']], popup=row['name']).add_to(marker_cluster)
📙 내일 일정
- 에듀 테크 특강
'TIL _Today I Learned > 2024.07' 카테고리의 다른 글
[DAY 13] Python 실습 (0) | 2024.07.29 |
---|---|
[DAY 12][특강] 학습 데이터의 유형 및 서비스 적용 사례 (1) | 2024.07.26 |
[DAY 10] Data Visualization (0) | 2024.07.24 |
[DAY 9] Data Preprocessing, Data Visualization (0) | 2024.07.23 |
[DAY 8] Data Manipulation, Data Preprocessing (0) | 2024.07.22 |