기본적인 시각화부터 통계, 재무, 지리 과학 및 3-dimensional 을 포함한 40개 이상의 차트 타입을 제공하는 오픈소스 입니다. 기본적으로 쥬피터 노트북에 시각화가 가능하며 인터렉티브한 dashboards 위해 Dash 또는 Chart Studio와 같은 라이브러리와 통합 및 확장이 가능합니다.

Dash는 Flask, Plotly.js 및 React.js 위에 작성된 Python 웹서비스 개발용 프레임워크로 Plotly에 기반하고 있습니다.
Dash는 Python과 HTML을 이용하여 쉽게 웹사이트나 대시보드 같은 대화형 웹응용프로그램을 작성할 수 있습니다.
Chart Studio란 Plotly에서 개발한 서비스로 웹을 기반으로 Plotly 그래프 생성 및 Raw 데이터 수정까지 가능하게 한 서비스 입니다.
기본 사용방법은 온라인 오프라인 두가지가 있는데 우리는 쥬피터 노트북 환경에서 시각화를 할 예정으로 오프라인 상태 개발환경 설정방법에 대해 알아보도록 하겠습니다.
Plotly 라이브러리는 아나콘다 프롬프트(Anaconda Prompt) 또는 명령 프롬프트를 통해서 설치할 수 있습니다. 아나콘다 프롬프트를 열었다면 아나콘다 프롬프트에 아래의 커맨드를 입력하여 Plotly 를설치합니다.
>pip install plotly==5.11.0
주피터 노트북은 웹에서 코드를 작성하고 실행할 수 있는 오픈소스 웹 어플리케이션입니다. 이 책의 모든 코드들은 기본적으로 본인의 컴퓨터에 설치된 주피터 노트북에서 사용한다고 가정합니다. 주피터 노트북도 아나콘다를 설치하면 자동으로 설치되어져 있습니다. 아나콘다를 설치하지 않았다면 아래의 커맨드로 Jupyter notebook을 별도 설치할 수 있습니다.
>pip install jupyter
설치가 완료되었으면 프롬프트에서 다음 명령어를 통해 주피터 노트북을 실행할 수 있습니다.
>jupyter notebook
해당 명령어를 치면 웹 브라우저가 자동으로 열리면서 주피터 노트북이 실행됩니다. 만약 실행되지 않는다면, 직접 실행시켜야 합니다. 웹 브라우저를 열고 프롬프트에서 나오고 있는 주소인 "localhost:8888"에 접속합니다.

Plotly Tutorial 위해서는 몇가지 패키지가 필요합니다. 이를 일일히 설치하는 것보다는 필요한 패키지들을 모아놓은 파이썬 배포판 '아나콘다'를 설치하는 것을 권장합니다. 아나콘다는 Numpy, Pandas, Jupyter Notebook 등 이 책에서 사용할 대부분의 패키지를 전부 포함하고 있습니다.
여기서는 윈도우 환경을 기준으로 두고 아나콘다를 설치하는 방법과 Jupyter Notebook 설치 방법에 대해 설명드립니다.
링크 : https://www.anaconda.com/products/distribution/

위 사이트 링크로 이동하여 우측 상단에 (저자가 이 책을 작성할 당시 기준) 파이썬 3.9 아나콘다 설치 파일이 있습니다. 여기서는 파이썬 3.9 버전 64 비트를 설치합니다.

설치 파일을 실행한 후에 다른 윈도우 프로그램을 설치하는 것과 마찬가지로 Next > 를 누르면서 설치를 완료하면 됩니다. 아나콘다를 설치하면 머신 러닝을 위한 기본적인 파이썬 패키지들은 자동으로 설치가 됩니다. 다만 텐서플로우, 케라스, 젠심, 코엔엘파이와 같은 패키지들은 별도 설치가 필요한데 이에 대해서는 뒤에서 추가적으로 설명하겠습니다.
아나콘다를 다 설치했다면 아나콘다 프롬프트를 오픈하겠습니다.

