파이썬
라이브러리
seaborn
#
Find similar titles
- 최초 작성자
- 최근 업데이트
Structured data
- Category
- Programming
Seaborn # Python에는 데이터를 시각화하기 위한 다양한 라이브러리들이 있다. Matplotlib은 전 세계에서 가장 많이 사용되는 시각화 라이브러리이며, Seaborn은 Matplotlib을 쉽게 사용하기 위해 개발된 고수준 (high-level) 라이브러리이다. Seaborn의 가장 큰 장점은 간결함으로, 비교적 짧은 코드로 통계학의 주요 그래프를 빠르고 편리하게 만들 수 있다.
Table of Contents
Seaborn 설치 방법 및 Dependency #
Seaborn 라이브러리는 많은 사람에게 자주 사용되기 때문에 pip 와 conda 명령어를 통해 손쉽게 설치할 수 있다. * PyPl을 이용하는 경우 pip install seaborn * Conda를 이용하는 경우 conda install seaborn Seaborn을 이용하기 위해서 추가로 설치가 필요한 라이브러리 정보는 아래와 같다.
- Python 버전: 3.7 이상
- 필수 라이브러리: numpy, pandas, matplotlib
- 선택적 라이브러리: statsmodels, , scipy, fastcluster
Seaborn 이용 방법 #
다른 Python 라이브러리와 마찬가지로 import 명령어를 이용하여 불러오면 되며, 많은 사용자가 sns 이란 단어로 줄여서 이용한다.
import seaborn as sns
print(sns.__version__)
> '0.12.1'
Seaborn 을 활용하여 그릴 수 있는 그림 및 예시 코드 #
Seaborn 라이브러리 이용하면 다양한 그림을 표현할 수 있지만, 아래 예시에서는 많이 사용되는 대표 그림들을 살펴보도록 한다.
공통으로 자주 사용되는 옵션 #
- data: 시각화에 사용할 데이터를 지정
- x: 그림 상 x축에 표시할 데이터 정보
- Y: 그림 상 Y축에 효시할 데이터 정보
- hue: 데이터를 색으로 구분하여 표시
- style: 데이터를 형태로 구분하여 표시
- size: 데이터를 크기로 구분하여 표시
예시 데이터 #
Seaborn 라이브러리 내부에는 학습을 위해 몇 가지 예제 데이터가 포함되어 있다. Line plot ~ Scatter plot에서는 tips 데이터를,
tips = sns.load_dataset("tips")
tips
total_bill | tip | sex | smoker | day | time | size |
---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner |
... | ... | ... | ... | ... | ... | ... |
239 | 29.03 | 5.92 | Male | No | Sat | Dinner |
240 | 27.18 | 2.00 | Female | Yes | Sat | Dinner |
241 | 22.67 | 2.00 | Male | Yes | Sat | Dinner |
242 | 17.82 | 1.75 | Male | No | Sat | Dinner |
243 | 18.78 | 3.00 | Female | No | Thur | Dinner |
244 rows × 7 columns |
Heat map & Cluster map에서는 glue 데이터를 이용한다.
glue = sns.load_dataset("glue").pivot("Model", "Task", "Score")
glue
Task Model |
CoLA | MNLI | MRPC | QNLI | QQP | RTE | SST-2 | STS-B |
---|---|---|---|---|---|---|---|---|
BERT | 60.5 | 86.7 | 89.3 | 92.7 | 72.1 | 70.1 | 94.9 | 87.6 |
BiLSTM | 11.6 | 65.6 | 81.8 | 74.6 | 62.5 | 57.4 | 82.8 | 70.3 |
BiLSTM+Attn | 18.6 | 67.6 | 83.9 | 74.3 | 60.1 | 58.4 | 83.0 | 72.8 |
BiLSTM+CoVe | 18.5 | 65.4 | 78.7 | 70.8 | 60.6 | 52.7 | 81.9 | 64.4 |
BiLSTM+ELMo | 32.1 | 67.2 | 84.7 | 75.5 | 61.1 | 57.4 | 89.3 | 70.3 |
ERNIE | 75.5 | 92.3 | 93.9 | 97.3 | 75.2 | 92.6 | 97.8 | 93.0 |
RoBERTa | 67.8 | 90.8 | 92.3 | 95.4 | 74.3 | 88.2 | 96.7 | 92.2 |
T5 | 71.6 | 92.2 | 92.8 | 96.9 | 75.1 | 92.8 | 97.5 | 93.1 |
Line plot #
Line plot은 기본적으로 한 변수에 따른 다른 변수의 변화를 표시하는 데 사용된다.
기본적인 사용 방법은 아래와 같으며, 가운데 선이 각 x축 변수의 평균, 선 위/아래로 음영 표시된 영역은 신뢰구간을 의미한다.
sns.lineplot(data=tips, x="day", y="tip")
errorbar=None (or False)를 추가하면 해당 음영 영역을 생략할 수 있다.
sns.lineplot(data=tips, x="day", y="tip", errorbar=None)
hue="sex"를 사용하여 성별에 따라 서로 다른 선을 그린 후 색을 다르게 표시할 수 있다.
sns.lineplot(data=tips, x="day", y="tip", errorbar=None, hue="sex")
style="time"을 사용하여 서로 다른 시간을 선의 형태로 구분하여 표시할 수 있다.
sns.lineplot(data=tips, x="day", y="tip", errorbar=None, hue="sex", style="time")
Histogram #
Histogram은 하나 혹은 두 개 변수의 분포를 나타낼 때 사용할 수 있다.
sns.histplot(data=tips, x="tip")
Histogram 또한 hue 옵션을 사용하면 해당 변수의 차이를 시각적으로 확인할 수 있다.
sns.histplot(data=tips, x="tip", hue="sex")
또한, kde=True 옵션을 사용하면 변수에 대한 분포의 밀도 추정치를 연속된 곡선 시각화할 수 있다.
sns.histplot(data=tips, x="tip", hue="sex", kde=True)
두 개의 변수를 지정하는 경우, x축과 y축이 지정한 변수를 표시하고 해당 값이 관찰된 수는 색의 진한 정도로 표시된다.
sns.histplot(data=tips, x="total_bill", y="tip")
Bar plot #
Bar plot은 Histogram과 유사한 형태를 보이는 그림이지만, 주로 이변량(bivariate) 분석을 위한 plot으로 사용된다. 일반적으로 x축에는 범주형 변수를, y축에는 연속형 변수를 넣는다.
sns.barplot(data=tips, x="day", y="tip")
hue 옵션을 사용할 경우, 해당 변수에 따른 구분 및 비교를 할 수 있다.
sns.barplot(data=tips, x="day", y="tip", hue="sex")
Box plot #
Box plot은 데이터의 분포를 단계적으로 보여줄 때 유용하며, 최댓값, 제3 사분위 수, 중앙값(제2 사분위 수), 제1 사분위 수, 최솟값을 동시에 표현할 수 있다.
sns.boxplot(data=tips, x="day", y="tip")
Bos plot 또한 hue 옵션을 사용할 수 있다.
sns.boxplot(data=tips, x="day", y="tip", hue="sex")
Scatter plot #
Scatter plot은 2차원의 좌표평면 위에 데이터를 표시할 때 사용할 수 있다. 기본적으로 두 변수 간의 관계를 시각화하지만, hue, style, size 등을 이용하여 더욱 복잡한 관계를 표현할 수 있다.
sns.scatterplot(data=tips, x="total_bill", y="tip")
hue 옵션을 사용하여 변수에 따라 색을 다르게 표현할 수 있으며
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day")
style 옵션으로 마커 모양을 변경하거나
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day", style="time")
size 옵션으로 마커의 크기를 변경할 수 있다.
sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day", style="time", size="size")
Heat map #
Heat map은 데이터 간의 수치를 색상으로 표현함으로써, 그 차이를 직관적으로 통찰할 수 있도록 한다.
sns.heatmap(glue)
annot=True 옵션을 통해 해당 수치를 그림에 표시할 수 있으며, fmt 옵션을 통해 해당 수치의 표기 형식을 지정할 수 있다.
sns.heatmap(glue, annot=True, fmt=".1f")
Cluster map #
Cluster map은 기존의 Heat map을 같은 형태의 그림을 제공하지만, 유상성에 따라 가로축 혹은 세로축의 순서를 변경하여 제공한다.
sns.clustermap(glue)
row_cluster 혹은 col_cluster 옵션을 통해 좌측 혹은 상단의 Dendrogram 표시를 생략할 수 있다.
sns.clustermap(glue, row_cluster=False, col_cluster=False)
row_color 혹은 col_color 옵션을 이용하면, 좌측과 상단에 새로운 칸이 추가되고 지정한 색이 표시된다.
row_colors = ["b", "r", "r", "r", "r", "b", "b", "b", "b"]
sns.clustermap(glue, row_colors=row_colors)