작성일자 : 2024-10-09
Ver 0.1.1
참고 사이트 : wiki docs
이번 포스팅에서는 Plotly를 활용해서 그래프를 그리는 다양한 방법 중 가장 많이 사용되는 2가지 방법에 대해 소개한다.
경우에 따라서 두 가지 방법을 융합하여 빠르고 가시성이 뛰어난 시각화 코딩방법을 채택한다.
아래의 막대 그래프를 두 가지 방법을 활용하여 시각화 하는 방법에 대해 알아보겠다.
1. graph_objects 모듈을 활용한 생성
그래프를 하나하나 설명하고 직접 지정하며 제장하는 방법
예제
# graph_objects 패키지를 go 로 불러옴
import plotly.graph_objects as go
# go.Figure() 함수를 활용하여 기본 그래프를 생성
fig = go.Figure(
# Data 입력
data=[go.Bar(x=[1, 2, 3], y=[1, 3, 2])],
# layout 입력
layout=go.Layout(
title=go.layout.Title(text="A Figure Specified By A Graph Object")
)
)
#show하면 내 노트북 (주피터 노트북 등)에 그래프가 나타남.
fig.show()
Figure는 Plotly 작업의 기본 단위이다. Figure는 go.Figure() 함수를 통해 생성이 가능다. 이때 go.Figure 힘수의 구조는 아래와 같다. data와 layout 총 2개를 input으로 받는 구조이다.
Data
data는 일명 "Trace" 를 Python List 형태로 받는다.
Trace는 그리고자 하는 그래프의 타입(ex. Bar, Scatter, Line, Box..)과 그 그래프에 시각화 하고자 하는 Raw 데이터를 품고있는 단위이다.
예를들면 위의 예제에서는 go.Bar(x=[1, 2, 3], y=[1, 3, 2]) 가 하나의 Trace가 된다. 리스트 형태로 받는 이유는 하나의 Figure에 다양한 Trace를 동시에 시각화를 하기위헤 리스트 형태로 받는다.
layout
그래프의 data와는 무관하고 그외 모든 부분을 편집 및 가공하는 부분이다. Title, legend, Colors, Hover-label, Axes, Shape 등 그래프 등 시각화를 높히기 위한 다양한 도구들은 모두 layout을 통해 지정한다.
2. express 모듈을 활용한 그래프 생성
그래프를 이미 제작되어있는 템플릿으로 빠르게 제작하는 방법으로 매우 짧은 코드만으로 양질의 그래프를 제작할수있는 high-level 모듈 이다. graph_objects 모듈과 express 모듈은 Matplotlib과 Seaborn 의 사이와 같다. Matplotlib 를 기반으로 만들어진 Seaborn 이미 만들어진 템플릿을 활용하여 더 쉽게 사용이 가능하듯이 express 또한 graph_objects 로 제작이 된 모듈로 사용이 더욱 쉽다.
또하나 비슷한 점은 Seaborn 을 Matplotlib의 문법을 활용해서 튜닝이 가능하듯 express 또한 graph_objects의 기능인 add_trace(), update_layout(), update_traces() 기능을 활용하여 세세한 튜닝이 가능하다.
# express 패키지를 px로 불러옴
import plotly.express as px
# px.bar() 함수를 활용해서 bar chart 생성과 동시에 Data, Layout 값 입력
fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2],title="A Figure Specified By express")
#show하면 내 노트북 (주피터 노트북 등)에 그래프가 나타남.
fig.show()
px.bar 를 활용해서 바로 그래프의 타입을 bar로 지정하고, x, y 에 각각 데이터를 넣어준다.
마지막으로 title 또한 펑션안에서 바로 넣어주어서 매우 짧은 코드만으로 Figure 제작을 완료하였다.
지금 현재 px.bar 와 같이 express 를 통해 제작된 템플릿은 아래와 같습니다.
- Basics: scatter, line, area, bar, funnel, timeline
- Part-of-Whole: pie, sunburst, treemap, icicle, funnel_area
- 1D Distributions: histogram, box, violin, strip, ecdf
- 2D Distributions: density_heatmap, density_contour
- Matrix or Image Input: imshow
- 3-Dimensional: scatter_3d, line_3d
- Multidimensional: scatter_matrix, parallel_coordinates, parallel_categories
- Tile Maps: scatter_mapbox, line_mapbox, choropleth_mapbox, density_mapbox
- Outline Maps: scatter_geo, line_geo, choropleth
- Polar Charts: scatter_polar, line_polar, bar_polar
- Ternary Charts: scatter_ternary, line_ternary
3. 각 방법의 장단점 및 활용방안
2가지 방법은 아래 표와 같은 장단점이 있다.
장점 | 단점 | |
graph_objects | 그래프를 세세하게 구성 가능 | 코드가 길고 문법이 복잡하여 시간이 오래 걸리고 학습하기 어렵다. |
express | 간단한 코드로 쉽게 그래프 표현 가능 | 정해진 템플릿 외 세세한 조정이 어려워 세세한 조정 필요시 graph_objects 도움이 필요함 |
- graph_objects는 논문, 발표자료와 같이 그래프 시각화에 중점을 두었을 경우 활용
- express는 사용자가 빠르게 데이터 분석을 진행할 때 활용