아나콘다 프롬프트를 열었다면 아나콘다 프롬프트에 아래의 커맨드를 입력하여 아나콘다 파이썬 패키지를 전부 최신 버전으로 업데이트 합니다.
> conda update -n base conda
> conda update --all
주피터 노트북은 웹에서 코드를 작성하고 실행할 수 있는 오픈소스 웹 어플리케이션입니다. 이 책의 모든 코드들은 기본적으로 본인의 컴퓨터에 설치된 주피터 노트북에서 사용한다고 가정합니다. 주피터 노트북도 아나콘다를 설치하면 자동으로 설치되어져 있습니다. 아나콘다를 설치하지 않았다면 아래의 커맨드로 Jupyter notebook을 별도 설치할 수 있습니다.
>pip install jupyter
설치가 완료되었으면 프롬프트에서 다음 명령어를 통해 주피터 노트북을 실행할 수 있습니다.
>jupyter notebook
해당 명령어를 치면 웹 브라우저가 자동으로 열리면서 주피터 노트북이 실행됩니다. 만약 실행되지 않는다면, 직접 실행시켜야 합니다. 웹 브라우저를 열고 프롬프트에서 나오고 있는 주소인 "localhost:8888"에 접속합니다.

아나콘다를 설치했다면 기본적으로 Numpy, Pandas, Jupyter notebook, 등이 이미 설치되어져 있습니다. 그래서 아나콘다에 포함되어있지 않은 Plotly, Kaleido , Statsmodels 과 같은 패키지만 별도로 pip를 통해 설치합니다.
하지만 컴퓨터에 아나콘다를 설치하지 않고 단순히 파이썬만 설치된 상태라면 위에서 언급한 모든 패키지를 pip로 설치해야 합니다. 여기서는 윈도우 환경을 기준으로 설명합니다.
Plotly 라이브러리는 아나콘다 프롬프트(Anaconda Prompt) 또는 명령 프롬프트를 통해서 설치할 수 있습니다. 아나콘다 프롬프트를 열었다면 아나콘다 프롬프트에 아래의 커맨드를 입력하여 Plotly 를설치합니다.
> pip install plotly==5.11.0
그림파일로 추출을 하려면 kaleido라는 별도의 패키지 설치가 필요합니다. Kaleido
> pip install kaleido
추세선 기능을 활용하기 위해선 statsmodels 패키지를 추가 설치해야 합니다. statsmodels
> pip install statsmodels
Plotly를 활용해서 그래프를 그리는 다양한 방법 중 가장 많이 사용되는 2가지 방법에 대해 소개합니다.
본 내용에서는 2가지 방법 사용법에 대해 모두 자세히 설명 합니다. 경우에 따라서는 두가지 방법을 융합하여 빠르고 가시성이 뛰어난 시각화 코딩 방법에 대해서도 학습 합니다.
아래의 막대 그래프를 2가지 방법을 활용하여 시각화 하는 방법에 대해 알아 보겠습니다.

그래프를 하나하나 설명하고 직접 지정하며 제작하는 방법입니다.
예제)
# 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()
import plotly.graph_objects as go
graph_objects 를 사용하기 위해 먼저 개발환경에 graph_objects 를 go 라는 별칭으로 불러옵니다.
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"))
)
fig.show()
Figure는 Plotly 작업의 기본 단위 입니다. Figure는 go.Figure() 함수를 통해 생성이 가능합니다. 이때 go.Figure 힘수의 구조는 아래와 같습니다. data와 layout 총 2개를 input으로 받는 구조입니다.

