Python에서 데이터 시각화하는 다양한 방법
in Development on Python
- Python에서 데이터 시각화할 때 사용하는 다양한 라이브러리를 정리한 글입니다
- 데이터 분석가들은 주로 Python(또는 R, SQL)을 가지고 데이터 분석을 합니다
- R에는 ggplot이란 시각화에 좋은 라이브러리가 있는 반면 Python에는 어느 춘추전국시대처럼 다양한 라이브러리들이 있습니다
- 각 라이브러리들마다 특징이 있기 때문에, 자유롭게 사용하면 좋을 것 같습니다
- Zeppelin도 시각화할 때 사용할 수 있지만, 라이브러리는 아니기 때문에 이 문서에선 다루지 않습니다
- 데이터 시각화 관련한 꿀팁은 카일 스쿨 2주차를 참고해주세요 :)
- 저는 Jupyter Notebook으로 레포트를 작성해, 레포트의 보는 사람이 누구인지에 따라 다르게 그래프를 그렸습니다
- 직접 그래프를 더 탐색해보고 싶은 목적이 있는 분들에게 보내는 그래프라면 동적인(Interactive) 그래프를 그렸습니다
- 반복적인 레포트는 정적인 그래프 기반으로 작성한 후, 추가적인 내용이 궁금하면 대시보드로 가도록 유도했습니다
- 이 문서는 맥북에서 작성되었으며, 부족한 내용이 있으면 연락주세요 :)
- 현재 프론트단의 문제로 자바스크립트 기반 그래프는 처음엔 보이지 않을 수 있습니다. 10초 뒤 새로고침하면 나올거에요-!
- plot.ly, pyecharts는 웹에서 정말 강력합니다. 꼭 직접 사용해보세요!
- 라이브러리
matplotlib
seaborn
plotnine
folium
plot.ly
pyecharts
Matplotlib
- Python에서 아마 가장 많이 쓰는 라이브러리입니다
pandas
의 Dataframe을 바로 시각화할 때도 내부적으로 matplotlib을 사용합니다- 설치
pip3 install matplotlib
- Matplotlib Tutorials
- 데이터 사이언스 스쿨
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
print("Matplotlib version", matplotlib.__version__)
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
Figure
- Figure는 그림이 그려지는 도화지라고 생각할 수 있습니다
- 우선 Figure를 그린 후,
plt.subplots
로 도화지를 분할해 각 부분에 그래프를 그리는 방식으로 진행합니다 plt.figure
를 명시적으로 표현해주는 것이 좋으나, plot 함수에서 자동으로 figure를 생성하기 때문에 자주 사용하진 않습니다- 그러나 현재 figure에 접근해야 할 필요성이 있다면,
plt.gcf()
로 접근할 수 있습니다
- 우선 Figure를 그린 후,
- size를 조절하고 싶은 경우엔
fig.set_size_inches(18.5, 10.5)
- 또는
plt.figure(figsize=(10,5))
- 또는
plt.rcParams['figure.figsize'] = (10,7)
- 또는
Axes
- Axes는 plot이 그려지는 공간입니다
Axis
- plot의 축입니다
fig = plt.figure()
fig.suptitle('figure sample plots')
fig, ax_lst = plt.subplots(2, 2, figsize=(8,5))
ax_lst[0][0].plot([1,2,3,4], 'ro-')
ax_lst[0][1].plot(np.random.randn(4, 10), np.random.randn(4,10), 'bo--')
ax_lst[1][0].plot(np.linspace(0.0, 5.0), np.cos(2 * np.pi * np.linspace(0.0, 5.0)))
ax_lst[1][1].plot([3,5], [3,5], 'bo:')
ax_lst[1][1].plot([3,7], [5,4], 'kx')
plt.show()
df = pd.DataFrame(np.random.randn(4,4))
df.plot(kind='barh')
Out[4]:
- ggplot 스타일로 그리고 싶다면 아래 옵션 추가
plt.style.use('ggplot')
pd.options.display.mpl_style = 'default'
fig = plt.figure()
fig.suptitle('ggplot style')
fig, ax_lst = plt.subplots(2, 2, figsize=(8,5))
ax_lst[0][0].plot([1,2,3,4], 'ro-')
ax_lst[0][1].plot(np.random.randn(4, 10), np.random.randn(4,10), 'bo--')
ax_lst[1][0].plot(np.linspace(0.0, 5.0), np.cos(2 * np.pi * np.linspace(0.0, 5.0)))
ax_lst[1][1].plot([3,5], [3,5], 'bo:')
ax_lst[1][1].plot([3,7], [5,4], 'kx')
plt.show()
Seaborn
- seaborn은 matplotlib을 기반으로 다양한 색 테마, 차트 기능을 추가한 라이브러리입니다
- matplotlib에 의존성을 가지고 있습니다
- matplotlib에 없는 그래프(히트맵, 카운트플랏 등)을 가지고 있습니다
설치
pip3 install seaborn
- Seaborn Tutorials
import seaborn as sns
print("Seaborn version : ", sns.__version__)
sns.set()
sns.set_style('whitegrid')
sns.set_color_codes()
current_palette = sns.color_palette()
sns.palplot(current_palette)
tips = sns.load_dataset("tips")
sns.relplot(x="total_bill", y="tip", hue="smoker", style="smoker",
data=tips)
Out[11]:
df = pd.DataFrame(dict(time=np.arange(500),
value=np.random.randn(500).cumsum()))
g = sns.relplot(x="time", y="value", kind="line", data=df)
g.fig.autofmt_xdate()
sns.catplot(x="day", y="total_bill", hue="smoker",
col="time", aspect=.6,
kind="swarm", data=tips)
Out[12]:
titanic = sns.load_dataset("titanic")
g = sns.catplot(x="fare", y="survived", row="class",
kind="box", orient="h", height=1.5, aspect=4,
data=titanic.query("fare > 0"))
g.set(xscale="log");
iris = sns.load_dataset("iris")
sns.pairplot(iris)
Out[16]:
g = sns.PairGrid(iris)
g.map_diag(sns.kdeplot)
g.map_offdiag(sns.kdeplot, n_levels=6);