두 연속변수의 관계
시본을 이용하여 두 연속변수의 관계를 시각화는 방법을 알아보겠습니다.
import seaborn as sns
시본에는 몇 가지 예제 데이터가 내장되어 있습니다. 팁 데이터를 사용해보겠습니다. 데이터는 pandas
의 DataFrame
형식으로 되어 있습니다.
df = sns.load_dataset('tips')
df.head()
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 |
산점도
총액(total_bill
)과 팁(tip
)의 관계를 시각화해보겠습니다. 아래 그림은 점들을 뿌려놓았다고 해서 산점도(scatterplot)이라고 합니다.
sns.scatterplot(x='total_bill', y='tip', data=df)
<matplotlib.axes._subplots.AxesSubplot at 0x2529e9a8208>
색은 color
로 바꿉니다.
sns.scatterplot(x='total_bill', y='tip', color='red', data=df)
<matplotlib.axes._subplots.AxesSubplot at 0x252a0df5eb8>
점의 모양을 바꿀 수도 있습니다. 마커 목록
sns.scatterplot(x='total_bill', y='tip', marker='+', data=df)
<matplotlib.axes._subplots.AxesSubplot at 0x252a0baa2b0>
점의 불투명도는 alpha
로 조정합니다. 0은 완전 투명, 1은 완전 불투명입니다. 0.2는 20%만 투명하므로 점 5개가 겹쳐야 alpha
가 1일 때와 같은 정도로 불투명해집니다.
sns.scatterplot(x='total_bill', y='tip', alpha=.2, data=df)
<matplotlib.axes._subplots.AxesSubplot at 0x252a0ec9b70>
범주형 변수에 따라 다르게 그리기
범주형 변수에 따라 색상을 다르게 그릴 수 있습니다. hue
에 범주형 변수를 지정해줍니다.
sns.scatterplot(x='total_bill', y='tip', hue='time', data=df)
<matplotlib.axes._subplots.AxesSubplot at 0x2529fc83940>
여러 개의 색상을 지정할 때는 palette
를 사용합니다.
sns.scatterplot(x='total_bill', y='tip', hue='time',
palette=['purple', 'green'], data=df)
<matplotlib.axes._subplots.AxesSubplot at 0x252a0c65eb8>
추세선
추세선을 넣을 때는 regplot
을 사용합니다. 선의 위아래로 옅게 표시된 부분은 추세선의 95% 신뢰구간을 나타냅니다.
sns.regplot(x='total_bill', y='tip', data=df)
<matplotlib.axes._subplots.AxesSubplot at 0x252a10a83c8>
신뢰구간을 지우려면 ci=None
을 해줍니다.
sns.regplot(x='total_bill', y='tip', ci=None, data=df)
<matplotlib.axes._subplots.AxesSubplot at 0x252a1104a58>
lowess=True
를 하면 추세선을 선형이 아닌 국소 회귀 기법으로 그립니다. 이 기법은 부분 부분의 선형 추세를 찾은 다음에 그 추세들을 이어 매끄러운 곡선으로 만듦니다.
아래 예제는 추세선을 국소 회귀 기법으로 그리면서 선의 색은 빨강, 점의 색은 회색으로 나타낸 것입니다.
sns.regplot(x='total_bill', y='tip', lowess=True, data=df,
line_kws={'color': 'red'}, scatter_kws={'color': 'grey'})
<matplotlib.axes._subplots.AxesSubplot at 0x252a1361940>