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()

Sunburst와 Treemap

 

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()

scatter_geo 와 choropleth