data는 일명 "Trace" 를 Python List 형태로 받습니다. Trace는 그리고자 하는 그래프의 타입(ex. Bar, Scatter, Line, Box..)과 그 그래프에 시각화 하고자 하는 Raw 데이터를 품고있는 단위 입니다.
예를들면 위의 예제에서는 go.Bar(x=[1, 2, 3], y=[1, 3, 2]) 가 하나의 Trace가 됩니다. 리스트 형태로 받는 이유는 하나의 Figure에 다양한 Trace를 동시에 시각화를 하기위헤 리스트 형태로 받습니다.
그래프의 data와는 무관하고 그외 모든 부분을 편집 및 가공하는 부분입니다. Title, legend, Colors, Hover-label, Axes, Shape 등 그래프 등 시각화를 높히기 위한 다양한 도구들은 모두 layout을 통해 지정합니다.
fig.show()
Figure를 받은 객체에 show() 함수를 마지막에 작성하면 랜더링 과정을 통해 내 주피터 노트북 출력 셀에 그래프가 나타납니다.
그래프를 이미 제작되어있는 템플릿으로 빠르게 제작하는 방법으로 매우 짧은 코드만으로 양질의 그래프를 제작할수있는 high-level 모듈 입니다.
graph_objects 모듈과 express 모듈은 Matplotlib과 Seaborn 의 사이와 같습니다. Matplotlib 를 기반으로 만들어진 Seaborn 이미 만들어진 템플릿을 활용하여 더 쉽게 사용이 가능하듯이 express 또한 graph_objects 로 제작이 된 모듈로 사용이 더욱 쉽습니다.
또하나 비슷한 점은 Seaborn 을 Matplotlib의 문법을 활용해서 튜닝이 가능하듯 express 또한 graph_objects의 기능인 add_trace(), update_layout(), update_traces() 기능을 활용하여 세세한 튜닝이 가능합니다. "Todo" 링크 연결
예제)
# 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()
실행 결과

import plotly.express as px
express 를 사용하기 위해 먼저 개발환경에 express 를 px 라는 별칭으로 불러옵니다.
fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2],
title="A Figure Specified By express")
px.bar 를 활용해서 바로 그래프의 타입을 bar로 지정하고, x, y 에 각각 데이터를 넣어줍니다. 마지막으로 title 또한 펑션안에서 바로 넣어주어서 매우 짧은 코드만으로 Figure 제작을 완료하였습니다.
지금 현재 px.bar 와 같이 express 를 통해 제작된 템플릿은 아래와 같습니다.
fig.show()
Figure를 받은 객체에 show() 함수를 마지막에 작성하면 랜더링 과정을 통해 내 주피터 노트북 출력 셀에 그래프가 나타납니다.
2가지 방법은 아래의 표와 같은 장단점이 있습니다.

Plotly에서 그래프를 그리는 가장 보편적인 방법은 아래 그림과 같이 기초 그래프를 생성 후 다양한 방법으로 그래프를 업데이트하는 2단계를 거치는 방법입니다. 이번 장에서는 2번째 단계인 그래프를 업데이트 하는 5가지의 함수 기능에 대해 간략히 설명드리겠습니다.

앞으로 진행 될 Plotly 기본 문법 및 여러 그래프들은 대부분 지금부터 소개 해 드릴 5개의 함수를 활용한 Plotly 그래프 튜닝 과정이라고 볼 수 있습니다.
Keyword : Plotly update_layout, Plotly add_trace, Plotly update_traces, Plotly update_xaxes, Plotly update_yaxes,
fig.add_trace(추가할 Trace 입력)
add_trace() 함수를 활용하면 Figure에 새로운 Trace를 추가 가능합니다. ex) go.Scatter, go.Bar...등등
예제 1) 빈 Figure 에 Trace 추가하기
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Bar(x=[1, 2, 3], y=[1, 3, 2]))
fig.show()
실행 결과

예제 2) 이미 Trace가 있는Figure에Trace 추가하여 겹쳐 그리기
import plotly.express as px
# 데이터 불러오기
df = px.data.iris()
# express를 활용한 scatter plot 생성
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",
title="Using The add_trace() method With A Plotly Express Figure")
fig.add_trace(
go.Scatter(
x=[2, 4],
y=[4, 8],
mode="lines",
line=go.scatter.Line(color="gray"),
showlegend=False)
)
fig.show()
실행 결과

