Seaborn 시각화: lmplot(), relplot(), jointplot(),

 

이번에는 Seaborn의 다음과 같은 그래프에 대해 알아봅시다.

  1. 선형 그래프
  2. 다중관계도표
  3. 분포 그래프

학습 활동은 아래를 참고하세요.

Q1 다음 각각이 의미하는 바는 무엇인가요?

In [1]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

Q2 sns.load_dataset()은 무엇을 하는 함수인가요?

In [2]:
titanic = sns.load_dataset('titanic')
titanic
Out[2]:
survivedpclasssexagesibspparchfareembarkedclasswhoadult_maledeckembark_townalivealone
003male22.0107.2500SThirdmanTrueNaNSouthamptonnoFalse
111female38.01071.2833CFirstwomanFalseCCherbourgyesFalse
213female26.0007.9250SThirdwomanFalseNaNSouthamptonyesTrue
311female35.01053.1000SFirstwomanFalseCSouthamptonyesFalse
403male35.0008.0500SThirdmanTrueNaNSouthamptonnoTrue
................................................
88602male27.00013.0000SSecondmanTrueNaNSouthamptonnoTrue
88711female19.00030.0000SFirstwomanFalseBSouthamptonyesTrue
88803femaleNaN1223.4500SThirdwomanFalseNaNSouthamptonnoFalse
88911male26.00030.0000CFirstmanTrueCCherbourgyesTrue
89003male32.0007.7500QThirdmanTrueNaNQueenstownnoTrue

891 rows × 15 columns

891 rows × 15 columns

  1. survived: 생존여부
  2. pclass: 좌석등급
  3. sex: 성별
  4. age: 나이
  5. sibsp: 형제자매 숫자
  6. parch: 부모자식 숫자
  7. fare: 요금
  8. embarked: 탑승 항구
  9. class: 좌석등급 (영문)
  10. who: 사람 구분
  11. deck: 데크
  12. embark_town: 탑승 항구 (영문)
  13. alive: 생존여부 (영문)
  14. alone: 혼자인지 여부
In [3]:
tips = sns.load_dataset('tips')
  1. total_bill: 총 합계 요금표
  2. tip: 팁
  3. sex: 성별
  4. smoker: 흡연자 여부
  5. day: 요일
  6. time: 식사 시간
  7. size: 식사 인원

선형 회귀 그래프

lmplot은 column 간의 선형관계를 확인하기에 용이한 차트입니다.

Q3 선형 회귀란 무엇인가요?

In [4]:
sns.lmplot(x="total_bill", y="tip", height=8, data=tips)
plt.show()

Q4 위 그래프에서 x와 y는 무엇을 의미하나요? height=와 data=는 또한 무엇인가요?

Q5 만약 축의 제목을 바꾸고 싶다면 어떻게 해야 할까요?

두 변수 x 범주 1개

In [5]:
sns.lmplot(x="total_bill", y="tip", hue="smoker", height=8, data=tips)
plt.show()

Q6 hue= 옵션은 어떤 결과를 가져왔나요?

두 변수 x 범주 2개

In [6]:
sns.lmplot(x='total_bill', y='tip', hue='smoker', col='day', col_wrap=2, height=8, data=tips)
plt.show()

Q7 col= 옵션은 어떤 결과를 가져왔나요?

Q8 col_wrap=은 무엇을 하는 옵션인가요?

다중 관계도표 (Relplot)

In [7]:
sns.relplot(x="total_bill", y="tip", hue="day", data=tips)
plt.show()

Q9 다중관계도표는 무엇을 하는 도표인가요?

Q10 x=,y=,hue=는 각각 무엇을 의미하나요?

In [8]:
sns.relplot(x="total_bill", y="tip", hue="day", col="time", data=tips)
plt.show()

Q11 선형 회귀와 비교했을 때 다중관계도표가 가지는 강점과 약점은 무엇인가요?

In [9]:
sns.relplot(x="total_bill", y="tip", hue="day", row="sex", col="time", data=tips)
plt.show()

Q12 위의 다중관계도표를 해석해보세요.

In [10]:
sns.relplot(x="total_bill", y="tip", hue="day", row="sex", col="time", palette='CMRmap_r', data=tips)
plt.show()

Q13 인터넷을 검색해서 platte=옵션에 더 올 수 있는 색상표를 찾아보세요.

분포-산점도

In [11]:
sns.jointplot(x="total_bill", y="tip", height=8, data=tips)
plt.show()

Q14 분포산점도란 무엇인가요?

In [12]:
sns.jointplot("total_bill", "tip", height=8, data=tips, kind="reg")
plt.show()

Q15 옵션 kind='reg'는 어떤 결과를 만들었나요?

밀도 폴리곤

In [13]:
sns.jointplot("total_bill", "tip", height=8, data=tips, kind="hex")
plt.show()

Q16 밀도 폴리곤은 왜 필요할까요? 장점은 무엇인가요?

밀도 등고선

In [14]:
iris = sns.load_dataset('iris')
sns.jointplot("sepal_width", "petal_length", height=8, data=iris, kind="kde", color="g")
plt.show()

Q17 밀도 등고선은 왜 필요한가요? 장점은 무엇인가요?

댓글 4개:

  1. 데이터 테이블의 값들이 너무 커서 산점도나 피벗 시각화로 나타내기 힘들 경우에는 어떤 방법으로 나타내는 것이 옳은 건가요?

    답글삭제
    답글
    1. 밀도 폴리곤으로 하세요.

      삭제
    2. 정규화로 나타내는 것은 정확하지 않나요?

      삭제
    3. 값이 너무 많으면 점들이 겹쳐 보여서 경향성을 바로 보기 어렵지요. 적당히 크면 jitter (옆으로 약간씩 비틀어서 보여주는 방법)와 alpha(투명도)를 섞어서 시각화하거나 특정 영역의 밀도로 보여주는 법이 정석이에요. 정규화(normalization)은 중심과 편차를 고정시켜서 서로 다른 측정치의 단위 크기를 통일하는 방법인데 찍을 값들이 많은 것과는 다르지요. 값이 크다(scale이 크다는 아닌듯)의 의미에서 unknown(구글 아이디를 몰라서)이 이야기하는 것과 결이 다르다고 봐요.

      삭제

PyR Intro - 신입생OT학기제