Seaborn intro - boxplot
강의 홍보
- 취준생을 위한 강의를 제작하였습니다.
- 본 블로그를 통해서 강의를 수강하신 분은 게시글 제목과 링크를 수강하여 인프런 메시지를 통해 보내주시기를 바랍니다.
스타벅스 아이스 아메리카노를 선물
로 보내드리겠습니다.
- [비전공자 대환영] 제로베이스도 쉽게 입문하는 파이썬 데이터 분석 - 캐글입문기
Seaborn 개요
Matplotlib
라이브러리가 Python
에서 제공하는 기본적인 시각화 도구이지만, 기본객체는 리스트 형태를 따르기 때문에, 엑셀 데이터, 즉 데이터 프레임에 익숙한 사용자들에게는 조금 불친절한 것은 아쉬움이 있습니다. 실제, 입문자를 대상으로 강의를 할 때에도 Seaborn
부터 알려드리는데, 그 이유는 Pandas
를 활용한 데이터 가공 직후에 보다 쉽게 연동할 수 있도록 Seaborn
이 개발되었기 때문입니다. 또한, Matplotlib
에서는 회귀선과 같은 통계적 내용의 그래프도 보다 쉽게 구현할 수 있도록 제작되었습니다. 보다 정교한 시각적인 디자인을 추가 및 수정하려면, Matplotlib
를 보다 더 잘 활용해야 합니다. 이는 마지막 본 포스트의 마지막 장에서 다루도록 합니다.
먼저, 간단한 예제를 통해서 익히도록 합니다.
(1) 라이브러리 불러오기
필요한 모듈을 불러옵니다.
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
(2) 데이터 불러오기
이번에는 seaborn
패키지 내 load_data
데이터를 활용합니다. 실전에서는 csv
, excel
, 또는 DB
에서 직접 데이터를 불러오는 영역이 이 부분이 됩니다.
# tips 데이터셋 가져오기
tips = sns.load_dataset("tips")
# tips 데이터셋 살펴보기
print(tips.head())
print("\n")
print(tips.info())
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 244 entries, 0 to 243
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 total_bill 244 non-null float64
1 tip 244 non-null float64
2 sex 244 non-null category
3 smoker 244 non-null category
4 day 244 non-null category
5 time 244 non-null category
6 size 244 non-null int64
dtypes: category(4), float64(2), int64(1)
memory usage: 7.3 KB
None
(3) 박스플롯 그래프
박스플롯은 주로 범주형 데이터에 대한 양적 데이터의 분포를 보여주는 그래프이다. 이 때, 최대값, 최소값, 중앙값, 사분편차를 사용하여 자료의 측정값들이 어떤 모양으로 분포가 되어 있는지 확인하며, 극단값들은 어떠한지 등을 쉽게 알 수 있도록 하는 그림이다. 특히, 실무에서는 그룹간의 수치 데이터를 비교할 때 사용하면 매우 유용하다.
Seaborn
에서는 boxplot()
과 violinplot()
함수로 그린다.
sns.boxplot(x = "day", y = "total_bill", data = tips)
plt.show()
또한 swarmplot()
를 활용하면, 박스플롯 위에 데이터의 분포를 추가로 표시할 수 있다.
sns.boxplot(x = "day", y = "total_bill", data = tips)
sns.swarmplot(x = "day", y = "total_bill", data = tips, color = ".25")
plt.show()
이번에는 hue
인수에 성별을 추가해본다.
sns.boxplot(x = "day", y = "total_bill", data = tips, hue = "sex", dodge=True)
sns.swarmplot(x = "day", y = "total_bill", data = tips, hue = "sex", dodge=True)
plt.show()
/usr/local/lib/python3.6/dist-packages/seaborn/categorical.py:1296: UserWarning: 5.1% of the points cannot be placed; you may want to decrease the size of the markers or use stripplot.
warnings.warn(msg, UserWarning)
이렇게 다양한 옵션을 통해, 박스플롯을 추가적으로 작성할 수 있다.