이미 생성된 scatterplot 위에 직선의 그래프를 add_trace()를 활용해서 추가합니다.
fig.update_traces(업데이트 내용)
update_trace() 함수를 사용하면 이미 생성된 trace의 type, 색, 스타일, 템플릿 등 추가 편집이 가능합니다. 물론 처음 Trace를 생성할 때 스타일 지정을 해서 생성이 가능하지만 update_trace 를 활용하면 한번에 모든 Trace의 스타일 업데이트가 가능하여 코드의 길이를 줄일 수 있으며 가독성이 높은 코드구현을 위해 Trace 생성부 와 Trace 편집부를 나눠서 작성 가능하게 합니다.
예제)
from plotly.subplots import make_subplots
# subplot 생성
fig = make_subplots(rows=1, cols=2)
# Trace 추가하기
fig.add_scatter(y=[4, 2, 3.5], mode="markers",
marker=dict(size=20, color="LightSeaGreen"),
name="a", row=1, col=1)
fig.add_bar(y=[2, 1, 3],
marker=dict(color="MediumPurple"),
name="b", row=1, col=1)
fig.add_scatter(y=[2, 3.5, 4], mode="markers",
marker=dict(size=20, color="MediumPurple"),
name="c", row=1, col=2)
fig.add_bar(y=[1, 3, 2],
marker=dict(color="LightSeaGreen"),
name="d", row=1, col=2)
# 한번에 Bar plot 만 파란색으로 바꾸기
fig.update_traces(marker=dict(color="RoyalBlue"),
selector=dict(type="bar"))
fig.show()
실행 결과

fig.update_layout(업데이트 내용)
update_layout() 함수를 사용하면 그래프 사이즈, 제목 및 텍스트, 글꼴크기 와 같은 Trace 외적인 그래프 요소를 업데이트 가능합니다.
예제)
import plotly.graph_objects as go
#그래프 생성
fig = go.Figure(data=go.Bar(x=[1, 2, 3], y=[1, 3, 2]))
# 타이틀 추가하기
fig.update_layout(title_text="Using update_layout() With Graph Object Figures",title_font_size=30)
fig.show()
실행 결과

fig.update_xaxes(업데이트 내용)
fig.update_yaxes(업데이트 내용
update_xaxes(), update_yaxes() 함수를 사용하면 각각 X축, Y축에 관한 다양한 편집이 가능합니다. ex) 축 타이틀, 축 라인 스타일, 그리드 설정 등
예제)
import plotly.graph_objects as go
import plotly.express as px
#데이터 생성
df = px.data.tips()
x = df["total_bill"]
y = df["tip"]
# 그래프 그리기
fig = go.Figure(data=go.Scatter(x=x, y=y, mode='markers'))
# 축 타이틀 추가하기
fig.update_xaxes(title_text='Total Bill ($)')
fig.update_yaxes(title_text='Tip ($)')
fig.show()
실행 결과

Plotly와 Seaborn에서는 학습자들의 실습을 돕기위해 다양한 데이터셋을 제공합니다.
본 책에서는 Plotly와 Seaborn 제공 데이터셋을 Pandas의 데이터프레임 형태로 불러와서 시각화를 진행 할 예정입니다.
Seaborn은 아나콘다 프롬프트(Anaconda Prompt) 또는 명령 프롬프트를 통해서 설치할 수 있습니다. 아나콘다 프롬프트를 열었다면 아나콘다 프롬프트에 아래의 커맨드를 입력하여 텐서플로우를 설치합니다.
> pip install seaborn
다양한 타입의 그래프를 배우기 전에 Plotly의 기본 문법에 대해 알아보겠습니다.

Plotly의 각각의 그래프 생성방법에(express, graph_object ) 따라 그래프 사이즈 및 Margin 설정 방법에 대해 알아봅니다.
Keyword : Plotly 그래프 사이즈, Plotly graph size ,Plotly 그래프 마진, Plotly graph margin , Plotly width, Plotly height
import plotly.express as px
fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2],width=600, height=400)
fig.show()
실행 결과

[사용 함수]
[함수 input 내용]
margin 이란 전체 크기(Figure) 와 그래프(Trace) 사이의 거리를 뜻합니다.

예시)
fig.update_layout(
margin_l=left margine,
margin_r=right margine,
margin_b=right margine,
margin_t=top margine)
[사용 함수]
[함수 input 내용]
예제) 그래프 크기와 margin을 한번에 조절해보겠습니다.
import plotly.express as px
fig = px.bar(x=["a", "b", "c"], y=[1, 3, 2])
# 그래프 크기와 margin 설정하기
fig.update_layout(
width=600,
height=400,
margin_l=50,
margin_r=50,
margin_b=100,
margin_t=100,
# 백그라운드 칼라 지정, margin 잘 보이게 하기위함
paper_bgcolor="LightSteelBlue",
)
fig.show()
실행 결과
