CS 공부/Data Visualization
Plotly Express (Interative Visualization)
imsmile2000
2023. 4. 2. 20:47
Interative을 사용하는 이유?
- 정적 시각화에는 단점이 있다. 예를 들어 Feature가 10개 있다면 각각의 관계를 살펴보는데 45개의 plot이 필요하다는 것이다
- 이것은 공간적 낭비가 크다
- 사용자마다 원하는 인사이트가 다르기 때문에 원하는 정보를 압축해서 담으려면 정적시각화가 나음
Interative Viz 라이브러리
- 대표적인 라이브러리 3개: Plotly , Bokeh, Altair
- Matplotlib
- 인터렉티브 제공
- 주피터나 local에서만 실행할 수 있어서 비추!
- Plotly (추천!)
- 인터랙티브 시각화에 가장 많이 사용됨
- python 뿐만아니라 R, JS에서도 제공
- 예시 + 문서화가 잘되어 있음, 다양한 시각화 기능도 제공
- Plotly Express
- plotly를 seaborn과 유사하게 만들어 쉬운 문법
- plotly의 단순화 버전
- Facet 등 seaborn의 기능 대다수 제공
- Bokeh
- Plotly보다는 Matplotlib과 더 유사함
- 테마가 Plotly에 비해 깔끔함
- 근데 문서화가 부족해서 사용하기 힘들수도...
- Altair
- Vega 라이브러리를 사용하여 만든 인터랙티브
- 문법이 Pythonic하지 않고 약간 js스러움
- 데이터 크기에 제한 있음 (5000개)
- Bar, Line, Scatter, Histogram에 특화
Plotly Express
#import 방법
import plotly
import plotly.express as px
Scatter
기본 요소 4가지: x,y,size,color
fig = px.scatter(iris,
x=' ',
y=' ',
size=' ',
color=' ',
)
fig.show()
+ range_x, range_y : x,y 범위 제한
+ marginal_x, marginal_y: 각 축에 대한 분포 ex) margin_x='violin', 'box' ...
+ hover_data, hover_name: 각 데이터에 대해서 어떤 정보를 더 표시할 건지 정보량 조정
+ trendline: 회귀선 그리기
+ facet_col, facet_row: 행/열 별로 특정 카테고리를 나누어 그려줌
Line
기본 요소 3가지: x,y,color
Bar
기본 요소 3가지: x,y,color
+ barmode: bar의 형태 (group, stack 등...)
Part-of-Whole (Sunburst, Treemap)
- 데이터를 트리구조로 살필 때
fig = px.sunburst(tips,
path=['day', 'time', 'sex'], #분류 순서 날짜->시간->성별
values='total_bill')
fig.show()
fig = px.treemap(tips,
path=['day', 'time', 'sex'],
values='total_bill')
fig.show()
N차원 시각화
#3차원 시각화
fig = px.scatter_3d(iris,
x=' ',
y=' ',
z=' ',
symbol=' ',
color=' ')
fig.show()
+ parallel_coordinates
+ parallel_categories
Geo
#scatter_geo
fig = px.scatter_geo(geo, # 지리적분포 볼때
locations=" ",
color=" ", #어떤 항목별로 색구분할지
size=" ", #사이즈 구분할지
animation_frame="year", # 그래프 밑에 연도별로 변화 볼 수 있는 바가 생김
projection="natural earth" #지구모양처럼보이게 그래프 테두리 둥그렇게함)
fig.show()
# choropleth :색상이나 패턴을 사용하여 특정 통계에 대한 데이터를 사전 정의된 영역과 관련시켜 시각화 한 지도 유형
fig = px.choropleth(geo,
locations=" ",
color=" ",
projection="natural earth")
fig.show()