Plotly, 반응형 그래프

매생이·2021년 12월 7일
0

파이썬 공부

목록 보기
8/8
post-thumbnail

Plotly


Plotly express

Plotly는 python에서 사용하는 시각화를 위한 모듈이다.
과거부터 현재까지 많이 사용되고있는 matplotlib가 대표적인 시각화 묘듈이지만,
처음 plotly의 시각화 그래프를 보자마자 훨씬 좋다는 생각이 들었다.

수업 실습에 사용된 plotly의 3d scatter plot을 보고는 완전히 빠져들었다.
3d로 시각화가 되기 때문에 군집의 양상같은 것이 너무나 잘 느껴졌다.
게다가 코드도 훨씬 간결하다는 매력까지 갖는다.

가장 큰 장점이자 다른 모듈과의 차이점은 반응형(Interactive)라는 점이다.
plotly를 사용시 출력된 그래프의 우측 상단에 사용자와 상호작용 할 수 있게
여러 종류의 버튼이 존재한다.
plot의 png저장, 가로, 세로로 회전을 시킬 수 있도록 가로 세로를 지정하는 버튼이 존재하며, 확대도 가능하다.

설치


plotly.express를 통해서 plotly의 여러 그래프들을 사용할 수 있다.
아래 설치 방법을 통해서 설치한다.

pip install plotly==4.10.0
conda install -c plotly plotly==4.1.0

3d Scatter


아래는 Iris 데이터를 사용하여 간단한 3d 시각화를 진행한 모습이다.

import plotly.express as px
import pandas as pd
from sklearn.datasets import load_iris

iris = load_iris()
iris = pd.DataFrame(iris['data'],columns = iris['feature_names'])
px.scatter_3d(iris,iris['sepal width (cm)'],iris['petal length (cm)'],iris['sepal length (cm)'])

사실상 위 코드에서 시각화에 사용된 코드는 한줄이다.


위 코드를 실행한 결과를 확대한 모습이다.
확대하면 데이터들의 거리를 확인할 수 있다.


Json


Plotly의 scatter plot을 변수에 저장해서 출력해보면 Json형식으로 이루어져 있는 것을 알 수 있다.

이 경우에는 scatter plot이기 때문에 점으로 표현되어 symbol이 circle, color는 #636efa라는 값이다.

type : scatter3d 인것을 볼 수 있으며 각 x y z에 값이 저장된 배열이 들어가있다.
매개변수로 받은 iris데이터를 이렇게 변경하여 어떻게 3d 형식의 반응형 웹을 구현하는지가 궁금해졌다.

JavaScript

Plotly Github

위에서 봤듯이 scatter plot 함수는 매개변수들을 JSON형태로 변환해서 사용한다.
이는 기존의 plolty가 JavaScript 기반이기 때문이다.
트리와 비슷한 직렬화된 자료형으로 변환된다.
이러한 트리는 attribute 라는 이름을 갖는 노드들로 이루어져있다.

변환된 JSON 형식의 데이터를 JavaScript로 구현되어있는 plotly.js를 사용하여 Jupyter notebook에 출력한다.
Jupyter notebook은 웹상으로 python을 실행하기 때문에 plotly를 바로 출력시킬 수 있다.

하지만 pycharm같은 ide에서는 즉시 실행이 되지않고 html형태의 파일로 그래프가 저장된다.
Jupyter와 다르게 html기반에서 실행되는 방식이 아니기 때문이다.


정리하자면, Plotly는 기존은 JavaScript로 이루어진 그래프 출력 라이브러리이며,
PythonR 에서도 사용이 가능하다.
매개변수로 넘겨준 데이터를 트리형식의 JSON형식으로 변경하여 JS로 구현된 함수를 통해 출력된다.
JS기반이기 때문에 반응형으로 구현될 수 있었으며, html위에서 실행되지 않는 pycharm같은 개발도구환경에서는 곧바로 출력되지않고 html형식의 파일로 저장돼서 확인할 수 있다.


0개의 댓글