두 연속변수의 관계 :: Python 시각화 기초 - mindscale
Skip to content

두 연속변수의 관계

시본을 이용하여 두 연속변수의 관계를 시각화는 방법을 알아보겠습니다.

import seaborn as sns

시본에는 몇 가지 예제 데이터가 내장되어 있습니다. 팁 데이터를 사용해보겠습니다. 데이터는 pandasDataFrame 형식으로 되어 있습니다.

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>